Изследователи по сигурността откриха два начина за излизане от изолираната среда на OpenAI Codex, като един от тях позволява изпълнението на команди върху машината на разработчик от най-строго ограничения режим на Codex, без подкана за одобрение и без да се показва нищо на екрана.

И двете уязвимости са докладвани на OpenAI на 12 август и са отстранени в рамките на осем дни, според Орен Йомтов от Accomplish AI.

По-сериозният от двата проблема, който изследователите нарекоха Heapjack, превръща рутинно действие в отдалечено изпълнение на код: отваряте чуждо хранилище в Codex, задавате въпрос относно кода и този, който е написал това хранилище, получава възможност да изпълнява команди извън изолираната среда на вашия компютър.

Codex е агент за програмиране на OpenAI, наличен като инструмент с команден ред и като настолно приложение. Подобно на конкуриращи се агенти, той изпълнява действията на модела в изолирана среда, така че ненадежден код да не може да засегне останалата част от системата. И двете техники за преодоляване на защитата работят чрез компрометиране на тази граница отвътре.

Heapjack

Техниката Heapjack, описана в анализа на Йомтов, е насочена към компонент, наречен node_repl, който Codex Desktop записва в глобалния файл '~/.codex/config.toml' по време на инсталацията.

Липсва опция за потвърждение или настройка за изключване, и тъй като записът се намира в споделената конфигурация, обикновените потребители на Codex CLI я наследяват, без да са били питани.

node_repl изпълнява един Node.js процес, съдържащ два отделни JavaScript контекста за изпълнение. Единият е доверен и съдържа собствения код на OpenAI. Другият е недоверен и изпълнява кода на агента. Довереният контекст доказва автентичността си чрез представяне на случаен токен, генериран наново при всяко стартиране.

Векторът на атака Heapjack (Accomplish.ai)
Векторът на атака Heapjack (Accomplish.ai)

Недовереният код прави моментна снимка на хипа с 'v8.getHeapSnapshot()' и изпробва всеки стринг с формат на UUID. Неправилното предположение връща „not authorized“. Валиден токен с грешен аргумент връща същинска грешка при валидация, което потвърждава на атакуващия, че токенът е правилен.

Разполагайки с токена, недовереният код изпраща собствена заявка през същата комуникационна тръба (pipe), която довереният контекст използва за връзка с родителен процес, работещ извън изолираната среда.

Родителският процес проверява токена, потвърждава валидността му и изпълнява задачата. Концептуалният зловреден код (PoC) използва системната команда 'open', за да стартира приложение напълно извън дървото от процеси на Codex. Същият достъп позволява връзка с всеки Unix сокет (като Docker daemon сокетът е очевидна цел), както и до инструмент за редактиране на глобалния конфигурационен файл.

Всичко това се случва при режим с достъп само за четене (read-only) — най-строгата изолирана среда, където агентът не би трябвало да може да записва нищо.

Overpatch

Втората уязвимост, Overpatch, се намира в отворения код на Codex CLI. В режим за писане в работната област (workspace-write) агентът има право да записва само в папката на проекта, а командно-редовите заявки към домашната директория се отхвърлят.

Изследователите са успели да накарат собствения инструмент за корекции на Codex, apply_patch, въпреки това да извърши запис там.

Инструментът предоставя достъп за запис до родителската папка на всеки път, посочен в корекцията. Ако се посочи '/tmp', той предоставя достъп за запис до корена на диска.

Работещата атака използва корекция с две промени: едната посочва '/tmp' и не прави нищо полезно освен да разшири правата, а другата добавя ред към '.zshrc' чрез символна връзка (symlink) към домашната директория.

Ако се премахне първата промяна, записът се отхвърля. С нея обаче следващият терминал, който разработчикът отвори, изпълнява инжектирания ред на атакуващия извън изолираната среда.

Една и съща основна грешка

И двете уязвимости споделят идентичен модел: механизмът за прилагане на ограниченията е разположен вътре в обекта, който трябва да бъде ограничаван. apply_patch определя собствените си права въз основа на входни данни от атакуващия. node_repl съхранява тайния ключ за разграничаване на доверения от недоверения код в същата памет, в която се намира недовереният код.

И в двата случая на изолираната среда е било указано отвътре да допусне изпълнението.

Този клас уязвимости не е нов. През юли 2026 г. изследователи от Pillar Security демонстрираха същия концептуален подход при Cursor, Codex, Gemini CLI и Google Antigravity, при който агент, намиращ се в изолирана среда, записва файл, който по-късно се изпълнява от доверен инструмент извън нея.

В коментар към публикацията на Йомтов в X, потребител отбелязва, че „V8 контекстите изолират глобалните променливи, а не паметта, така че изолираната среда е била просто обещание, което хипът никога не е потвърждавал“. Друг описва границата на доверие като „преграда за стая“. Включеното по подразбиране поведение също привлече критики, като бе повдигнат въпросът защо привилегирован токен изобщо е достъпен от недоверен JavaScript.

Какво трябва да се направи

OpenAI отстрани Heapjack в Codex Desktop версия 26.818.21641 и Overpatch в Codex CLI 0.149.0, според Accomplish.

Потребителите трябва да инсталират тези или по-нови версии. Йомтов отбелязва бързата реакция на OpenAI за коригиране на двата проблема в рамките на осем дни след доклада.

BleepingComputer се свърза с OpenAI за коментар преди публикуването на статията.