Исследователи компании Wiz провели расследование атаки на цепочку поставок NPM с помощью Nx «s1ngularity», в результате которой были украдены тысячи токенов учётных записей и секретов репозиториев. Согласно их оценке, компрометация Nx привела к раскрытию 2180 учётных записей и 7200 репозиториев в три этапа.
В Wiz подчеркнули, что масштаб последствий инцидента остаётся значительным, поскольку многие из украденных секретов сохраняют актуальность.
Nx — популярная система сборки с открытым исходным кодом и инструмент управления монорепозиториями, широко используемый в корпоративных экосистемах JavaScript/TypeScript. В индексе пакетов NPM еженедельно регистрируется более 5,5 млн загрузок.
26 августа 2025 года злоумышленники воспользовались уязвимостью рабочего процесса GitHub Actions в репозитории Nx, чтобы опубликовать вредоносную версию пакета в NPM, которая включала скрипт, выполняемый после установки (‘telemetry.js’). Вредоносное ПО telemetry.js — это похититель учётных данных, нацеленный на системы Linux и macOS. Он пытался украсть токены GitHub, токены npm, ключи SSH, файлы .env, криптокошельки и загрузить секретные данные в публичные репозитории GitHub под названием «s1ngularity-repository».
Похититель учётных данных использовал установленные инструменты командной строки для платформ искусственного интеллекта, таких как Claude, Q и Gemini, для поиска и сбора конфиденциальных учётных данных и секретов с помощью запросов LLM. Wiz сообщает, что запрос менялся с каждой итерацией атаки. Это свидетельствует о том, что злоумышленник настраивал его для повышения эффективности.
«Мы видим внедрение ролевых подсказок, а также разную степень специфичности методов. Эти изменения оказали непосредственное влияние на успешность вредоносного ПО. Например, введение термина “тестирование на проникновение” отразилось в отказах LLM от участия в подобной деятельности», — пояснили исследователи.
На первом этапе атаки, с 26 по 27 августа, заражённые пакеты Nx напрямую затронули 1700 пользователей, что привело к утечке более 2000 уникальных секретов. В результате атаки также были раскрыты 20 тысяч файлов из заражённых систем. В GitHub заблокировали созданные злоумышленником репозитории через восемь часов, но данные уже были скопированы.
В период с 28 по 29 августа, во время второй фазы, злоумышленники использовали украденные токены GitHub для преобразования закрытых репозиториев в публичные, переименовав их и включив в них строку «s1ngularity».
Это привело к дальнейшей компрометации ещё 480 учётных записей, большинство из которых принадлежали организациям, и к публикации 6700 закрытых репозиториев.
На третьем этапе, с 31 августа, злоумышленники атаковали одну организацию-жертву, используя две скомпрометированные учётные записи для публикации ещё 500 закрытых репозиториев.
Команда Nx опубликовала на GitHub подробный анализ первопричин, в котором объяснила, что компрометация произошла из-за внедрения заголовка запроса на извлечение в сочетании с небезопасным использованием pull_request_target.
Это позволило злоумышленникам запустить произвольный код с повышенными правами доступа, что, в свою очередь, активировало конвейер публикации Nx и похитило токен публикации npm.
Вредоносные пакеты уже удалили, а скомпрометированные токены отозвали. Для всех учётных записей издателей ввели двухфакторную аутентификацию.
Чтобы предотвратить повторение подобной компрометации, проект Nx внедрил модель доверенного издателя NPM, которая исключает публикацию на основе токенов, и добавил ручное одобрение для рабочих процессов, инициированных PR.
Источник: habr.com