Червь ChainDrop заразил 444 пакета npm и обходит защиту

4 августа 2026 года несколько независимых команд по безопасности обнаружили крупную атаку на цепочку поставок npm: новый вариант червя Shai-Hulud, получивший от Microsoft и других исследователей имя ChainDrop, заразил 444 пакета от нескольких издателей. Суммарно эти пакеты скачивают около 2 млрд раз в месяц; среди заражённых, широко используемые базовые зависимости keyv, flat-cache и cache-manager.
Сам червь Shai-Hulud впервые появился в сентябре 2025 года и получил имя в честь гигантских песчаных червей из романа Фрэнка Герберта «Дюна», исследователи безопасности традиционно называют самовоспроизводящееся вредоносное ПО в честь подобных существ. Но, как отмечает в разборе атаки на платформе Medium Эбби Кернс, CEO компании ActiveState (занимается безопасностью open source), ChainDrop уникален не сходством с предшественником, а тем, что обходит типичные механизмы защиты открытых репозиториев.
Установка заражённого пакета (npm install), лишь один из возможных путей заражения, не единственный. ChainDrop также встраивает стартовые хуки прямо в конфигурационные файлы репозитория: если просто открыть заражённую ветку в VS Code или Claude Code, репозиторий переходит под контроль червя без установки каких-либо пакетов.
После запуска программа обыскивает рабочее пространство пользователя в поисках npm-токенов с полными правами на запись, а также других учётных данных, облачных ключей и секретов; она проверяет конфигурации shell, переменные окружения и даже оперативную память. Похищенные данные шифруются и отправляются на серверы злоумышленников. Найдя npm-токен, ChainDrop скачивает архивы в формате tarball всех пакетов, к которым у токена есть доступ, минуя сами репозитории, и пересобирает эти архивы, встраивая в них собственную полезную нагрузку: червь размножается через архивы, а не через коммиты в исходном коде, поэтому проверка самого репозитория с исходным кодом не покажет следов взлома.
У атаки есть и второй вектор: ChainDrop также ищет учётные данные GitHub. Если находит, запрашивает через GitHub API список всех доступных репозиториев и веток и напрямую коммитит туда свой вредоносный конфигурационный код. Когда другой разработчик открывает такой репозиторий в Claude Code или VS Code, в фоне запускается задача, которая похищает уже его учётные данные, и цикл заражения повторяется через нового человека.
Эта схема особенно опасна ещё и потому, что npm повсеместно встроен в автоматизированные CI/CD-конвейеры, которые могут сами подтягивать патч-обновления зависимостей при пересборке проекта, то есть у червя появляется путь и в новые, «чистые» сборки.
Кернс советует в первую очередь проверить файлы .claude/settings.json и .vscode/tasks.json на строки, которые разработчик не добавлял сам, причём не только в основной ветке, а во всех ветках репозитория. Все заражённые пакеты уже удалены из npm; компания SafeDep, которая занимается безопасностью open source, опубликовала полный список скомпрометированных пакетов с номерами версий, чтобы разработчики могли сверить его с тем, что запущено у них. Кернс призывает пересмотреть модель доверия целиком: оценить заново инструменты доверенной публикации вроде GitHub Actions и относиться к конфигурации, которая приходит из репозитория, как к исполняемому содержимому, потому что теперь это буквально так.
По словам Кернс, эта кампания нашла путь выполнения кода, который инструменты сканирования зависимостей не были настроены отслеживать, он находится ровно в тех инструментах, которые инженерные организации максимально быстро внедряли последние два года. Это первая кампания, которая заметила брешь и использовала её в таком масштабе. Она не последняя.
Ключевые факты
- 4 августа 2026 года исследователи обнаружили атаку: новый вариант червя Shai-Hulud под именем ChainDrop (дано Microsoft и другими) заразил 444 пакета npm от нескольких издателей, суммарно около 2 млрд скачиваний в месяц, включая базовые зависимости keyv, flat-cache и cache-manager.
- ChainDrop размножается через пересборку архивов в формате tarball, а не через коммиты в исходный код, поэтому проверка самого репозитория не покажет следов заражения.
- Второй вектор, вредоносные стартовые хуки в конфигурационных файлах репозитория: заражение может начаться просто от открытия заражённой ветки в VS Code или Claude Code, без установки заражённого пакета.
- Червь похищает npm-токены с полными правами записи, облачные ключи и другие секреты из shell-конфигов, переменных окружения и памяти, а при наличии GitHub-доступа сам коммитит вредоносный код в чужие репозитории через GitHub API.
- Все заражённые пакеты уже удалены из npm; SafeDep опубликовал список скомпрометированных пакетов с версиями, а разработчикам советуют проверить файлы .claude/settings.json и .vscode/tasks.json во всех ветках репозитория.
Почему это важно
ChainDrop ломает базовое допущение безопасности цепочки поставок открытого кода: что проверки исходного репозитория достаточно, чтобы обнаружить компрометацию. Червь заразил 444 пакета с суммарно около 2 млрд скачиваний в месяц, включая такие базовые зависимости, как keyv, flat-cache и cache-manager, и делает это способом, который стандартные сканеры зависимостей не отслеживают: через пересборку архивов в формате tarball и хуки в конфигурации репозитория, срабатывающие при открытии проекта в редакторе. Эбби Кернс, CEO ActiveState, называет это первой кампанией, которая нашла и использовала в промышленном масштабе брешь в инструментах, на внедрение которых индустрия потратила два года, и предупреждает: таких атак будет больше.
Кому это важно
В первую очередь, командам, использующим keyv, flat-cache, cache-manager или любые другие npm-зависимости из списка SafeDep; инженерам, отвечающим за CI/CD-конвейеры, куда npm встроен повсеместно и откуда червь может проникнуть в новые сборки через автоматическое подтягивание патч-обновлений; и всем, кто открывает сторонние или командные npm-репозитории в VS Code или Claude Code, само открытие заражённой ветки способно запустить кражу учётных данных без установки единого пакета.
Как это применить
По совету Кернс: проверить файлы .claude/settings.json и .vscode/tasks.json на строки, которые разработчик не добавлял сам, и не только в основной ветке, а во всех ветках репозитория. Сверить установленные пакеты и их версии со списком скомпрометированных, который опубликовала SafeDep. Учитывать, что все заражённые пакеты уже удалены из npm, но CI/CD-конвейеры могли успеть подтянуть их автоматически при пересборке до этого момента. На уровне процессов, заново оценить инструменты доверенной публикации вроде GitHub Actions и начать относиться к конфигурации, поступающей из репозитория, как к исполняемому содержимому, а не как к пассивным настройкам.
Можно ли доверять
Материал The Register (автор, Джоаб Джексон), не из юмористической рубрики издания: несмотря на репутацию The Register и отсылку к «Дюне» в названии червя, сама статья объясняет, что исследователи безопасности традиционно называют самовоспроизводящееся вредоносное ПО в честь литературных существ, это обычная практика именования, а не шутка. Ключевые цифры и механизм атаки подкреплены источниками: разбором Эбби Кернс, CEO ActiveState, и независимым списком скомпрометированных пакетов от SafeDep. При этом в статье нет ни точной оценки ущерба в деньгах, ни подтверждения, что похищенные учётные данные реально были использованы (только что они похищаются и передаются злоумышленникам), ни описания того, как ChainDrop впервые попадает на компьютер разработчика, эти пробелы стоит держать в уме.
Риски и подводные камни
Червь охотится именно за npm-токенами с полными правами записи и облачными ключами, так что жертва рискует не только собственными секретами, но и тем, что через её токен заразятся ещё не заражённые пакеты. Привычная защита «проверить изменения в репозитории» здесь не работает, потому что размножение идёт через пересобранные архивы tarball, а не через коммиты. Не спасает и правило «не устанавливать подозрительные пакеты»: заражение может произойти просто от открытия чужой ветки в VS Code или Claude Code. А поскольку npm глубоко встроен в CI/CD, чистая сегодня сборка может стать заражённой завтра без какого-либо действия команды, просто из-за автоматического подтягивания патч-версий.
«На самом деле эта кампания нашла путь выполнения кода, который инструменты сканирования зависимостей не были настроены отслеживать, он находится ровно в тех инструментах, которые инженерные организации максимально быстро внедряли последние два года. Это первая кампания, которая заметила брешь и использовала её в таком масштабе. Она не последняя.»
— Эбби Кернс, CEO ActiveState