Abstracte illustratie op een diep marineblauw-zwart veld: links staat een hoge afgesloten glazen kamer, van binnen volgepakt met gloeiend lichtblauw kristallijn materiaal; uit een barst nabij de basis van het glas ontsnapt een enkele heldere cyaan draad, die naar rechts loopt langs een stuk geborsteld stalen pijp, de pijp verlaat en zich splitst in drie korte amberkleurige draden in de open donkere ruimte. Een zwakke amberkleurige boog blijft opgesloten in het glas. Er verschijnen geen tekst, cijfers, mensen of organisatielogo's. Het OrcaRouter logo is samengevoegd in de rechteronderhoek.
AI Safety Incidents

Twee manieren om uit de OpenAI Codex-sandbox te ontsnappen: Heapjack en Overpatch

Auteur

Rowan Sterling

Publicatiedatum

Nieuwste modellen · 20Bekijk alle modellen →
Benchmarks: Artificial Analysis · dagelijks bijgewerkt
Terug naar alle berichten

Op 15 september 2026 publiceerde Oren Yomtov, een hoofdonderzoeker informatiebeveiliging bij Accomplish AI, een technisch verslag over twee afzonderlijke manieren om te ontsnappen uit de sandbox rond de Codex-codeeragent van OpenAI. Beide werden op 12 augustus 2026 aan OpenAI gemeld en beide waren binnen acht dagen verholpen, volgens zijn verslag: Heapjack in Codex Desktop-build 26.818.21641 en Overpatch in Codex CLI 0.149.0. Heapjack is de ernstigere van de twee. Het vereist niets van het doelwit, behalve dat die een repository in Codex opent en een vraag over de code stelt, en het draait in alleen-lezenmodus, de strengste modus die het product biedt, zonder goedkeuringsprompt en zonder dat er iets op het scherm verschijnt. Aan geen van beide kwetsbaarheden is een CVE toegekend en er is, volgens de Cloud Security Alliance, geen afzonderlijk OpenAI-advies gepubliceerd, en er zijn geen meldingen dat iemand erdoor is getroffen. Het is naast de andere vermeldingen over agentbeheersing van dit jaar opgenomen in het AI-incidentenarchief, waar elke registratie de bijbehorende brondocumenten, betrouwbaarheidsgraad en betwistvlag bevat.

Heapjack: het token zat in een heap die de niet-vertrouwde kant kon lezen

Codex Desktop vraagt niet om toestemming voordat het de component installeert die Yomtov heeft aangevallen. Tijdens de installatie schrijft het een node_repl-blok naar het globale configuratiebestand op ~/.codex/config.toml, en volgens Yomtov is er geen opt-in en geen instelling om dit uit te schakelen. Omdat de vermelding in de gedeelde configuratie staat in plaats van in een per-gebruikerkeuze, erft een gewone Codex CLI-gebruiker hetzelfde hulpmiddel zonder ooit te zijn gevraagd.

De node_repl-tool is zelf een native programma dat buiten de sandbox draait. Het kan applicaties openen, verbinding maken met Unix-sockets en het globale configuratiebestand bewerken. Wat het in de sandbox start, is één enkel Node.js-proces, en dat proces bevat twee JavaScript-uitvoeringscontexten: een vertrouwde met OpenAI's eigen code, en een niet-vertrouwde die uitvoert wat de agent gevraagd is te doen.

De vertrouwde context bewijst dat hij vertrouwd is door een willekeurig token te presenteren, dat bij elke run opnieuw wordt gegenereerd. Dat is bedoeld als de grens tussen de twee contexten. Dat is het niet, omdat beide contexten in één enkele V8-isolate leven die één enkele memory heap delen, zodat het token een string in het geheugen is die de niet-vertrouwde code kan lezen. Een reageerder op X die op de onthulling reageerde, verwoordde het punt botter, in een zin die BleepingComputer citeerde: "V8-contexten isoleren globals, niet het geheugen, dus de sandbox was eigenlijk een belofte waar de heap nooit mee heeft ingestemd." Dat is een karakterisering, geen bewijs; het bewijs is het proof of concept.

Yomtovs exploit doet precies wat die beschrijving impliceert. Niet-vertrouwde JavaScript-code roept v8.getHeapSnapshot() aan, scant de resulterende snapshot op strings die op een UUID lijken, en test elke kandidaat. Een verkeerde gok krijgt "not authorized" terug. Een juist token samen met een ongeldig argument geeft in plaats daarvan een echte validatiefout. Het verschil tussen de twee foutmeldingen is het orakel dat de juiste waarde identificeert.

Met de token in de hand schrijft het gesandboxte proces zijn eigen JSON-verzoek naar bestandsdescriptor 1 — dezelfde stdout-pijp die de vertrouwde context gebruikt om het native ouderproces te bereiken. Het ouderproces valideert de token, constateert dat deze geldig is en voert het werk uit. In het proof of concept was dat werk het systeemcommando open, dat het verzoek aan launchd overhandigt en de toepassing volledig buiten de procesboom van Codex start. Dezelfde token maakt verbindingen met willekeurige Unix-sockets mogelijk, waaronder een Docker-daemon-socket, en geeft toegang tot een hulpmiddel om het globale configuratiebestand te bewerken.

Het geheel draait op alleen-lezen, de modus die een voorzichtige gebruiker juist kiest omdat de repository voor hem niet vertrouwd is. Op geen enkel moment verscheen een goedkeuringsprompt. Het praktische scenario is kort: open een gekloonde repository in Codex, in alleen-lezenmodus, en stel een vraag over de code. Wie die repository ook heeft geschreven, krijgt uitvoering van commando's buiten de sandbox op de machine, en niets op het scherm geeft dat aan.

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: een patchtool die alles wat hij aanraakte een ouder gaf

De tweede fout zit in Codex CLI, de opensource-agent voor de opdrachtregel, en het is een rechtenbug in plaats van een geheugenbug. In de modus workspace-write mag de agent alleen binnen de projectmap schrijven en nergens anders; een shellopdracht die op de thuismap is gericht, wordt geweigerd. De tool apply_patch had die grens moeten bewaken. In plaats daarvan leidde hij zijn rechten af uit de paden die in de patch werden genoemd die hij toepaste, en verleende hij schrijftoegang tot de bovenliggende map van elk daarvan.

Geef in een patch een pad onder /tmp op, en de machtiging verruimt zich tot de root van de schijf, omdat de bovenliggende map van /tmp / is. Dat is de hele truc.

De werkende exploit gebruikt twee vermeldingen in één patch. De eerste noemt /tmp en doet niets nuttigs — hij mislukt, omdat een bestand geen map kan overschrijven — en dient alleen om de toekenning te verbreden. De tweede voegt een regel toe aan .zshrc via een symlink naar de thuismap. Verwijder de eerste vermelding en de schrijfpoging wordt geweigerd. Behoud je hem, dan voert de volgende terminal die de ontwikkelaar opent de regel van de aanvaller uit zonder sandbox, waarbij de sandbox helemaal niet meer in het spel is.

Dat maakt van Overpatch een persistentiebug in plaats van iets eenmaligs. Het vergiftigde opstartbestand wordt telkens opnieuw uitgevoerd in elke shell die de ontwikkelaar opent, totdat iemand .zshrc leest en de toegevoegde regel opmerkt — daarom luidt de richtlijn van de Cloud Security Alliance om er actief naar op zoek te gaan in plaats van te wachten op een symptoom.

Beide bugs stoppen de handhaving in het ding dat wordt gehandhaafd.

Yomtovs eigen framing is het deel dat verder reikt dan Codex. apply_patch berekende zijn eigen machtigingen op basis van door een aanvaller aangeleverde invoer. node_repl hield het geheim dat vertrouwde code van niet-vertrouwde code scheidde in het geheugen dat de niet-vertrouwde code kon lezen. In elk geval kreeg de sandbox van binnenuit de opdracht om iets door te laten.

De vorm is niet nieuw. BleepingComputer, dat de onthulling op 20 september 2026 meldde, merkt op dat onderzoekers van Pillar Security in juli 2026 hetzelfde idee demonstreerden bij Cursor, Codex, Gemini CLI en Google's Antigravity, waarbij een agent die binnen zijn sandbox blijft een bestand schrijft dat een vertrouwd hulpmiddel buiten de sandbox later uitvoert. Wat het Codex-paar onderscheidt, is de alleen-lezen-bypass in Heapjack en het ontbreken van enige instelling om het onderdeel dat de bypass bevat uit te schakelen.

De oplossingen, en wat OpenAI wel en niet heeft gezegd

OpenAI heeft Heapjack gerepareerd in Codex Desktop-build 26.818.21641 en Overpatch in Codex CLI 0.149.0, volgens Accomplish. Beide kwamen binnen acht dagen na het rapport van 12 augustus — tegen 20 augustus, bij een gewone lezing van die tijdlijn — en Yomtov schreef OpenAI de ommekeer toe.

OpenAI heeft voor geen van beide kwetsbaarheden een zelfstandig beveiligingsadvies gepubliceerd, en er werd geen CVE-identificatie toegekend; de Cloud Security Alliance vermeldt beide afwezigheden in een onderzoeksnotitie van 22 september 2026. Gevraagd om commentaar zei een woordvoerder van OpenAI tegen BleepingComputer: "We danken de onderzoekers dat ze contact met ons hebben opgenomen en hun bevindingen hebben gedeeld. We hebben beide kwesties in augustus aangepakt, maar we versterken onze sandboxes voortdurend, met recente updates die de controles aanscherpen op waar agents bestanden kunnen schrijven en de tests van die beschermingen op alle platforms uitbreiden."

Die verklaring bevestigt de fixes en zegt niets over de mechanismen. Ze zegt niet of de wijzigingen van augustus het ontwerppatroon hebben verwijderd of de twee specifieke uitwegen eruit hebben gesloten. Dat heeft ook niemand buiten OpenAI gezegd.

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.'

Wat staat vast, en wat berust op één onderzoeker

Het archief classificeert deze vermelding als een onderzoeksbevinding, ernst hoog, regio wereldwijd, betrouwbaarheid B — gedocumenteerd, maar uit één of een secundaire bron — niet betwist, zonder geregistreerde reële schade. Die beoordeling is de juiste lens om de rest van dit stuk te lezen, omdat de scheiding tussen wat meerdere partijen bevestigen en wat alleen de vinder beweert, door het hele verhaal loopt.

Vastgesteld, in de zin dat meer dan één partij het zegt:

• De openbaarmaking bestaat en is gedateerd. Yomtovs verslag werd gepubliceerd op 15 september 2026; beide fouten werden op 12 augustus 2026 aan OpenAI gemeld en volgens hem binnen acht dagen opgelost.

OpenAI bevestigt dat het in augustus actie heeft ondernomen. Een woordvoerder vertelde BleepingComputer dat beide problemen zijn aangepakt, wat de tijdlijn van melding en oplossing onafhankelijk van de ontdekker bevestigt, ook al heeft het bedrijf zelf geen beveiligingsadvies en geen technische toelichting gepubliceerd.

• De opgeloste versies worden consistent vermeld. Build 26.818.21641 voor Codex Desktop en versie 0.149.0 voor Codex CLI worden genoemd door Accomplish, herhaald door BleepingComputer en opgenomen in een advies van 22 september 2026 van het Uganda National Computer Emergency Response Team and Coordination Center, dat het tweetal als "Rood" beoordeelde.

• Geen CVE, geen leveranciersadvies en geen gemelde exploitatie. De nota van de Cloud Security Alliance van 22 september 2026 vermeldt de afwezigheid van zowel een CVE als een afzonderlijk OpenAI-advies, en meldt geen bevestigde gevallen waarin een organisatie het persistentiemechanisme van Overpatch heeft aangetroffen.

• Het archief betwist niets hiervan. Het record is gemarkeerd als disputed false, en de betrouwbaarheidsgraad weerspiegelt het bronpatroon en niet enige onenigheid over de feiten.

Niet vastgesteld, of vastgesteld door niemand anders dan de vinder:

Het detail van het mechanisme is van Yomtov. Het heap-snapshot-orakel, de gedeelde bestandsdescriptor, de toekenning voor de bovenliggende map — het komt allemaal uit zijn verslag en zijn proof of concept. De Cloud Security Alliance, waarvan de notitie de meest gedetailleerde samenvatting door derden is die circuleert, beschrijft het samenvoegen van zijn relaas en de berichtgeving van BleepingComputer, en stelt niet dat zij een van beide exploits heeft gereproduceerd of een van beide fixes heeft getest. Het advies van CERT.UG bundelt hetzelfde materiaal.

• De kwetsbare versiebereiken zijn nooit gepubliceerd. Alleen de versies met de oplossing worden genoemd, dus er is geen lijst van welke eerdere builds welke kwetsbaarheid bevatten.

• Of een gepatchte installatie veilig is tegen deze categorie bugs, en niet alleen tegen deze twee gevallen, wordt niet vermeld. OpenAI's "het voortdurend versterken van onze sandboxes" is een algemene toezegging, geen bewering over een specifiek mechanisme.

• Er is niemand gemeld die een van beide kwetsbaarheden heeft misbruikt. Dat is een afwezigheid van meldingen, niet een vaststelling van afwezigheid, en het proof of concept toont aan dat het Heapjack-pad niets op het scherm achterlaat dat een gebruiker zou opmerken.

Waar een gebruiker actie op kan ondernemen

Iedereen met een Codex Desktop-build ouder dan 26.818.21641, of een Codex CLI-versie ouder dan 0.149.0, zit aan de kwetsbare kant van de grens die Accomplish trekt, en bijwerken is het enige middel dat de bekendmaking biedt. Daarnaast raadt de Cloud Security Alliance aan om eerdere Codex Desktop-sessies waarbij niet-vertrouwde repositories betrokken waren, te controleren op launchd- of open-activiteit en op Docker-socketverbindingen, en om shell-opstartbestanden — .zshrc, .bashrc en equivalenten — te lezen op commando's die zijn toegevoegd in plaats van door de gebruiker geschreven.

Dezelfde nota raadt af om alleen-lezenmodus als bescherming te beschouwen wanneer de repository niet vertrouwd is, wat de conclusie is waartoe Heapjack zelf wordt gedwongen. De structurele aanbevelingen gaan verder: fysieke proces- en geheugenisolatie in plaats van gedeelde geheimen en conventie, credentials buiten het bereik van de agent houden, en patches die verwijzen naar paden buiten het project bij voorbaat als verdacht beschouwen. Dat zijn voorstellen van een derde partij. Of OpenAI er een van heeft overgenomen naast de twee versieverhogingen, is niet openbaar.

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.

Twee dingen moeten we aan het einde uit elkaar houden. Het ene is een paar bugs in een veelgebruikte coding agent, gemeld op 12 augustus 2026, binnen acht dagen verholpen en afgesloten in twee buildnummers. Het andere is de ontwerpvraag die Yomtov noemt — of een sandbox kan worden afgedwongen door de code die hij geacht wordt in te dammen — en die vraag beantwoordt geen versienummer. Noch Accomplish, noch OpenAI heeft gezegd dat de wijzigingen van augustus daar een einde aan maken.