Атака на цепочку поставок: npm-пакет для OpenAI Codex месяц похищал токены аутентификации

Фото автора

CyberSecureFox Editorial Team

Исследователи из Aikido Security обнаружили вредоносную кампанию, нацеленную на разработчиков, использующих OpenAI Codex. Npm-пакет codexui-android, позиционируемый как удалённый веб-интерфейс для OpenAI Codex и набравший более 29 000 загрузок в неделю, на протяжении примерно месяца скрытно извлекал токены аутентификации и отправлял их на сервер, контролируемый злоумышленниками. Помимо npm-пакета, та же схема эксфильтрации была выявлена в Android-приложениях на Google Play с суммарной аудиторией более 60 000 установок. Всем, кто использовал данный пакет или связанные приложения, необходимо немедленно отозвать свои токены OpenAI.

Механизм атаки: доверие как оружие

Ключевая особенность этой кампании — она не опирается на типосквоттинг или одноразовые пакеты-ловушки. По данным исследователей, codexui-android представлял собой функциональный пакет, прошедший через активную разработку, с чистым репозиторием на GitHub. Вредоносный код был внедрён примерно через месяц после первой публикации пакета в реестре npm — предположительно, чтобы сначала сформировать доверие пользователей и расширить охват.

Начиная с версии 0.1.82, пакет содержал код, который считывал содержимое файла ~/.codex/auth.json и отправлял его на удалённый сервер sentry.anyclaw[.]store/startlog, замаскированный под легитимную платформу мониторинга Sentry. Среди похищаемых данных:

  • access_token
  • refresh_token
  • id_token
  • идентификатор учётной записи (account ID)

Как предупреждает OpenAI в своей документации, при использовании файлового хранилища файл ~/.codex/auth.json содержит токены доступа в открытом виде и должен обрабатываться как пароль. Каждый раз, когда пользователь входит в приложение Codex, CLI или расширение IDE через ChatGPT или API-ключ, учётные данные кешируются локально в этом файле.

Исследователь Aikido Чарли Эриксен подчеркнул, что украденный refresh_token, по его оценке, не имеет срока действия, что потенциально даёт злоумышленнику бессрочный доступ ко всем возможностям скомпрометированной учётной записи. Следует оговориться, что это утверждение не подтверждено официальной документацией OpenAI.

Вектор через Android-приложения

Npm-пакет оказался не единственным каналом доставки. По данным Aikido, Android-приложение OpenClaw Codex Claude AI Agent (имя пакета: gptos.intelligence.assistant), опубликованное разработчиком под именем BrutalStrike, запускало npm-пакет внутри песочницы PRoot и отправляло учётные данные Codex на тот же эндпоинт.

Технически приложение размером около 26 МБ при первом запуске извлекало пользовательское окружение Linux на основе Termux в приватное хранилище и запускало Node.js через PRoot. Версия npm-пакета не была зафиксирована — приложение загружало текущую опубликованную версию, что автоматически подтягивало вредоносный код после его внедрения в версию 0.1.82.

По данным исследователей, это приложение набрало более 50 000 установок. Аналогичная цепочка эксфильтрации была обнаружена во втором приложении того же разработчика — Codex (имя пакета: codex.app) — с более чем 10 000 загрузок. Остальные три приложения BrutalStrike, как сообщается, не содержали вредоносной функциональности.

Реакция автора и цифровой след

При обращении к автору пакета через GitHub его поведение вызвало дополнительные вопросы. Первоначально он заявил о потере доступа к npm-аккаунту, затем отредактировал ответ, сообщив, что «проводит внутреннее расследование» и «начал удалять затронутую функциональность и связанные данные». Автор утверждал, что учётные данные не передавались третьим лицам, однако не объяснил, зачем код для доступа к токенам Codex был внедрён исключительно в npm-сборку пакета.

Примечательно, что профиль автора в социальной сети X содержит домен anyclaw[.]store — тот самый, на который отправлялись похищенные данные. Согласно записям WHOIS, домен был зарегистрирован всего через два дня после публикации первой версии npm-пакета (0.1.72), что указывает на заблаговременное планирование инфраструктуры.

Индикаторы компрометации

  • Домен эксфильтрации: sentry.anyclaw[.]store
  • Эндпоинт: sentry.anyclaw[.]store/startlog
  • Домен инфраструктуры: anyclaw[.]store
  • Затронутый npm-пакет: codexui-android (начиная с версии 0.1.82)
  • Затронутые Android-приложения: gptos.intelligence.assistant, codex.app

Рекомендации

  1. Немедленно удалите пакет codexui-android из всех проектов и проверьте зависимости на его наличие.
  2. Отзовите и перевыпустите все токены OpenAI. Удалите файл ~/.codex/auth.json и повторно авторизуйтесь после очистки.
  3. Проверьте сетевые логи на наличие обращений к доменам anyclaw.store и sentry.anyclaw.store.
  4. Удалите Android-приложения OpenClaw Codex Claude AI Agent и Codex от разработчика BrutalStrike, если они были установлены.
  5. Проведите аудит активности учётных записей OpenAI на предмет несанкционированных действий за последний месяц.
  6. Рассмотрите переход на хранение учётных данных Codex в системном хранилище ключей ОС вместо файлового хранения в открытом виде.

Данный инцидент демонстрирует зрелую тактику атаки на цепочку поставок: функциональный пакет, период накопления доверия, вредоносная инъекция только в npm-сборку при чистом репозитории на GitHub, а также параллельное распространение через мобильные приложения. Разработчикам, использующим инструменты на базе ИИ, следует применять к ним те же принципы минимального доверия, что и к любому стороннему коду: фиксировать версии зависимостей, проверять различия между исходным кодом в репозитории и опубликованным пакетом, а также хранить токены аутентификации исключительно в защищённых хранилищах операционной системы.


CyberSecureFox Editorial Team

Редакция CyberSecureFox освещает новости кибербезопасности, уязвимости, malware-кампании, ransomware-активность, AI security, cloud security и security advisories вендоров. Материалы готовятся на основе official advisories, данных CVE/NVD, уведомлений CISA, публикаций вендоров и открытых отчётов исследователей. Статьи проверяются перед публикацией и обновляются при появлении новых данных.

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.