Хакеры устали прятаться и начали сливать пароли открыто.
Пока специалисты изучали детали компрометации популярного действия GitHub tj-actions/changed-files , стало ясно, что хакеры проникли в экосистему GitHub гораздо раньше, чем предполагалось. Исходной точкой всей цепочки стал утечка персонального токена доступа (PAT) от проекта SpotBugs, используемого в GitHub Actions. Как показало новое расследование , атака стартовала ещё в ноябре 2024 года, хотя обнаружена была лишь в марте 2025-го.
Первоначальный доступ был получен через уязвимый workflow в репозитории SpotBugs — популярного средства статического анализа кода на Java. В одном из таких workflow разработчик проекта случайно указал свой персональный токен доступа как секрет, что дало злоумышленнику возможность украсть его через pull_request_target — опасный триггер, позволяющий кодам из форков обращаться к секретам оригинального репозитория.
Менее чем через 2 недели после добавления уязвимого workflow, 6 декабря, хакер отправил вредоносный pull request в spotbugs/sonar-findbugs. Сценарий сработал — GitHub Action сработал по триггеру pull_request_target и раскрыл PAT, с помощью которого атакующий получил права мейнтейнера в SpotBugs.
С этого момента началось боковое перемещение. Сначала атакующий получил контроль над другими репозиториями SpotBugs, затем переместился к проекту reviewdog — инструменту для проверки кода на GitHub. Используя всё тот же украденный токен, злоумышленник изменил тег v1 в reviewdog/action-setup, направив его на вредоносный коммит. Этот подменённый код встраивался в другие GitHub Actions, в том числе в eslint-changed-files и далее — в широко используемый tj-actions/changed-files.
Последний оказался особенно уязвимым: более 23 000 репозиториев используют этот Action для отслеживания изменений файлов. Подменённая версия инструмента тихо отправляла секреты CI/CD — токены, ключи API и пароли — в обычные журналы сборок, доступные публично. Любой, кто знал, где искать, мог без особых усилий извлечь эти данные.
Хакеры не сразу начали атаку на популярные инструменты. Сначала они «прощупывали почву» на репозитории Coinbase agentkit — тестовая попытка, не приведшая к результату. Только после неё началась полномасштабная атака на open source-среду.
11 марта, используя украденный токен, злоумышленник добавил фейковую учётную запись jurkaofavak в SpotBugs как мейнтейнера и мгновенно загрузил новую ветку с вредоносным workflow. Так он закрепил своё присутствие и обеспечил дальнейшую цепочку атак. Позже стало ясно, что украденный токен позволял управлять сразу двумя ключевыми проектами: reviewdog/action-setup и spotbugs/spotbugs.
Далее вся цепочка развивалась как по сценарию. CI workflow в tj-actions/changed-files запускал eslint-changed-files, а тот — вредоносный код reviewdog. В результате атакующий получал токен с правами записи в tj-actions/changed-files, менял все теги и направлял их на вредоносные коммиты. Секреты проектов начинали утекать в лог-файлы, незаметно для разработчиков.
Хотя теперь известна изначальная точка входа, расследование продолжается. Команда Unit 42 подчёркивает, что злоумышленники действовали скрытно, поэтапно и пытались стереть следы. Однако остаётся вопрос: зачем, достигнув такого уровня доступа, хакеры начали сливать секреты в открытые логи — и тем самым сами выдали себя?