Безопасность

Сетевой червь поразил репозиторий npm, замаскировав вредоносное ПО под абсолютно легитимный софт

Во вторник по репозиторию npm прокатился самораспространяющийся червь. Он заразил сотни пакетов, на которые тихо опираются огромные пласты программного мира. Исследователи назвали его ChainDrop. Это более крупный и опасный потомок небольшой атаки Shai-Hulud, которая поразила реестр ранее этим летом.

Сетевой червь поразил репозиторий npm, замаскировав вредоносное ПО под абсолютно легитимный софт

Всё началось со взлома аккаунта разработчика keyv на GitHub. Эта библиотека кэширования загружается около 150 миллионов раз в неделю. Оттуда заражение перекинулось на родственные пакеты, а затем и на сотни других. Всего за два часа атака достигла таких корпоративных гигантов, как Deliveroo, Qlik, Picsart и ServiceTitan. На затронутые пакеты приходятся миллиарды загрузок в месяц.

Точное число пострадавших продолжало расти, а данные исследователей разнились. В числе компаний, отслеживавших инцидент, были BleepingComputer, Aikido и StepSecurity. По их оценкам, ущерб затронул сотни пакетов и более чем 1 300 зараженных версий. Репозиторий npm уже подвергался атакам ранее, но эта стала одной из крупнейших.

Атака использовала собственные механизмы доверия индустрии

Вот что сделало ее особенно опасной. Злоумышленник не стал красть токен и вручную загружать вредоносное ПО. Он внедрил зараженный код в основные ветки проектов, после чего позволил собственным автоматизированным пайплайнам сборки каждого проекта опубликовать его.

Вредонос распространялся через легитимные рабочие процессы GitHub Actions. Поэтому каждая зараженная версия обладала действительным сертификатом происхождения (provenance) — криптографическим подтверждением, призванным гарантировать чистоту сборки. Любой инструмент, проверяющий этот показатель, пропускал пакеты без вопросов. «Происхождение доказывает, какой именно коммит был собран, — отмечают в StepSecurity, — но оно не может доказать, что этот коммит был санкционирован».

Остальной процесс работал на автопилоте. Каждый зараженный пакет добавлял хук preinstall, благодаря чему стандартная команда «npm install» незаметно запускала загрузчик. Загрузчик скачивал с GitHub официальную среду выполнения Bun и использовал ее для запуска искусно обфусцированного стиллера учетных данных. Все сетевые запросы были направлены на github.com, поэтому ничто не вызывало подозрений.

Что попадает под удар и где прячется угроза

Полезная нагрузка представляет собой настоящий пылесос. Она собирала токены npm и GitHub, а также облачные секреты из AWS, Kubernetes и Vault. Под удар попали SSH и приватные ключи, учетные данные баз данных и Slack. На серверах сборки GitHub Actions вредонос дампл память машины, чтобы похитить секреты выполняемых задач. Новшеством этой атаки стал сбор учетных данных от ИИ-инструментов: вредонос считывал файлы конфигурации для Claude Code, Cursor, Codex, OpenAI и Gemini.

Затем червь распространялся дальше. Используя украденные токены npm, он переупаковывал и заново публиковал зараженные версии всех пакетов, к которым у каждой жертвы был доступ. Один инфицированный ноутбук или сборочный сервер заражал следующий. Именно эта цепочка и превращает вредонос в червя, а не в разовый взлом.

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

Во-вторых, он закрепляется в ИИ-инструментах для написания кода. Вредонос добавляет стартовый хук для Claude Code и задачу VS Code, которая запускается при открытии папки. Простое открытие зараженного репозитория в этих программах повторно активирует вредоносное ПО без необходимости установки.

Специалисты npm начали удалять зараженные версии спустя примерно два часа, а разработчики keyv откатили пакет до безопасного релиза. Рекомендации исследователей категоричны: любой, кто установил затронутую версию, должен считать устройство взломанным и скомпрометированным, а также сменить все учетные данные. Однако сначала следует удалить процесс-наблюдатель за токенами, созданный вредоносом — он активирует полезную нагрузку атакующего в тот самый момент, когда вы отзываете украденный токен.

Простое решение, которое могло бы предотвратить большую часть этого инцидента, банально. Устанавливайте пакеты с отключенными скриптами и подождите несколько дней, прежде чем доверять абсолютно новой версии. Это урок, который экосистема продолжает усваивать снова и снова, с каждым разом в всё больших масштабах.

Опубликовано 4 августа 2026 - 09:56 Наверх