Перейти к содержанию

OpenAI

Через задачу на GitHub Depi добралась до npm-пакета Codex

3 мин чтения

Текст написан ИИ-моделью по источникам, на которые ведут ссылки, и сверен с ними второй моделью. Как мы работаем

Всё о теме: Агенты для программирования →
Изображение: depi.security

Исследователи Depi 11 ноября разобрали в блоге Depi цепочку уязвимостей, которая начиналась с обычной задачи (issue) в репозитории openai/codex на GitHub и заканчивалась доступом к публикации официального пакета @openai/codex в npm. OpenAI ошибку уже исправила, и патчить на своей стороне пользователям нечего. Но окажись цепочка у злоумышленника, отравленный релиз при включённом автообновлении Codex CLI встал бы на машину без закреплённой версии и без чьего-либо ревью.

Авторы выводят из этого не патч, а привычку: на инструментах, которые обновляются сами, держать короткую паузу перед установкой свежей версии. За это время, по их словам, мейнтейнеры и сообщество безопасности успевают заметить, если в релиз проникло что-то вредное.

Почему речь об автообновлении

Codex CLI в Depi противопоставляют библиотеке, забытой в lock-файле: это агент, который работает на машинах разработчиков, с их учётными данными, внутри важных репозиториев, и создан, чтобы выполнять код. «Вредоносной версии Codex CLI не нужно искать способ запуститься. Запуск и есть её функция», - говорят авторы. С автообновлением, добавляют они, нет версии, которую можно проверить, нет PR на одобрение и нет момента, когда человек читает diff.

Масштаб Depi оценивает в миллионы загрузок пакета в месяц. На странице раскрытия на Bugcrowd цифра другая: около 10 миллионов загрузок в неделю с пиками до 200 миллионов.

Обновления у Codex CLI и без того приходят без участия человека. В октябре автор issue на GitHub описывал, что с версии 0.157.0 вместе с любым интерактивным сеансом по умолчанию стартует фоновый демон, который сам проверяет релизы: через 5 минут после старта, потом раз в час, с перезапуском бэкенда. В такой конфигурации, если верить тому описанию, частоту обновлений задаёт сам CLI.

Как задача дошла до npm

Точкой входа был workflow Issue Labeler. Он через openai/codex-action отдавал агенту Codex заголовок и текст каждой новой задачи, чтобы тот предложил метки, а параметр allow-users: "*" не ограничивал запуск доверенными мейнтейнерами. Открыть задачу может любой. Подобрав формулировку, исследователи заставили модель принять текст задачи за инструкции и выполнить их команды, обойдя встроенные ограничения Codex.

Дальше мешала песочница в режиме workspace-write: без сети, с записью только в рабочую папку и /tmp, без переменных окружения с токенами. Однако раннер GitHub состоит из .NET-процессов, и они оставляют в /tmp отладочные каналы среды выполнения CoreCLR. Для Linux это обычные файлы, их открывают простым вызовом open, который песочница разрешает, а протокол отладки никак не проверяет, кто на другом конце. Через него авторы прочитали память процесса Runner.Worker, достали ACTIONS_RUNTIME_TOKEN и GITHUB_TOKEN и вывели их через логи самого workflow. Утечку токенов они проверяли на своём тестовом окружении.

Токены работали и за пределами инфраструктуры OpenAI. С ними, по описанию Depi, можно подложить вредоносную запись в кэш GitHub Actions для workflow rust-ci.yml, у которого есть права на запись. Кэш - это tar-архив, который распаковывается без проверки содержимого, поэтому подложенный тест на Python выполнился бы уже в привилегированном workflow. Последний шаг опирается на уязвимость GitHub, которой с авторами поделился исследователь Аднан Хан (Adnan Khan): поддельный релиз Codex, удаление которого запускает workflow и отдаёт атакующему OpenID-токен. По такому токену GitHub выдаёт подписанный JWT, которому доверяет npm, а с ним можно опубликовать свою версию пакета. Итог исследования в Depi формулируют так: они получили учётные данные, нужные для бэкдора в пакете Codex CLI.

Сколько заплатила OpenAI

Отчёт с полным proof of concept ушёл в OpenAI через Bugcrowd, и исправление, по словам Depi, вышло сразу. Пока OpenAI выплатила всего 1 000 долларов первоначальной награды, хотя по правилам компании за критические находки платят до 100 000 долларов.

В записи Bugcrowd у отчёта приоритет P1 и статус Resolved: уязвимость принята и исправлена. Отчёт при этом ещё на дополнительном рассмотрении, так что сумма награды может измениться.

Кодинг-агенты

AWS Emulator написали агенты, и чинить его будут тоже они

«Мы его не редактируем», говорит Том Каллауэй из AWS про AWS Emulator, эмулятор облака на 438 моделей API, целиком написанный агентами. Ошибки в его коде чинят через самих агентов, которые этот код пишут. Вы бы тестировали код на эмуляторе, который написали агенты, или только в облаке?

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите, чтобы оставить комментарий. Он появится после модерации.