Návod Pro správce a analytiky
Jak bezpečně klonovat cizí Git repozitáře: submoduly, nastavení a CI
Správci Gitu 10. listopadu 2026 zveřejnili chybu CVE-2026-111760: repozitář útočníka může při klonování s přepínačem --recurse-submodules spustit vlastní kód. Opravená verze k 12. 11. 2026 neexistuje. Je to už třetí podobná chyba za dva a půl roku, takže se vyplatí nastavit si klonování cizího kódu tak, aby tuhle třídu útoků omezilo – dnes i po vydání opravy.
Ve zkratce
- CVE-2026-111760 (CVSS 8,0) se podle správců Gitu týká všech verzí a opravená verze zatím není. Spustí se jen při klonování s --recurse-submodules z repozitáře, který připravil útočník.
- Výchozí git clone submoduly nestahuje. Cizí repozitáře proto klonujte bez --recurse-submodules a submoduly nechte, dokud nevyjde oprava a nevíte, odkud jsou.
- Zkontrolujte, jestli nemáte globálně submodule.recurse=true a jestli CI nestahuje submoduly cizího kódu (actions/checkout s submodules: true nebo recursive).
- Cizí kód zkoumejte v jednorázovém prostředí bez SSH klíčů a tokenů. Po vydání opravy Git hned aktualizujte – předchozí chyba CVE-2025-48384 skončila v katalogu CISA KEV.
Co je CVE-2026-111760 a proč na tom záleží
Správci Gitu 10. listopadu 2026 zveřejnili advisory GHSA-vp2w-7xxj-jvxr s názvem „Recursive clones are susceptible to Remote Code Execution“. Repozitář pod kontrolou útočníka může zneužít chybu, kvůli které Git přepíše takzvaný gitfile submodulu (malý soubor, který říká, kde leží data submodulu) symbolickým odkazem. Odkaz míří do adresáře se škodlivou konfigurací nebo hooky a Git pak může spustit kód, který si útočník určil.
Hodnocení je CVSS 8,0 (vektor AV:N/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:H) – útok potřebuje, aby oběť sama klonovala repozitář útočníka. Advisory uvádí jako dotčené všechny verze Gitu a opravené žádné: opravy se podle něj teprve probírají v e-mailové konferenci git-security. Jako obranu doporučuje neklonovat repozitáře z nedůvěryhodných zdrojů a dodává, že chybu podle všeho jde vyvolat jen s přepínačem --recurse-submodules.
Pro koho je to důležité: vývojáře, kteří zkoušejí cizí projekty, bezpečnostní analytiky, kteří stahují kód k rozboru, a hlavně CI/CD pipeline, které klonují kód automaticky a mají přitom přístup k tajemstvím.
Není to poprvé: submoduly jako opakovaný vstup
Stejné místo – submoduly, symbolické odkazy a hooky – už Git trápilo dvakrát:
- CVE-2024-32002 (zveřejněno 14. 5. 2024, CVSS 9,0): upravený repozitář se submoduly přiměl Git zapsat soubory do adresáře
.git/místo do pracovního stromu submodulu. Útočník tak mohl podstrčit hook, který se spustil ještě během klonování, dřív než si uživatel mohl kód prohlédnout. Opraveno ve verzích 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 a 2.39.4; útoku podle advisory bránilo i vypnutí symbolických odkazů (core.symlinks false). - CVE-2025-48384 (zveřejněno 8. 7. 2025, CVSS 8,0): Git při zápisu konfigurace zahazoval koncový znak CR. Cesta submodulu končící tímto znakem tak mohla vést jinam a přes symbolický odkaz se mohl spustit hook
post-checkoutsubmodulu. Opraveno ve verzích 2.43.7, 2.44.4, 2.45.4, 2.46.4, 2.47.3, 2.48.2, 2.49.1 a 2.50.1. CISA ji 25. 8. 2025 zařadila do katalogu aktivně zneužívaných zranitelností (KEV).
U nové chyby advisory nepíše, jestli pomáhá core.symlinks false, takže na to nespoléhejte.
Jak klonovat cizí repozitář bezpečně
1. Klonujte bez submodulů. Výchozí git clone submoduly neinicializuje – to dělá jen s přepínačem --recurse-submodules. U cizího kódu ho nepoužívejte:
git clone https://example.org/projekt.git
2. Podívejte se, co by se stahovalo. Soubor .gitmodules v kořeni repozitáře ukazuje, jaké submoduly projekt používá a odkud. Neznámé adresy jsou důvod k opatrnosti. Submoduly cizích projektů nechte neinicializované, dokud nevyjde oprava.
3. Zkontrolujte, jestli za vás Git nerekurzuje sám. Volba submodule.recurse=true podle dokumentace zapne --recurse-submodules jako výchozí u příkazů checkout, fetch, grep, pull, push, read-tree, reset, restore a switch (u samotného clone ne). Zjistěte, odkud se případně bere:
git config --show-origin --get-all submodule.recurse
Pokud vám vypíše true, zvažte ho do vydání opravy vypnout, nebo u cizích repozitářů používat git -c submodule.recurse=0 ….
4. Cizí kód zkoumejte v jednorázovém prostředí. Naše doporučení z praxe: virtuální stroj nebo kontejner bez vašich SSH klíčů, tokenů a přístupů do cloudu. Když se kód přece jen spustí, nemá co ukrást. Platí to i pro rozbor malwaru a podezřelých repozitářů, jaké se objevily v kampani wfx-loot.
5. Vypnutí hooků nestačí. Hooky jdou vypnout volbou core.hooksPath=/dev/null, advisory ale mluví o škodlivé konfiguraci nebo hoocích. Je to nanejvýš doplněk, ne náhrada bodů 1–4.
Co zkontrolovat v CI/CD
Pipeline jsou nejcitlivější místo: klonují automaticky a často mají po ruce tokeny k registrům a cloudu (jak ukázal útok ARTEX na uniklá tajemství).
- GitHub Actions: akce
actions/checkoutmá vstupsubmodulesve výchozím stavufalse. Najděte workflow, kde jesubmodules: trueneborecursive, a ověřte, že nezpracovávají kód z cizích zdrojů. - Skripty: vyhledejte v repozitářích s pipeline volání
--recurse-submodulesagit submodule update --init. - Tajemství:
actions/checkoutve výchozím stavu ukládá token do lokální konfigurace Gitu (persist-credentials: true). U úloh, které tlačit zpět nepotřebují, ho nastavte nafalse.
grep -rnE "recurse-submodules|submodules: *(true|recursive)" .github/ ci/ scripts/
(Adresáře upravte podle svého projektu.)
Až vyjde oprava
- Zjistěte verzi:
git --version, na serverech a v obrazech CI i přes správce balíčků. - Aktualizujte všude, kde se klonuje cizí kód – pracovní stanice, buildovací agenty, kontejnerové obrazy. U CVE-2025-48384 uplynuly od opravy do zařazení do KEV necelé dva měsíce.
- Opatření z bodů 1–4 si nechte i po opravě. Chyby v submodulech se vracejí.
Hodnocení CVSS si můžete rozebrat v naší CVSS kalkulačce – vložte do ní vektor z advisory a uvidíte, proč „vysoká složitost útoku“ (AC:H) a nutná akce uživatele (UI:R) dávají 8,0, a ne 10.
Když máte podezření, že se kód spustil
Pokud jste rekurzivně klonovali repozitář neznámého původu a vidíte podivné chování: odpojte stroj od sítě, vyměňte SSH klíče, tokeny a hesla dostupná z daného účtu (z jiného zařízení) a projděte, kam se z něj dalo dostat. Organizace v Česku mohou incident hlásit NÚKIB, na Slovensku národnímu týmu SK-CERT.
Aktualizace
-
-
- 2026: Článek vydán. Opravená verze Gitu pro CVE-2026-111760 zatím není (ověřeno v advisory GHSA-vp2w-7xxj-jvxr).
-
Časté otázky
Týká se CVE-2026-111760 i obyčejného git clone?
Podle advisory správců Gitu se chyba dá vyvolat jen při použití --recurse-submodules. Běžné git clone bez tohoto přepínače submoduly neinicializuje ani nestahuje. Správci ale píšou, že to tak předpokládají, ne že to mají ověřené pro všechny případy – opatrnost se cizích repozitářů týká vždy.
Je už vydaná opravená verze Gitu?
K 12. 11. 2026 ne. Advisory GHSA-vp2w-7xxj-jvxr uvádí jako dotčené všechny verze a opravené žádné; opravy se podle něj teprve probírají v neveřejné e-mailové konferenci git-security. Článek doplníme, až opravené verze vyjdou.
Ochrání mě vypnutí hooků přes core.hooksPath?
Jen částečně. Advisory popisuje, že symbolický odkaz může vést do adresáře se škodlivou konfigurací nebo hooky. Vypnutí hooků tedy nepokrývá cestu přes konfiguraci. Spolehlivé je nepoužívat --recurse-submodules u nedůvěryhodných repozitářů.
Používáme GitHub Actions. Jsme ohrožení?
Akce actions/checkout má vstup submodules ve výchozím stavu false, takže submoduly sama nestahuje. Riziko vzniká, když máte submodules: true nebo recursive u workflow, které zpracovává kód z cizích zdrojů, nebo když skript v pipeline volá git clone --recurse-submodules.
Zdroje
- Git – Security advisory GHSA-vp2w-7xxj-jvxr: Recursive clones are susceptible to Remote Code Execution (CVE-2026-111760, 10. 11. 2026, anglicky)
- Git – Security advisory GHSA-8h77-4q3w-gfgv (CVE-2024-32002, anglicky)
- NVD – CVE-2024-32002 (anglicky)
- NVD – CVE-2025-48384 (anglicky)
- CISA – Known Exploited Vulnerabilities Catalog: CVE-2025-48384 (anglicky)
- Git – dokumentace git-clone, přepínač --recurse-submodules (anglicky)
- Git – dokumentace git-config: submodule.recurse, core.symlinks, core.hooksPath (anglicky)
- GitHub – actions/checkout, vstup submodules (anglicky)
- NÚKIB – Hlášení kybernetických bezpečnostních incidentů
Našli jste v článku chybu? Dejte nám vědět, opravu vyznačíme.