В конце августа 2025 года сообщество разработчиков, активно использующих популярный инструмент Nx, оказалось в центре масштабного инцидента, связанного с безопасностью и интеграцией с GitHub Actions и npm. Незваные злоумышленники воспользовались уязвимостью в настройках автоматизированных рабочих процессов на GitHub, чтобы украсть NPM токен и выпустить вредоносные версии нескольких пакетов Nx. Эта атака продлилась всего четыре часа, но её последствия затронули тысячи разработчиков и компаний по всему миру. Разбор этого случая стал полезным уроком для многих проектов с открытым исходным кодом, которые используют схожие технологии автоматизации. В данной статье мы расскажем о том, что произошло, как команда Nx отреагировала на инцидент и какие практические выводы можно сделать из этого события для повышения безопасности в органах разработки программного обеспечения.
В основе атаки лежала уязвимость, связанная с особенностями работы pull_request_target workflow в GitHub Actions. Этот тип workflow запускается с правами целевой ветки репозитория, а не с ограничениями вклада извне. В Nx использовался скрипт проверки заголовков pull request'ов (PR), который не должным образом фильтровал ввод, допуская инъекции злонамеренных команд. Злоумышленники создали PR с названием, включающим вредоносные shell-команды, которые были выполнены с максимальными правами. Благодаря разрешениям, которые изначально были установлены как "чтение и запись", эти команды получили доступ к секретам репозитория, включая GitHub токен с правами на публикацию в npm.
Получив такой доступ, злоумышленники создали ветку, в которой подменили CI/CD скрипт, а затем запустили workflow publish, инициированный через GitHub API с помощью возможности workflow_dispatch. Этот запуск уже имел доступ к секрету NPM_TOKEN, что позволило публикацию злонамеренных версий популярных пакетов Nx. Эти версии содержали post-install скрипты - после установки в проектах они запускались на машинах разработчиков и сканировали систему в поисках конфиденциальных данных. Собранная информация загружалась в публично доступные репозитории на GitHub, что делало утечку очевидной и приводило к серьезным последствиям для многих пользователей. Стоит отметить, что Nx Cloud, платный сервис компании, не пострадал в ходе атаки.
Инцидент касался исключительно открытых исходных пакетов в npm. В обозримом будущем служба облачного решения сохранила свою работоспособность и безопасность, что позволило избежать более масштабных проблем для клиентов. Команда Nx быстро отреагировала на выданные предупреждения сообщества и тех, кто заметил необычное поведение пакетов в системах. Сразу после выявления атаки были предприняты меры по удалению скомпрометированного токена и удалению злонамеренных пакетов из npm. В сотрудничестве с технической поддержкой npm все подобные версии были отозваны, а токены - отозваны и заменены.
Коммуникация с пользователями прошла с максимально возможной прозрачностью. Был опубликован официальный бюллетень безопасности с разъяснением ситуации и рекомендациями по проверке своих систем на признаки компрометации. Особое внимание уделялось указанию ответственных контактов - security@nrwl.io, через которые можно было оперативно сообщать о подозрительных инцидентах. Команда также активно взаимодействовала с сообществом Nx в Discord, на платформах социальных сетей и форумах, помогая тем кто пострадал и стимулируя пользователей проверять лог активности GitHub на предмет создания подозрительных репозиториев.
Техническое расследование показало, что ключевым фактором атаки стала низкая степень изоляции прав в GitHub Actions workflows проекта. До этого случая разрешения для workflow были выставлены по умолчанию "чтение и запись" - это позволяло полностью управлять репозиторием изнутри через автоматические скрипты. Начиная с февраля 2023 года GitHub сменил дефолтные установки на более жёсткие, предоставляя только доступ на чтение новым репозиториям, но Nbxlпам проекты, созданные раньше, автоматически не обновились. В результате архитектура процесса публикации осталась уязвимой. В ходе инцидента злоумышленники также воспользовались возможностью ручного запуска публикации (workflow_dispatch), что позволило им программно инициировать прогоны рабочих процессов через API, практически без ограничений.
Подобное сочетание уязвимостей - незашищенного ввода, избыточных прав и открытого триггера выполнения - создало благодатную среду для атаки. После анализа последствий и причин команда Nx кардинально пересмотрела подходы к безопасности. Самой важной мерой было отказ от использования традиционных NPM токенов для публикации пакетов. Вместо этого была внедрена новая схема с использованием Trusted Publisher и OpenID Connect (OIDC) - способа аутентификации, который связывает GitHub репозиторий, CI процесс и аккаунт npm напрямую. За счёт этого отменяется необходимость хранить и использовать постоянные секретные токены, которые могут быть украдены.
Для предотвращения исполнения рабочих процессов и публикаций со стороны внешних участников работа была пересмотрена так, что только внутренние участники с двухфакторной аутентификацией и разрешениями могут инициировать публикацию. Также добавлены дополнительные проверки происхождения (provenance) пакетов при их установке через Nx и Nx Console, позволяющие убедиться, что версии действительно были опубликованы из проверенной среды. Появился документ SECURITY.md, регулирующий ответственное раскрытие уязвимостей, что повышает уровень доверия в сообществе и способствует проактивному выявлению проблем. Параллельно с этими правками команда изучала внутренние процессы управления токенами и настройку вызовов GitHub CLI, чтобы исключить подобные сценарии утечки секретов.
Особое внимание Nx уделил и советам для пользователей. Рекомендуется всем самим проверять конфигурацию своих систем, аудитировать локальные файлы конфигурации на предмет секретов, регулярнее очищать кэш npm, yarn или pnpm, а также обновлять пакеты Nx до последних версий, не затронутых атакой. Также важно обращать внимание на логи GitHub, чтобы выявлять аномальные действия или новые репозитории, которые могли появиться без ведома. В конечном итоге ситуация с атакой на Nx стала поучительным кейсом, демонстрирующим, как даже популярные и технологически продвинутые инструменты могут пострадать из-за кумулятивных ошибок в настройке автоматизации. Прозрачный разбор инцидента и быстрые меры позволили минимизировать ущерб и повысить общую культуру безопасности в сообществах разработчиков.
Этот инцидент настоятельно напоминает всем владельцам проектов на GitHub о важности своевременных обновлений прав доступа и грамотно спроектированных workflow с минимумом прав, необходимых для выполнения задач. Также рекомендуется использовать новые методы аутентификации и публикации, такие как OIDC, чтобы избежать долгосрочного хранения уязвимых секретов. Уроки, вынесенные командой Nx и сообществом, должны стать отправной точкой для пересмотра процессов безопасности во всех проектах с открытым исходным кодом и корпоративными приложениями. В мире, где автоматизация и интеграция с облачными сервисами становятся неотъемлемой частью ежедневной разработки, лишь комплексный, многоуровневый подход к безопасности позволит избежать повторения подобных инцидентов и поможет сохранить доверие миллионов пользователей по всему миру. Таким образом, инцидент с публикацией вредоносных пакетов Nx в августе 2025 года оставляет важное наследие - необходимость постоянного контроля над автоматизированными процессами, прозрачной коммуникации с пользователями и принятия современных, проверенных техник защиты, которые с минимальными потерями позволяют выявлять и нейтрализовать угрозы безопасности.
Для дополнительной информации и подробного технического разбора инцидента доступен официальный отчёт и GitHub Security Advisory от команды Nx. В случае возникновения вопросов или обнаружения новых уязвимостей рекомендуется обращаться на адрес security@nrwl.io. .