Přeskočit na obsah
Bezpečnost 4 min čtení

Codex spouštěl program z nastavení cizího repozitáře mimo vlastní sandbox

OpenAI zveřejnila 1. září 2026 čtyři záznamy CVE ke svému agentnímu nástroji Codex. Tři z nich stojí na témže předpokladu: repozitář si s sebou nese vlastní soubor .git/config a Codex podle něj při zjišťování stavu pracovního stromu spustí program, který zvolil útočník. Kód běží mimo sandbox nástroje, bez dotazu na schválení a dřív, než se do věci vloží model.

Učebna s účastníky workshopu o Gitu a jejich notebooky
Workshop o systému Git na konferenci Xornadas Libres v roce 2011. Foto: txenoo, Flickr (CC BY-SA 2.0)

Git umí spustit cizí program, aniž ho o to kdokoli požádá. Stačí, aby to stálo v konfiguraci repozitáře – v souboru .git/config, který leží uvnitř skryté složky .git a platí jen pro ten jeden repozitář. Tři ze čtyř záznamů CVE, které OpenAI zveřejnila 1. září 2026 ke svému nástroji Codex, popisují přesně tohle.

Codex si po otevření složky zjišťuje, v jakém stavu repozitář je: na které větvi stojí, jestli jsou v něm neuložené změny, co se v pracovním stromu liší. Dělá to obyčejnými voláními git na pozadí – bez dotazu, bez schvalování a dřív, než se textu vůbec dotkne model. Do těchto volání se dá zvenčí sáhnout.

Tři klíče v konfiguraci, tři čísla CVE

Nejpřímočařejší je CVE-2026-19590. Klíč core.hooksPath říká Gitu, kde má hledat háčky, tedy skripty spouštěné kolem běžných operací. Když repozitář nasměruje core.hooksPath do složky, kterou ovládá útočník, spustí Codex Desktop jeho skript už při té rutinní evidenci. NVD to vede jako CWE-427, tedy neošetřenou cestu hledání.

CVE-2026-19592 míří na klíč core.fsmonitor. Ten Gitu podstrčí pomocný program, kterého se má ptát na změny v souborech místo procházení stromu. Codex tenhle klíč při sběru metadat nevypínal, takže se pomocník spustil s právy přihlášeného uživatele.

Třetí, CVE-2026-19593, jde přes atributy souborů: nastavení attr.tree spolu s definovaným filtrem typu clean nebo process nechá Git zavolat program určený repozitářem. Podmínkou je, aby byl git v systémové cestě; bez něj se nic nestane.

U všech tří je popis v záznamu shodný v tom podstatném. Program běží mimo sandbox, kterým Codex obaluje příkazy, nikdo se uživatele neptá na svolení a nepadne ani dotaz, jestli tomuhle pracovnímu prostoru důvěřuje. Útočníkův kód má pak přístup ke všemu, k čemu se dostane přihlášený účet.

Klon tu konfiguraci nepřenese

Jedna věc ten dosah zužuje a OpenAI ji píše u každého ze tří záznamů: běžný git clone soubor .git/config ze zdrojového repozitáře nekopíruje. Kdo si projekt naklonuje z GitHubu, tímhle způsobem ohrožený není.

Zbývá ale všechno ostatní, čím se adresáře po světě pohybují: archiv ke stažení, kopie na sdíleném disku, rozbalený balík od zákazníka, přenos přes rsync. Tam složka .git putuje celá i s místním nastavením. Otevřít takový adresář stačí.

Čtvrtá chyba sedí v parseru PowerShellu

CVE-2026-19591 stojí jinde a s konfigurací repozitáře nemá nic společného. Codex si před spuštěním příkazu rozebírá, co ten příkaz dělá, a podle toho rozhoduje, jestli se na něj zeptá uživatele. Jeho rozbor ale četl znak --%, kterým PowerShell přestává interpretovat zbytek řádku, jinak než sám PowerShell. Některé příkazy tím vyšly jako neškodné.

V praxi to znamenalo, že Codex mohl na pokyn ze čteného repozitáře pustit zápisový příkaz git bez dotazu. Kdyby zápis prošel, dal by se přepsat konfigurační soubor samotného Codexu, a ten při dalším načtení může podle něj spustit server MCP zvolený útočníkem. Na macOS a Linuxu je k tomu potřeba zvlášť doinstalovaný PowerShell Core. OpenAI k tomu dodává, že obejití schvalování nevypíná sandbox nad souborovým systémem – ten zápis mimo povolená místa může zastavit.

Jak vypadá příkaz, o který jde, je vidět v regresním testu, který s opravou přibyl do repozitáře. Parser dostane řetězec git log --% HEAD --output=codex_poc.txt a test žádá, aby ho vyhodnotil jako nepodporovaný tvar, tedy aby si na něj netroufal.

Opravy jsou v kódu od poloviny května

Tři ze čtyř záznamů odkazují na konkrétní návrh změny ve veřejném repozitáři openai/codex. Rozbor PowerShellu opravil návrh 22643 sloučený 14. května 2026, core.fsmonitor návrh 22652 z téhož dne a háčky návrh 22843 o den později.

Samotné opravy jsou drobné. U fsmonitoru přibyl jediný řádek, který každému volání git předhodí -c core.fsmonitor=false; u háčků je to obdobné přepsání core.hooksPath na /dev/null, na Windows na NUL.

Ve kterém vydání jsou ty opravy poprvé, jde ověřit i bez důvěry v záznam: ve značce rust-v0.130.0 z 8. května ani jedna z těch tří změn v souborech není, ve značce rust-v0.131.0 z 18. května jsou všechny. Sedí to s tím, co OpenAI uvádí v záznamu: příkazová řádka je zasažená od verze 0.72.0, respektive 0.102.0, až po 0.130.0 včetně, verze 0.131.0 už ne. Desktopová aplikace má opravu ve stavbě 26.519.22136 pro macOS a 26.519.21041 pro Windows.

Mezi vydáním verze 0.131.0 a zveřejněním záznamů tak leží 106 dní. Kdo mezitím četl popisy těch návrhů, se o bezpečnostním dopadu nedozvěděl nic: mluví se v nich o tom, že se chování pomocné funkce má stát předvídatelnějším a že mají pomocné příkazy zůstat stejné i v repozitáři s vlastním nastavením háčků. Slovo o zranitelnosti tam nepadne.

Závažnost zatím nikdo nevyčíslil

Známku CVSS nemá ani jeden ze čtyř záznamů. OpenAI, která je jako přidělovatel vydala, žádnou neuvedla; NVD je vede ve stavu Received, tedy před vlastním rozborem, a databáze hlášení GitHubu je má jako nekontrolované s neznámou závažností. Seřadit je od nejhoršího po nejmírnější tedy zatím není podle čeho.

Nálezci jsou u každého jiní: core.fsmonitor nahlásila laboratoř System Software and Security Lab na Fudanově univerzitě a vedle ní výzkumník firmy Doyensec přes program Zero Day Initiative, PowerShell tým Compass Security, háčky Sina Kheirkhah ze Summoning Teamu a atributy Satoki Tsuji z Ikotas Labs. Čísla si OpenAI rezervovala 12. srpna, tedy skoro tři měsíce po té opravené verzi a tři týdny před zveřejněním.

Jediný záznam bez odkazu na opravu je ten o atributech: u CVE-2026-19593 stojí místo návrhu změny jen adresa produktové stránky. Aplikace pro počítač je uzavřená, takže se u ní na rozdíl od příkazové řádky nedá nahlédnout, čím přesně se to spravilo.

Schvalovací dotaz i sandbox se u Codexu staví kolem příkazů, které si vyžádá model. Evidence repozitáře běží pod tím a proběhne ve chvíli, kdy uživatel jen otevřel adresář – u tří ze čtyř záznamů to výslovně stojí v popisu.

Zdroje

Diskuse

Zatím tu nikdo nediskutuje. Můžete být první.

Napsat příspěvek

Diskutovat můžete i bez účtu. S registrací se ale příspěvek zveřejní hned a nemusíte pokaždé vyplňovat jméno. Účet už máte? Přihlaste se.

Nezveřejňujeme ho, slouží jen redakci.

Podporuje zápis Texy: **tučně**, *kurzíva*, odrážky, odkazy.

Dál k tématu

  1. Bezpečnost

    MLflow ve verzích 2.1.0 až 3.14.x ignoroval zákaz pickle u modelů statsmodels

    Bezpečnostní volba v MLflow měla zastavit načítání modelů uložených pomocí pickle, integrace statsmodels ji ale nekontrolovala. Upravený modelový artefakt proto mohl při…

  2. Bezpečnost

    Knihovna ash_ai spouštěla text promptu jako zdrojový kód Elixiru

    Šest záznamů CVE zveřejněných 31. srpna míří na jedinou knihovnu: rozšíření ash_ai, které do elixirového frameworku Ash přidává práci s jazykovými modely. Nejzávažnější…

  3. Bezpečnost

    Browser-use web-ui ukládá klíče k modelům do nešifrovaných souborů

    Záznam CVE-2026-82640 zveřejněný 30. srpna popisuje, jak browser-use web-ui ukládá klíče k modelům do souborů JSON v čitelné podobě. Týká se vydání 2.0.0 až 3.0.0 a…

  4. Bezpečnost

    Integrace Sentry SDK mohla do verze 2.66.1 vypnout schvalování nástrojů

    Nové hlášení ze 30. srpna upozornilo, že integrace OpenAI Agents v Sentry SDK sestavovala každý nástroj znovu a nepřenášela jeho schvalování ani vstupní a výstupní…