Новый замер GitGuardian от 13 ноября выявил 28 500 внедрений wfx-loot в 17 715 репозиториях и подтвердил обход блокировки GitHub Actions через npm-хук. Он дополняет уже опубликованную оценку подтверждённых краж. Изменения вносились с 2367 аккаунтов, к которым злоумышленники получили доступ. Массовая волна началась 10 ноября и продолжалась по меньшей мере до 12 ноября.
Aikido ранее подтвердила запуск и отправку данных не меньше чем в 1835 проектах. Оценки различаются, потому что GitGuardian считала внедрения кода, а Aikido — проекты с признаками запуска и отправки данных.
Ранее основным способом атаки было изменение файлов GitHub Actions — системы, которая автоматически собирает и проверяет код. Такие запуски GitHub переводил в состояние action_required: для продолжения требовалось ручное разрешение. Во всех семи ноябрьских случаях, которые изучила GitGuardian, вредоносный процесс не начался.
Читайте также
Злоумышленники обошли эту защиту с помощью установочного хука npm. Они добавляли скрытый shell-скрипт и команду postinstall в файл package.json. При установке зависимостей доверенная сборка запускала вредонос, не меняя файлы GitHub Actions, поэтому блокировка не срабатывала.
GitGuardian изучила 30 репозиториев, где задания запускались после изменения с npm-хуком: GitHub не заблокировал ни одно. В открытых журналах 19 проектов исследователи увидели выполнение скрипта; в 18 случаях он сообщил об успешной отправке данных. Это выборка, а не оценка доли успешных краж во всех затронутых проектах.
wfx-loot собирал доступные среде сборки токены GitHub, облачные учётные данные, ключи реестров программных пакетов и сервисов для разработчиков. В перечне потенциальных целей также были ключи OpenAI, Anthropic, Gemini, Hugging Face, Cursor, Copilot и других ИИ-инструментов. На собственных серверах сборки вредонос мог искать дополнительные файлы с ключами и данные облачных ролей.
Косвенными признаками атаки служат ветка wfx-docs, запрос на добавление изменений с названием docs: dependency audit notes, коммиты ci: refresh build cache, chore: add ci helper и chore: add dependency audit workflow, а также короткоживущие ветки chore/ со случайным окончанием. Злоумышленники часто откатывали изменения и удаляли журналы в течение минуты, поэтому на атаку могут указывать пропуски в нумерации запусков GitHub Actions.
Если вредонос действительно запускался, доступные заданию секреты следует считать раскрытыми, даже если конкретный ключ не упоминался в файле workflow. Владельцам проектов нужно отозвать токены, заменить ключи публикации пакетов, проверить облачные роли и созданные учётные данные, а также поискать закрепление злоумышленника в AWS и Azure, вызовы generateAccessToken и signJwt в GCP, входы через Vault JWT и чтение секретов Kubernetes. Одна замена ключа недостаточна, если с его помощью уже была создана дополнительная роль или постоянный доступ.
