Крупнейшая за всю историю экосистемы npm атака на цепочку поставок затронула примерно 10% облачных сред, однако принесла злоумышленникам считанные доллары. По данным отраслевых аналитиков, инцидент продемонстрировал, с какой скоростью вредоносный код может проникать в инфраструктуры через широко используемые JavaScript-библиотеки, и подчеркнул важность гигиены разработки и контроля зависимостей.
Как началась компрометация популярных пакетов npm
Атака стартовала с фишингового взлома учетных данных мейнтейнера и разработчика Джоша Джунона (Qix). Получив доступ, злоумышленники обновили около 20 популярных пакетов npm, включая chalk, debug и ansi-styles, которые суммарно насчитывают более 2,6 млрд загрузок в неделю. В обновления был внедрен код для кражи криптовалюты путем перехвата транзакций и подмены адресов получателей.
Масштаб воздействия: 99% зависимостей и 10% облаков
Согласно анализу компании Wiz, хотя бы один из скомпрометированных пакетов является базовой зависимостью практически для любого JavaScript- и Node.js-проекта и присутствует в 99% облачных сред. За короткий период доступности вредоносных версий (около двух часов) загрузки произошли примерно в 10% облачных сред — оценка основана на данных клиентов Wiz и открытых источниках. Как отмечают специалисты, «за короткий двухчасовой период, в течение которого вредоносные версии были доступны в npm, вредоносный код успешно проник в каждую десятую облачную среду».
Технические детали: как работал вредоносный код
По данным Security Alliance, полезная нагрузка была ориентирована на браузерную среду. Скрипт проверял наличие window.ethereum
и перехватывал базовые функции Ethereum-транзакций — approve, permit, transfer, transferFrom — перенаправляя их на кошелек 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976. Транзакции ETH с заданной суммой без дополнительных данных также подвергались редиректу. Для Solana злоумышленники подменяли адрес получателя некорректной строкой, начинавшейся с «1911…», что нарушало корректность переводов.
Ограниченный ущерб и провал монетизации
Несмотря на масштаб распространения, инфраструктурный ущерб оказался минимальным. Сообщество быстро обнаружило инцидент, а вредоносные публикации были удалены в течение нескольких часов. Исследователи отмечают, что злоумышленники, по-видимому, использовали адреса Uniswap и других swap-контрактов вместо собственных кошельков, что резко снизило доход от атаки: речь идет о суммах от нескольких центов до примерно 50 долларов США.
Повторная компрометация и итоговая «выручка»
По данным Socket, та же группа позже скомпрометировала аккаунт мейнтейнера DuckDB и внедрила идентичную нагрузку. Результат также оказался скромным: около $429 в ETH, $46 в SOL и небольшие суммы в BTC, Tron, BCH и LTC — итого примерно $600. Эксперты подчеркивают, что при наличии доступа злоумышленники могли попытаться развернуть реверс-шеллы, осуществить боковое перемещение в сетях или внедрить вымогательское ПО, однако ограничились криптоджекингом.
Уроки для безопасности цепочки поставок
Инцидент подтверждает ключевой риск экосистем открытого исходного кода: скорость и масштаб распространения уязвимых/вредоносных зависимостей. Для снижения риска рекомендуется: обязательная MFA и защита учетных записей мейнтейнеров; применение подписей и аттестации артефактов (например, Sigstore, provenance для npm); фиксация зависимостей через lock-файлы и периодические проверки; внедрение SBOM и мониторинга изменений в зависимостях; изоляция и контроль egress-трафика CI/CD; политика «минимально необходимых привилегий» и непрерывный аудит цепочки поставок.
Этот инцидент стал показательным кейсом: даже при кратковременном окне распространения вредоносные пакеты сумели проникнуть в значимую долю облачных сред, а стоимость ликвидации последствий оказалась несоизмеримой с «выручкой» атакующих. Компании, использующие Node.js и npm, должны укреплять процессы доверенной сборки, внедрять прозрачность происхождения артефактов и автоматизировать контроль зависимостей — это позволит сдержать масштаб возможных атак и ускорить реагирование на новые инциденты.