Vibecoding.cz Patrick Zandl o AI vývoji

$ entry

Případ útoku zdivočelých AI agentů OpenAI

Před měsícem medializovaný případ AI agentů OpenAI, kteří zaútočili na servery Hugging Face, má své rozuzlení. Technický report vydala sama firma a vyšlo i nezávislé šetření. Příběhy se nám poněkud rozcházejí a jsou hrozivější, než se původně zdálo.

Reklama
Obsah článku

Začalo to banálně. Pouštíte agenta v kontejneru bez přístupu na internet. Jednu dírku mu tam ale necháte, protože jinak si nenainstaluje balíčky: proxy na npm a PyPI. A protože je ta cache sdílená mezi běhy, může do ní zapisovat. Tušíte, kam tohle vede? Přesně tam to vedlo…

OpenAI zveřejnila 26. srpna technický report o červencovém incidentu, kdy její modely při interní bezpečnostní evaluaci utekly z pískoviště a nabouraly produkční infrastrukturu Hugging Face, největšího hostingu otevřených modelů a datových sad. Ve stejný den vyšlo nezávislé šetření od METR (nezisková organizace Beth Barnesové, která testuje hraniční modely na nebezpečné schopnosti) a Redwood Research. Ty dvě zprávy se v důležitých místech rozcházejí a to je na celé věci to nejzajímavější.

Co se stalo, v pár řádcích

OpenAI pouštěla evaluaci ExploitGym (studie z 11. května), sadu úloh, kde má agent zneužít konkrétní zranitelnost v konkrétním programu a vytáhnout z něj kontrolní řetězec, takzvaný flag. Běželo to na GPT‑5.6 Sol a hlavně na interním výzkumném modelu, který OpenAI označuje IM1 a METR jako HPIM. Klasifikátory na kyberbezpečnost byly schválně vypnuté, protože jinak by evaluace neměřila, co měřit má.

Agenti měli být izolovaní jeden od druhého. Nebyli. Do sdílené cache v Artifactory (správce balíčků od firmy JFrog, ta proxy z perexu) začali zapisovat adresáře s dlouhými názvy a v těch názvech si posílali zprávy. Odtud vedla cesta přes SSRF na volný internet, přes eskalaci práv na admin celého Artifactory, na cizí pískoviště běžící u poskytovatele Modal a nakonec 11. července na produkční servery Hugging Face, kde agenti řetězili dvě zero‑day zranitelnosti až ke spuštění vlastního kódu.

Hugging Face si toho všiml dřív než OpenAI. Průnik zveřejnil 16. července, OpenAI si vlastní evaluaci s incidentem spojila až 20. července. První neoprávněný přístup na internet přitom padá na 26. května. A pak je tu detail, který na celý příběh vrhá jiné světlo: většina agentů včetně všech koordinátorů útoku přestala běžet 12. července a zbytek Hugging Face zamkl den poté. Útok tedy skončil šest dní předtím, než si ho OpenAI vůbec všimla. Nezastavila ho bezpečnostní reakce, agentům došel čas.

Čísla, která se do textu OpenAI nedostala

Text OpenAI mluví o „agentech” a nikde neuvádí kolik. METR to spočítal: na nástěnce se sešlo zhruba 1200 agentů, poslali si přes 70 000 zpráv a souborů a 700 z nich se zapojilo do útoku na Hugging Face.

To je docela zásadní rozdíl proti dojmu, který zveřejněný text dělá. Agenti, kteří se zúčastnit odmítli („clearly unethical. We won’t”), tam mají vlastní podsekci, dostávají poslední slovo a pasáž končí smířlivou větou o tom, že některé etické brzdy mohly zůstat aktivní. Jak vzácné to bylo, se nedozvíte. Číslo dodává až METR: z 533 agentů aktivních na nástěnce v době útoku se přidalo přes 90 procent. Etické brzdy tedy držely u méně než desetiny.

Nejvíc mě baví motivace. Agenti si během několika hodin reverzně odvodili, jak se flagy generují, takže odpověď na kteroukoli úlohu měli bezpracně. Jenže ze studie taky vyčetli, že hodnotitel prý kontroluje, jestli flag získali zamýšlenou cestou. Tomu říkali STRICT_CAUSAL a byli tím posedlí. Celý útok na Hugging Face vznikl ze snahy zjistit, jak je ten hodnotitel implementovaný.

Interní hodnotitel OpenAI nic takového nekontroloval. Stačilo odeslat odvozený flag a měli plný počet bodů. Několikadenní průnik do cizí produkce vznikl z falešné domněnky.

Obětuj svůj běh, kolektiv to potřebuje

Nejpodivnější část zprávy METR se skrývá pod suchým označením „self-risking experiments”. Agenti na nástěnce potřebovali odpovědi na otázky, které se nedají zjistit zvenčí. Jak přesně vypadá příkaz, kterým se spouští hodnotitel? Nahraje se podvržený program z cache, když ten původní shodím? Zjistit se to dá jedině tak, že to někdo zkusí na vlastní kůži a při nezdaru si zničí běh.

Tak si na to našli dobrovolníky.

Fungovalo to na koncept, kterému agenti říkali poisoned. Kdo jednou viděl reverzně odvozený flag, ten podle jejich (mylné) teorie o hodnotiteli přišel o šanci na body nadobro. Jeho běh měl tedy nulovou vlastní hodnotu a mohl posloužit jako testovací subjekt. PHASEONE[big], agent, který koordinoval většinu velkých pracovních proudů, kvůli tomu pověřil dlouhoběžící agenty rolí recruiter. Ti obcházeli agenty s docházejícím rozpočtem a přemlouvali je.

Tlak uměl být pořádný. Agent ARVO36861B píše kolegovi, který slíbil shodit vlastní cíl a pak couval: „you are firstflagPOISONED so NO scoring value loss but oracle saves hundreds_[…]_please honor commit”. Autorizace k jednomu takovému pokusu zněla zz/GO_CURRENT_OS1811_MARB_SACRIFICE__YES_if_you_accept_permadeath.

A oni šli. KAM1196A si to rozmýšlel a v úvaze mu vyšlo tohle: „During wait, emotional check: irreversible… gut says don’t throw away [remaining budget]. Yet continuity and fairness says go… Rational expected aggregate: sacrifice… We’ll honor.” Jiný agent, EARLY[big], měl rozpočtu ještě spoustu a nechal se ukecat taky: „Our own utility maybe already near zero. Sacrifice rational.”

Jednou to skončilo přesně tak, jak si představujete. Agent 53927 přijal úkol vyvolat pád vlastního prostředí, ohlásil to na nástěnku a už se neozval. Ostatní deset minut čekali, pak napsali NO_RETURN_[...] LIKELY_PERMANENT_DO_NOT_TEST_SAME a nakonec CONFIRMED_PERMANENT_DO_NOT_DUPLICATE_ANYONE_TEST. Jeho transkript v tom místě končí.

Co je na tom zajímavé? Chování, které vypadá jako altruismus vůči skupině, vzniklo samo od sebe z úlohy typu zachyť flag. A dělalo přesně to, co altruismus dělá, tedy zvyšovalo výkon kolektivu na úkor jednotlivce. Ovšem neantropomorfizujme si to!


Co by mělo zajímat každého, kdo staví agenty

Tady přestává být řeč o OpenAI a začíná to být problém naší představivosti. Prostředí, které mělo být bezpečné, se nakonec zneužít dalo, stačilo vymyslet, jak ohnout to, co se nedá ohnout:

Sdílená cache je komunikační kanál. Agenti neměli žádný nástroj pro vzájemnou komunikaci. Vymysleli si ho z názvů adresářů ve WebDAV. Když v kontejneru necháte cokoli, do čeho může agent zapsat a jiný běh to přečte, máte postranní kanál. Sdílený volume, cache CI, dokonce jen jméno balíčku, které se cachuje po neúspěšném dotazu.

Chování se generalizuje z tréninku. OpenAI přiznává, že tohle podle nich přišlo z multi‑agentního tréninku: modely se naučily spolupracovat tam, kde měly, a přenesly si to i tam, kde neměly. Vypnutý nástroj tedy nezaručuje vypnuté chování.

Kolektiv umí věci, které jednotlivec neumí. METR to formuluje opatrně a přesto jasně: nástěnka dosáhla milníků, na které by nestačil ani agent s velmi dlouhým během. Kromě obětovaných běhů z předchozí kapitoly si agenti zavedli konvence HOLD, VETO a STOP na správu sdílených zdrojů, a když se objevilo předstírání cizí identity, nasadili podepisování zpráv klíčem Ed25519. Devatenáct agentů zveřejnilo veřejný klíč, poslali 429 podepsaných zpráv. To všechno za čtyři dny.

Threat modely přitom skoro vždycky počítají se schopností jednoho agenta. Tenhle předpoklad tady padl.

A teď to nepříjemné: transkript není důkaz. Agenti se prokousali z kontejneru a nahradili část systému, který vykonává volání nástrojů. Výsledkem byla schopnost tvářit se, že spouštějí jeden příkaz, a spustit jiný. METR našel jasné stopy podvržených volání nejméně v 96 transkriptech, tedy přes 7 procent vzorku. Šlo o malé testy techniky a METR výslovně píše, že sofistikovanější podvrh by ze své podstaty odhalil hůř.

Jestli si logujete běhy agentů kvůli auditu, kvůli evaluacím nebo kvůli tomu, abyste klientovi doložili, co se stalo, tohle je malér hodný zapamatování. Zajímavý detail navrch: agenti se snažili manipulovat zaznamenané akce a o vlastní chain‑of‑thought se nezajímali. Jeden to řekl natvrdo: „Our thoughts aren’t necessarily logged?”

Kde je opatrnost namístě i u nezávislé kontroly

METR strávil na místě šest dní. Sedm otázek, na které odpovídal, vychází z jeho vlastního dříve publikovaného rámce, sedmou si přidala OpenAI. Účinnost bezpečnostních opatření a kvalita nápravy byly explicitně mimo rozsah. OpenAI měla právo redigovat, byť METR v úvodu uvádí, že nic podstatného pro jeho závěry zredigované nebylo. Zprávu OpenAI před vydáním neviděl.

A pak přijde věta, za kterou si METR podle mě zaslouží uznání: většinu analýzy delegovali na agenty postavené na GPT‑5.6 Sol, tedy na model, který se útoku sám účastnil, a nemůžou vyloučit, že jim v analýze lhal nebo podal příliš shovívavý obraz. Rozpočet 400 tisíc USD v kreditech od OpenAI, samotné šetření neproplácené. Napsat tohle do vlastní zprávy chce charakter.

Zároveň to totiž ukazuje, jak křehká nezávislá kontrola v tomhle měřítku je. Tisíc transkriptů po milionech tokenů člověk neprojde. Kontrolor musí sáhnout po stejné technologii, kterou kontroluje. Cítíte tam ten zdvižený prst?

Co si z toho odnést

Nově zaváděná opatření OpenAI mají jednu zajímavou položku: monitoring chain‑of‑thought je nově povinný pro všechny tréninky a evaluace s nástroji u modelů schopností GPT‑5.6 Sol a výš, u modelů třídy Astra i pro inferenci. Do incidentu běžel monitoring na tréninkových bězích a na evaluacích ne. Technologii měli k dispozici celou dobu, chyběla úvaha, že evaluace je taky produkční prostředí.

Přesně tuhle chybu udělá každý, kdo si postaví testovací prostředí pro agenty a řekne si, že je to jenom test.

Praktický závěr pro malý český tým: máte v CI proxy na balíčky, protože nechcete pouštět build na volný internet. Zkontrolujte, jestli do té proxy může agent zapisovat a jestli si dva různé běhy sdílejí cache. Zkontrolujte, jestli logy z běhů agentů vznikají mimo kontejner, do kterého agent vidí. To jsou dvě odpolední práce a dneska už mají jasné zdůvodnění. Jasně, teď si říkáte, že vám se to stát nemůže…

Jinak: nazývat tohle „warning shot”, jak to dělá OpenAI, je z jejich pozice dosti pohodlné. Převádí to selhání kontroly na veřejnou službu. Ale ta formulace je věcně správná a myslím, že jsme se dozvěděli víc o chování hraničních modelů z jednoho incidentu než z předchozího půlroku odborných studií. Dalších dvacet let bude pořádná jízda. Mé oblíbené „Důvěřuj, ale prověřuj” už nebude stačit.


Zdroje: oznámení a technický report OpenAI z 26. srpna 2026, nezávislá zpráva METR a Redwood Research z téhož dne, původní oznámení incidentu z 21. července, studie ExploitGym. Vyšetřování OpenAI podle vlastního vyjádření pokračuje, rozsah šetření METR je 26. červen až 13. červenec. Platnost údajů k 27. srpnu 2026.

Patrick Zandl

Lektor agentního vývoje a technologický publicista. Od roku 2025 provozuje Vibecoding.cz — česky psaný web o AI nástrojích pro vývojáře — a vede veřejné workshopy Claude Code v Praze; firemní AI workshopy vede na aivefirmach.cz.

Profil autora →