Исследователи в области кибербезопасности нашли два способа выйти из «песочницы» OpenAI Codex. Один из них позволяет выполнять команды на компьютере разработчика из самого защищенного режима Codex без запроса на подтверждение и без каких-либо отображаемых на экране данных.
По словам Орена Йомтова из Accomplish AI, об обоих уязвимостях было сообщено в OpenAI 12 августа, и они были устранены в течение восьми дней.
Более серьезная из этих двух уязвимостей, которую исследователи назвали Heapjack, превращает обычное действие в удаленное выполнение кода: откройте в Codex чужой репозиторий, задайте ему вопрос о коде, и тот, кто создал этот репозиторий, получит доступ к выполнению команд на вашем компьютере без изолированной программной среды.
Codex — это агент для написания кода от OpenAI, доступный в виде инструмента командной строки и настольного приложения. Как и конкурирующие агенты, он выполняет действия модели в изолированной программной среде, чтобы ненадежный код не мог затронуть всю систему. Оба способа обхода защиты работают за счет преодоления этой границы изнутри.
Heapjack
Метод Heapjack, описанный в статье Йомтова, нацелен на компонент node_repl, который Codex Desktop записывает в глобальный файл ~/.codex/config.toml во время установки.
Для этого нет ни опции, ни настройки, а поскольку запись находится в общей конфигурации, обычные пользователи Codex CLI получают тот же инструмент без каких-либо дополнительных вопросов.
node_repl запускает один процесс Node.js, в котором есть два отдельных контекста выполнения JavaScript. Один из них является доверенным и содержит собственный код OpenAI. Другой — недоверенный — запускает код агента. Доверенный контекст подтверждает свою надежность, предъявляя случайный токен, генерируемый заново при каждом запуске.
Проблема в том, что оба контекста находятся в одном процессе Node и используют одну кучу памяти, поэтому токен — это просто строка в памяти, которую может прочитать недоверенная сторона.

Путь атаки Heapjack (Accomplish.ai)
Недоверенный код делает снимок кучи с помощью ‘v8.getHeapSnapshot()’ и перебирает все строки, похожие на UUID. При неправильном вводе возвращается сообщение «не авторизовано». При правильном вводе токена с неверным аргументом возвращается реальная ошибка проверки, которая сообщает злоумышленнику, что токен правильный.
С помощью токена недоверенный код отправляет собственный запрос в тот же канал, который доверенный контекст использует для связи с собственным родительским процессом без песочницы.
Родительский процесс проверяет токен, видит, что он действителен, и выполняет работу. В рамках проверки концепции использовалась системная команда open для запуска приложения за пределами дерева процессов Codex. Такой же доступ возможен к любому сокету Unix, в том числе к сокету демона Docker, а также к инструменту для редактирования глобального конфигурационного файла.
Все это работает в режиме «только чтение» — самом строгом режиме «песочницы», при котором агент вообще ничего не записывает.
Overpatch
Вторая уязвимость, Overpatch, связана с интерфейсом командной строки Codex с открытым исходным кодом. В режиме записи в рабочую область агент может писать только в папку проекта, а команда оболочки, направленная на домашний каталог, отклоняется.
Исследователи использовали собственный инструмент Codex для установки патчей, apply_patch, чтобы все равно выполнить запись.
Инструмент предоставляет доступ на запись в родительскую папку для каждого пути, указанного в патче. Имя ‘/tmp’, и он предоставляет доступ на запись в корневую папку диска.
В рабочем эксплойте используется патч с двумя изменениями: одно из них указывает на ‘/tmp’ и не делает ничего полезного, кроме расширения прав доступа, а второе добавляет строку в ‘.zshrc’ через символическую ссылку в домашний каталог.
Уберите первое изменение, и в доступе на запись будет отказано. Таким образом, в следующем терминале, который откроет разработчик, строка злоумышленника будет запущена без изолированной программной среды.
Та же основная ошибка
Обе ошибки имеют схожую природу: механизм обеспечения безопасности находился внутри того, что он должен был обеспечивать. apply_patch определял собственные разрешения на основе входных данных, предоставленных злоумышленником. node_repl хранил секрет, отделяющий доверенный код от недоверенного, в той же памяти, что и недоверенный код.
В обоих случаях песочнице изнутри было приказано пропустить что-то.
Этот тип уязвимостей не нов. В июле 2026 года исследователи из Pillar Security продемонстрировали ту же идею на примере Cursor, Codex, Gemini CLI и Antigravity от Google, где агент, остающийся в своей «песочнице», записывает файл, который затем запускает доверенный инструмент за пределами «песочницы».
В ответ на пост Йомтова в X* один из комментаторов написал, что «контексты V8 изолируют глобальные переменные, а не память, так что песочница — это обещание, которое куча так и не сдержала». Другой назвал границу доверия «перегородкой в комнате». Поведение, включенное по умолчанию, тоже вызвало вопросы: один из комментаторов задался вопросом, почему привилегированный токен вообще доступен из ненадежного JavaScript.
Что делать
По данным Accomplish, OpenAI исправила Heapjack в сборке Codex Desktop 26.818.21641 и OverPatch в Codex CLI 0.149.0.
Пользователям следует обновиться до этих версий или более поздних. Йомтов отметил, что OpenAI устранила обе проблемы в течение восьми дней после его сообщения.
В заявлении, опубликованном сегодня, представитель OpenAI поблагодарил исследователей:
«Мы благодарим исследователей за то, что они связались с нами и поделились своими выводами. Мы устранили обе проблемы в августе, но мы постоянно совершенствуем наши «песочницы». Последние обновления ужесточают контроль над тем, куда агенты могут записывать файлы, и расширяют тестирование этих средств защиты на разных платформах.»
Обновление от 21 сентября, 05:29 по восточному времени: добавлено заявление от OpenAI, полученное после публикации.
