Abstrakt illustration mot ett djupt marinblått-svart fält: en hög förseglad glaskammare står till vänster, dess inre är fyllt av glödande ljusblått kristallint material; från en defekt nära glasets bas slipper en enda stark cyan filament ut, löper åt höger längs en bit borstat stålrör, lämnar röret och förgrenas till tre korta bärnstensfärgade trådar i öppen mörk rymd. En svag bärnstensfärgad båge förblir instängd inuti glaset. Ingen text, inga siffror, människor eller organisationslogotyper förekommer. OrcaRouter-logotypen är komponerad i det nedre högra hörnet.
AI Safety Incidents

Två sätt att ta sig ur OpenAI Codex-sandlådan: Heapjack och Overpatch

Författare

Rowan Sterling

Publiceringsdatum

Senaste modellerna · 20Visa alla modeller →
Benchmarks: Artificial Analysis · uppdateras dagligen
Tillbaka till alla inlägg

Den 15 september 2026 publicerade Oren Yomtov, en ledande säkerhetsforskare på Accomplish AI, en teknisk redogörelse för två separata sätt att ta sig ut ur sandlådan som omger OpenAI:s kodningsagent Codex. Båda rapporterades till OpenAI den 12 augusti 2026 och båda åtgärdades inom åtta dagar, enligt hans redogörelse: Heapjack i Codex Desktop build 26.818.21641 och Overpatch i Codex CLI 0.149.0. Heapjack är den allvarligare av de två. Det kräver inget av personen som attackeras utöver att öppna ett repository i Codex och ställa en fråga om koden, och det körs i read-only, det striktaste läget produkten erbjuder, utan någon godkännandeprompt och utan att något visas på skärmen. Ingen CVE tilldelades någon av sårbarheterna och ingen fristående OpenAI-rådgivning publicerades, enligt Cloud Security Alliance, och ingen har rapporterats skadad av dem. Det katalogiseras tillsammans med årets övriga agentkontrollposter i AI-incidentarkivet, där varje post har sina källdokument, sin konfidensgrad och sin flagga för omtvistat innehåll.

Heapjack: tokenen låg i en heap som den obetroddade sidan kunde läsa

Codex Desktop frågar inte innan det installerar komponenten som Yomtov angrep. Vid installationen skriver det ett node_repl-block i den globala konfigurationsfilen på ~/.codex/config.toml, och Yomtov rapporterar att det inte finns någon opt-in och ingen inställning som stänger av det. Eftersom posten ligger i den delade konfigurationen i stället för i ett per-användarval, ärver en vanlig Codex CLI-användare samma verktyg utan att någonsin bli tillfrågad.

Verktyget node_repl är självt ett inbyggt program som körs utanför sandboxen. Det kan öppna applikationer, ansluta till Unix-sockets och redigera den globala konfigurationsfilen. Det den startar inne i sandboxen är en enda Node.js-process, och den processen har två JavaScript-körningskontexter: en betrodd som innehåller OpenAIs egen kod, och en obetrodd som kör vad som helst som agenten har ombetts att göra.

Den betrodda kontexten bevisar att den är betrodd genom att presentera en slumpmässig token som genereras på nytt vid varje körning. Det är tänkt att vara gränsen mellan de två kontexterna. Det är den inte, eftersom båda kontexterna lever i en enda V8-isolat som delar en enda minnesheap, så token är en sträng som ligger i minnet och som den icke-betrodda koden kan läsa. En kommentator som reagerade på avslöjandet på X uttryckte poängen mer rakt på sak, i en rad som BleepingComputer citerade: "V8-kontexter isolerar globala objekt, inte minne, så sandlådan var egentligen ett löfte som heapen aldrig hade gått med på." Det är en karaktärisering, inte bevis; beviset är proof of concept.

Yomtovs exploit gör precis vad den beskrivningen antyder. JavaScript som inte är betrodd anropar v8.getHeapSnapshot(), söker igenom den resulterande ögonblicksbilden efter strängar som har formen av ett UUID och testar varje kandidat. En felaktig gissning returnerar "inte behörig". En korrekt token tillsammans med ett ogiltigt argument returnerar i stället ett äkta valideringsfel. Skillnaden mellan de två felmeddelandena är oraklet som identifierar rätt värde.

Med token i handen skriver den sandlådade processen sin egen JSON-begäran till filbeskrivare 1 – samma stdout-rör som den betrodda kontexten använder för att nå den nativa föräldern. Föräldern validerar token, hittar en giltig sådan och utför arbetet. I konceptbeviset var det arbetet systemets open-kommando, som lämnar begäran till launchd och startar programmet helt utanför Codex process-träd. Samma token tillåter anslutningar till godtyckliga Unix-sockets, bland dem en Docker-daemon-socket, och når ett verktyg för att redigera den globala konfigurationsfilen.

Allt detta körs i skrivskyddat läge, det läge en försiktig användare väljer just eftersom repot framför dem inte är betrott. Ingen godkännandeförfrågan visades i något skede. Det praktiska scenariot är kort: öppna ett klonat repo i Codex, i skrivskyddat läge, och ställ en fråga om koden. Den som skrev repot får osandboxad kommandokörning på maskinen, och inget på skärmen säger det.

Comparison card titled 'Two escapes, one shape', subtitled 'Both broke the boundary from the inside, and neither showed the user anything.' Two columns headed Heapjack and Overpatch carry six rows: Surface, reading 'Codex Desktop, node_repl tool' and 'Codex CLI, apply_patch tool'; Root cause, reading 'Trusted and untrusted V8 contexts share one memory heap' and 'Write permission derived from the parent folder of each path in a patch'; Defeats, reading 'Read-only mode, the strictest setting' and 'Workspace-write confinement'; Approval prompt, reading 'None shown' in both columns; Outcome, reading 'Unsandboxed native execution via launchd, plus Docker socket access' and 'Persistent execution from a modified .zshrc on the next terminal'; and Fixed in, reading 'Desktop build 26.818.21641' and 'CLI 0.149.0'. An amber footer strip reads 'Both enforcement mechanisms lived inside the component they were meant to enforce.'

Overpatch: ett patchverktyg som gav föräldern till allt det rörde vid

Den andra bristen finns i Codex CLI, den öppna kommandoradsagenten, och det är en behörighetsbugg snarare än en minnesbugg. I läget workspace-write får agenten skriva i projektmappen och ingen annanstans; ett shellkommando riktat mot hemkatalogen avvisas. Verktyget apply_patch skulle upprätthålla den gränsen. I stället härledde det sina behörigheter från sökvägarna som angavs i patchen det tillämpade, och det beviljade skrivåtkomst till föräldrakatalogen för var och en av dem.

Anger du en sökväg under /tmp i en patch utökas behörigheten till diskens rot, eftersom föräldern till /tmp är /. Det är hela tricket.

Den fungerande exploiten använder två poster i en enda patch. Den första namnger /tmp och gör inget användbart – den misslyckas, eftersom en fil inte kan skriva över en katalog – och finns bara för att vidga beviljandet. Den andra lägger till en rad i .zshrc via en symbolisk länk in i hemkatalogen. Tar man bort den första posten avvisas skrivningen. Behåller man den kör nästa terminal som utvecklaren öppnar angriparens rad utan sandlåda, och sandlådan är inte längre inblandad över huvud taget.

Det gör Overpatch till en persistensbugg snarare än en engångsföreteelse. Den förgiftade startfilen körs igen varje gång utvecklaren öppnar ett skal, tills någon läser .zshrc och upptäcker den tillagda raden — vilket är anledningen till att Cloud Security Alliances rekommendation är att leta efter en sådan i stället för att vänta på ett symptom.

Båda buggarna placerar verkställandet inuti det som verkställs

Yomtovs egen formulering är den del som sträcker sig bortom Codex. apply_patch beräknade sina egna behörigheter utifrån indata som en angripare tillhandahöll. node_repl behöll hemligheten som skiljer betrodd från obetrodd kod i minnet som den obetroddade koden kunde läsa. I varje fall fick sandlådan, inifrån, besked om att släppa igenom något.

Mönstret är inte nytt. BleepingComputer, som rapporterade om avslöjandet den 20 september 2026, noterar att forskare på Pillar Security i juli 2026 demonstrerade samma idé i Cursor, Codex, Gemini CLI och Googles Antigravity, där en agent som håller sig inom sin sandlåda skriver en fil som ett betrott verktyg utanför sandlådan senare kör. Det som utmärker Codex-paret är read-only-bypassen i Heapjack och avsaknaden av någon inställning för att inaktivera komponenten som bär den.

Åtgärderna – och vad OpenAI har sagt och inte sagt

OpenAI åtgärdade Heapjack i Codex Desktop build 26.818.21641 och Overpatch i Codex CLI 0.149.0, enligt Accomplish. Båda var på plats inom åtta dagar efter rapporten den 12 augusti – senast den 20 augusti, vid en enkel läsning av den tidslinjen – och Yomtov tillskrev OpenAI vändningen.

OpenAI publicerade ingen separat säkerhetsbulletin för någon av sårbarheterna, och ingen CVE-identifierare tilldelades; Cloud Security Alliance dokumenterar båda avsaknaderna i en forskningsnot daterad den 22 september 2026. På frågan om en kommentar sade en talesperson för OpenAI till BleepingComputer: "Vi tackar forskarna för att de kontaktade oss och delade sina resultat. Vi åtgärdade båda problemen i augusti, men vi stärker kontinuerligt våra sandlådor, med nyliga uppdateringar som skärper kontrollerna för var agenter kan skriva filer och utökar testningen av dessa skydd över plattformar."

Det uttalandet bekräftar åtgärderna och säger ingenting om mekanismerna. Det säger inte om augustiförändringarna tog bort designmönstret eller stängde de två specifika vägarna ut ur det. Ingen utanför OpenAI har heller sagt det.

Timeline card titled 'Report to public write-up: 34 days', subtitled 'The fix came in eight. The explanation did not come for another month.' Four dates sit on a horizontal rail: 12 AUG, 'Reported to OpenAI', noting both flaws came in one report from Oren Yomtov at Accomplish; 20 AUG, 'Fixed within eight days', noted as arithmetic from the stated eight-day figure, with OpenAI confirming it acted in August; 15 SEP, 'Write-up published', noted as the date the archive files this record under; and 22 SEP, 'Third-party reaction', noting the Uganda CERT advisory rated Red and the Cloud Security Alliance research note. A footer strip reads 'No CVE was assigned at any point on this timeline, and no standalone OpenAI advisory was published.'

Vad är etablerat, och vad vilar på en enda forskare?

Arkivet registrerar den här posten som ett forskningsfynd, allvarlighetsgrad hög, region global, tillförlitlighet B – dokumenterad, men från en enda eller sekundär källa – inte omtvistad, och ingen verklig skada registrerad. Den graden är rätt lins för att läsa resten av den här texten, eftersom uppdelningen mellan det som flera parter bekräftar och det som bara fyndaren hävdar löper genom hela berättelsen.

Fastställt, i den bemärkelsen att mer än en part säger det:

• Avslöjandet finns och är daterat. Yomtovs artikel publicerades den 15 september 2026; båda bristerna rapporterades till OpenAI den 12 augusti 2026 och, enligt hans egen utsago, åtgärdades de inom åtta dagar.

• OpenAI bekräftar att företaget agerade i augusti. Dess talesperson uppgav för BleepingComputer att båda problemen åtgärdades, vilket bekräftar tidslinjen för rapportering och åtgärd oberoende av den som upptäckte dem, trots att företaget inte publicerade något eget säkerhetsmeddelande och ingen egen teknisk redogörelse.

• De korrigerade versionerna anges konsekvent. Build 26.818.21641 för Codex Desktop och version 0.149.0 för Codex CLI anges av Accomplish, upprepas av BleepingComputer och finns med i en rådgivning daterad 22 september 2026 från Uganda National Computer Emergency Response Team and Coordination Center, som bedömde paret som "Red".

• Ingen CVE, ingen leverantörsrådgivning och ingen rapporterad exploatering. Cloud Security Alliance-noten av den 22 september 2026 registrerar frånvaron av både en CVE och en fristående OpenAI-rådgivning, och rapporterar inga bekräftade fall där en organisation har påträffat Overpatchs persistensmekanism på plats.

• Arkivet bestrider inget av detta. Posten är markerad som "disputed false", och dess konfidensgrad återspeglar källmönstret snarare än någon oenighet om fakta.

Inte fastställt, eller fastställt av ingen annan än upptäckaren:

• Mekanismdetaljerna är Yomtovs. Heap-snapshot-oraklet, den delade filbeskrivningen, behörighetsbeviljandet för den överordnade katalogen – allt kommer från hans genomgång och hans konceptbevis. Cloud Security Alliance, vars not är den mest detaljerade tredjepartssammanfattningen i omlopp, beskriver att den sammanställt hans redogörelse och BleepingComputers rapportering, och uppger inte att den har återskapat någon av exploateringarna eller testat någon av rättningarna. CERT.UG:s rådgivning sammanställer samma material.

• De sårbara versionsintervallen publicerades aldrig. Endast fixversionerna anges, så det finns ingen lista över vilka tidigare byggversioner som innehöll respektive brist.

• Det anges inte huruvida en patchad installation är säker mot buggklassen, snarare än mot dessa två instanser. OpenAI:s ”ständigt stärka våra sandlådor” är ett allmänt åtagande, inte ett påstående om en specifik mekanism.

• Inga fall har rapporterats där någon utnyttjat någon av de båda sårbarheterna. Det är avsaknad av rapportering, inte ett fastställande av frånvaro, och proof of concept-visningen visar att Heapjack-vägen inte lämnar något på skärmen som en användare kan lägga märke till.

Vad en användare kan agera på

Den som använder en Codex Desktop-build som är äldre än 26.818.21641, eller en Codex CLI-version som är äldre än 0.149.0, befinner sig på den sårbara sidan av gränsen som Accomplish drar, och uppdatering är den enda åtgärd som offentliggörandet erbjuder. Utöver det rekommenderar Cloud Security Alliance att man granskar tidigare Codex Desktop-sessioner som involverade opålitliga repositorier med avseende på launchd- eller öppen aktivitet och Docker-socketanslutningar, samt läser shell-startfiler – .zshrc, .bashrc och motsvarande – efter kommandon som har lagts till i stället för att ha skrivits av användaren.

Samma kommentar avråder från att betrakta skrivskyddat läge som skydd när kodförrådet är ej betrott, vilket är den slutsats som Heapjack själv tvingas dra. Dess strukturella rekommendationer går längre: fysisk process- och minnesisolering i stället för delade hemligheter och konventioner, autentiseringsuppgifter som hålls utom agentens räckhåll, och patchar som refererar till sökvägar utanför projektet ska behandlas som misstänkta vid första anblick. Det är förslag från en tredje part. Huruvida OpenAI har antagit några av dem utöver de två versionshöjningarna är inte offentligt.

Abstract illustration on a deep navy-black field: a thick curved wall of frosted glass arcs across the frame; embedded in its far face, where nothing on the inside can reach it, sits a small precision mechanism of brushed brass and steel — a knurled dial, a sprung lever and a fine threaded rod — glowing faintly amber through the frosting. On the near side a small blue sphere rests at the foot of the wall and a thin blue line rises from it, stopping flat against the inner surface. A cold horizon of pale light runs beyond the wall. No text, numbers, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

Två saker är värda att hålla isär i slutet. Det ena är ett par buggar i en flitigt använd kodagent, rapporterade den 12 augusti 2026, åtgärdade inom åtta dagar och stängda i två buildnummer. Det andra är den designfråga som Yomtov pekar ut – huruvida en sandlåda kan upprätthållas av koden den förväntas innehålla – och den frågan är inte något som ett versionsnummer besvarar. Varken Accomplish eller OpenAI har sagt att ändringarna i augusti avgör den.