Новая версия вредоноса ChainDrop инфицировала 444 пакета в реестре npm, которые в совокупности загружаются примерно два миллиарда раз за месяц. Пострадали востребованные компоненты keyv, flat-cache и cache-manager. Распространение происходит нестандартным путём: вредоносный код попадает в опубликованный пакет, а исходные файлы на GitHub остаются неповреждёнными. Дополнительное заражение может произойти через параметры VS Code и Claude Code, что позволяет атакующим инфицировать машину разработчика при открытии заражённой ветки.

Первый червь под названием Shai-Hulud обнаружили в сентябре 2025 года, названный в честь чудовищных существ из романа Фрэнка Герберта «Дюна». Усовершенствованная модификация ChainDrop выявлена в августе 2026 года. Принцип распространения существенно изменился: вместо простого внедрения кода через коммиты в репозиторий, новый червь использует npm-архивы, похищенные ключи доступа и конфигурацию инструментов разработчиков.

Масштабную атаку зафиксировали 4 августа. На тот период инфекция затронула 444 пакета от множественных разработчиков. Многие из них являются транзитивными зависимостями, установка которых происходит автоматически вместе с другими пакетами. Следовательно, заражённый компонент может находиться глубоко в иерархии зависимостей, при этом автор приложения не устанавливал его напрямую и может даже не подозревать о его наличии.

Классическое выполнение npm install остаётся одним из каналов запуска вредоноса, но ChainDrop выходит за эти рамки. Вредонос вставляет команды автоматического выполнения в служебные файлы репозитория. В частности, используются .claude/settings.json и .vscode/tasks.json. Эти файлы контролируют функционирование Claude Code и задач в Visual Studio Code. При добавлении команды с вредоносным скриптом открытие такой ветки проекта запустит следующий этап атаки без необходимости в ручном запуске инфицированной программы.

Проверка исходного кода также не гарантирует выявление взлома. ChainDrop может распространяться через tar-архивы, используемые npm для передачи опубликованных пакетов. Данные в архиве могут различаться от содержимого в связанном Git-репозитории. Поэтому злоумышленник может внедрить код без оставления вредоносных коммитов в истории проекта.

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

Наибольшую опасность представляют npm-ключи с возможностью публикации новых выпусков пакетов. Овладев такого рода ключом, ChainDrop определяет все пакеты, доступные своему владельцу, и загружает их tar-архивы прямо из npm. На этом этапе Git не используется.

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

Одновременно ChainDrop разыскивает учётные данные GitHub. При обнаружении подходящего ключа вредонос запрашивает GitHub API, получает перечень доступных репозиториев и веток, а затем добавляет туда вредоносную конфигурацию для средств разработки.

Инфицированные .claude/settings.json и .vscode/tasks.json превращают репозиторий в дополнительный вектор распространения. Когда иной разработчик открывает подготовленную ветку в Claude Code или Visual Studio Code, фоновая операция может запустить процесс сбора данных на новом ПК. Похищенный npm-ключ предоставляет доступ к дополнительным пакетам, а учётные данные GitHub позволяют внедрить настройки в другие репозитории.

Результатом является двусторонняя распространение ChainDrop. Через npm вредонос инфицирует опубликованные пакеты, не модифицируя исходный репозиторий. Через GitHub он добавляет команды выполнения в служебные файлы веток. Оба способа обеспечивают непрерывную цепь заражений после кражи полномочий.

Увеличенный риск связан с системами автоматической сборки CI/CD. Большинство проектов позволяют загружать обновления зависимостей во время компиляции. Если инфицированная версия соответствует диапазону версий в проекте, система сборки может скачать её автоматически. Разработчику не требуется вручную менять код или самостоятельно устанавливать обновление пакета.

После выявления атаки заражённые выпуски быстро удалили из npm. Однако требуется проверять не только названия библиотек. Требуется сравнивать версии установленных компонентов с реестром заражённых выпусков, так как инфекция коснулась определённых версий. Полный список поражённых пакетов и номеров выпусков предоставила компания SafeDep.

В случае предположения о компрометации рекомендуется искать необычные .claude/settings.json и .vscode/tasks.json, особенно если сотрудники не создавали их намеренно. Проверка одной центральной ветки недостаточна. Вредоносные параметры могли попасть в любую ветку, доступную через скомпрометированные полномочия GitHub.

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

Кампания также переосмысляет требования к контролю служебных конфигов в репозиториях. Параметры IDE способны запускать операции, поэтому их нельзя расценивать как невинные настройки внешнего вида. .vscode/tasks.json, .claude/settings.json и другие конфиги с возможностью выполнения операций требуют такого же анализа, как скрипты компиляции и остальные компоненты, выполняющие программный код.

Особое внимание необходимо уделить процессам развёртывания пакетов. Применение надёжной публикации с помощью GitHub Actions позволяет уменьшить зависимость от постоянных npm-токенов с расширенными разрешениями. ChainDrop рассчитывает на секреты, которые можно похитить единовременно, а затем применять для трансформации множественных пакетов.

Основной недостаток ChainDrop состоит в расхождении между тем, что находится в исходном репозитории, и тем, что фактически попадает из npm. Анализ GitHub уже не обеспечивает гарантию, что загруженный архив включает те же компоненты. В кампании от 4 августа атакующие объединили эту возможность с автоматическим запуском параметров VS Code и Claude Code и смогли заразить 444 пакета, не полагаясь на классический метод внедрения вредоносных коммитов.