Supply Chain атака на пакет Nx: анализ вредоносного PR

В крупном инциденте с популярным пакетом, наиболее интересны два факта: внедрение вредоносного кода в репозиторий для кражи токена на первом этапе и применение встроенных ИИ-инструментов для поиска секретов в окружении разработчика на этапе пост-эксплуатации.

Первый этап наиболее интересен, потому что после его разбора можно сделать вывод, как не допустить повторения этого сценария в других репозиториях. Контекст: у владельцев проекта Nx был рабочий процесс (workflow), который запускался каждый раз, когда наступало событие pull_request_target, то есть когда появлялся новый Pull Request (PR). Этот workflow проверял новый PR: записывал заголовок и тело PR во временный файл, и вызывал локальный скрипт проверки commit-lint.js. Этот скрипт уже выполнял внедренный код. В итоге злодеи смогли исполнить свой bash-скрипт в рабочем процессе и украсть секрет NODE_AUTH_TOKEN.

Вот тот самый PR, с которого злодеи началась атака: 32458. Его можно найти, если пройтись по всем PR, которые появились накануне инцидента (20-21 августа) и которые вносили изменения в рабочие процессы в каталоге .github/workflows.

Проверим, смогла бы LLM обнаружить этот вредоносный PR. Для этого скопируем код из измененного yml-файла, добавим контекст (в каком каталоге проекта и какой файл изменен) и отправим запрос к модели Claude Sonnet 4. Получаем ответ, в котором вынесен четкий вердикт и описаны риски.

Вторая часть атаки не менее интересна, и мы разберем ее на выходных на мероприятии “Сезон кода” в Санкт-Петербурге.

Supply Chain атака на пакет Nx: анализ вредоносного PR | Сетка — социальная сеть от hh.ru