Вредоносный червь ChainDrop заразил более 400 пакетов в реестре npm. Разработчики по всему миру скачивают эти пакеты сотни миллионов раз в неделю. Жертвами атаки стали компании, у которых злоумышленники получили доступ к рабочим станциям, процессам сборки и облачной инфраструктуре.
Описание
Как показало исследование Unit 42, вредоносные версии затронули в том числе популярные пакеты keyv и cacheable-request. При этом зараженные пакеты полностью сохраняют свои легитимные функции, поэтому их установка не вызывает подозрений. Червь добавляет в пакет лишь небольшой скрипт, который выполняется при установке.
После активации ChainDrop начинает собирать различные секреты. В зону его интереса попадают облачные учетные данные, токены доступа к GitHub и npm, SSH-ключи, а также содержимое файлов конфигурации разработчика. Отдельного внимания заслуживает способность червя читать память процессов в среде сборки GitHub Actions. Автоматические сервисы хранят там временные токены для аутентификации. Эти токены обычно исчезают после завершения задания, но червь успевает перехватить их.
Инфраструктура управления червя работает нестандартно. Вместо фиксированного адреса вредоносный код обращается к смарт-контракту в блокчейне Ethereum и получает оттуда актуальный адрес командно-контрольного сервера. Это позволяет операторам менять серверы без обновления самого вредоносного ПО. В августе 2026 года они уже воспользовались этой возможностью: одной транзакцией сменили домен управления, и все активные копии червя переключились на новый адрес.
Аналитики считают, что червь заразил не только компьютеры разработчиков, но и инфраструктуру непрерывной интеграции и развертывания. Это существенно расширяет потенциальный ущерб: вредоносный код может попадать в программное обеспечение, которое затем поставляется конечным пользователям. Если компания использует скомпрометированный пакет в своих продуктах, атакующие получают возможность влиять на всю цепочку поставок.
Еще одна характерная особенность ChainDrop - закрепление в системе. Червь создает файлы конфигурации для популярных инструментов разработки, таких как VS Code и Claude Code. Если разработчик открывает проект в этих инструментах, червь снова запускает вредоносный код даже после удаления исходного зараженного пакета. Таким образом, червь остается активным до тех пор, пока администратор вручную не удалит все созданные файлы.
Аналитики также обнаружили, что червь создает публичные репозитории в GitHub с именами, похожими на названия из вселенной "Дюны". Червь использует эти репозитории для передачи украденных данных. Аналитики обнаружили 453 таких репозитория, принадлежащих пяти различным учетным записям. Новые репозитории появлялись прямо во время исследования.
Для защиты от ChainDrop специалисты рекомендуют провести ревизию установленных пакетов, удалить подозрительные версии и отозвать все токены, которые могли быть скомпрометированы. Особое внимание стоит уделить системам непрерывной интеграции: если червь выполнялся в сборочной среде, необходимо ротировать все секреты, включая облачные и репозиторные ключи.
Важно понимать, что простое восстановление чистой версии пакета не решает проблему. Зараженные файлы могут оставаться в кэшах, файлах блокировки зависимостей и образах контейнеров. Пока администраторы не удалят эти артефакты, новое заражение может произойти при следующей сборке.
Червь также использует имитацию названий легитимных пакетов. Так, в одной из цепочек атаки он пытался внедриться в проект opensearch-js через поддельное имя зависимости, которое выглядело как внутренний компонент этого же проекта. Эта техника позволяет обойти защиты, которые проверяют только предустановочные скрипты.
Примечательно, что даже наличие официальной подписи пакета не гарантирует его безопасность. Если злоумышленники скомпрометировали сборочный процесс, подписанный артефакт все равно может содержать вредоносный код. Поэтому командам безопасности недостаточно проверять цифровые подписи, необходимо также контролировать целостность всей сборочной среды.
Кроме того, червь эксплуатирует доверенные инструменты разработчика, такие как среда выполнения Bun, которая используется для запуска вредоносного кода. Это делает его обнаружение более сложным: для мониторинга приходится учитывать активность легитимных компонентов.
Отдельно аналитики отмечают, что червь содержит проверку языка системы. Если операционная система использует русский язык, вредоносное ПО завершает работу и не наносит вреда. Это указывает на возможное региональное ограничение, однако точных данных о принадлежности операторов нет.
На данный момент ChainDrop продолжает распространяться. Новые версии зараженных пакетов появляются каждые несколько минут, а количество созданных червем репозиториев растет. Аналитики подчеркивают, что масштаб атаки может быть значительно шире, чем это видно по уже обнаруженным артефактам.
Индикаторы компрометации
Domain
- awqhnjewqjkl.icu
- js-mirror.com
- npm-cache.com
- pypi-get.com
URL
- http://awqhnjewqjkl.icu/cdn-cgi/rum?
- https://npm-cache.com:443/router
Ethereum
- Resolver contract: 0xE1f2395ee43e45A1556EC6438a88c31B83493103
- Changed C2 Transaction: 0xc55920f1bd0531b6738153068a666c080ddded47e6256f1fd980d51c0b507c91
- Owner wallet: 0x55f9780e1492344b7417fa723aedc4d0b97f31cd
- Binance deposit pivot: 0x35477b7b2df3174B9FE8A681750A7E3fbA20F39B
- Getter selector: 0x53ed5143
- Setter selector: 0xd3c159e5
SHA256
- 54dc7ea54a1317cca0e890a2770630cf7fa6c97813e0cb9d2caa93012b350668
- 9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bcc
- b27b82afa5f15512f3856e549fb83d873fd0049759a4b62ce64c8d7d4dc2c678
- fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1eb