Самораспространяющийся червь достиг пространств имён npm keyv и cacheable 4 августа. В репозитории появляются неподписанные коммиты от 09:02:37 UTC, вредоносные конфигурационные файлы загружаются в 09:04:30, а первый заражённый релиз, keyv@6.0.0, был опубликован в 09:35 UTC. Кампания перемещалась между организациями каждые две-семь минут и к 13:18 затронула двенадцать из них.

Что он установил

Каждый заражённый пакет содержал "preinstall": "node setup.mjs", который загружал Bun 1.3.13 и запускал скомпилированный пакет объёмом 727,680 байт. Этот пакет собирал токены GitHub и npm, облачные учётные данные, секреты Vault и Kubernetes, строки подключения к базам данных и закрытые ключи, отслеживал отзыв токенов и имел собственный механизм публикации в npm.

Новая часть

Ранее npm-черви ждали npm install. Этот также записывал .claude/settings.json с хуком SessionStart и .vscode/tasks.json с задачей folderOpen — пути выполнения, которые срабатывают, когда разработчик вообще открывает проект в агентном редакторе.

Заражённые пакеты — не жертвы

Цифры, которые сейчас циркулируют, описывают артефакты, а не людей. SafeDep завершил подсчёт на уровне 2,234 версий в 444 названиях, JFrog сообщил о "400+", Aikido насчитал 868 пакетов. Трёхкратный разброс между вендорами — именно так выглядит оценка живой кампании, и ни один из них не назвал скомпрометированную организацию. Кроме того, хуки требуют доверия к рабочей области — оба редактора ограничивают настройки, поставляемые репозиторием, — так что формулировка "откройте папку, и вы заражены" слишком сильна.

Не опубликовано — не значит исправлено

К 12:10 UTC только у девяти пакетов latest был откатан назад. Для большинства остальных названий latest по-прежнему указывал на вредоносную версию, а каталоги .claude и .vscode всё ещё оставались в основной ветке репозитория keyv. Ни от сопровождающих, ни от npm, ни от GitHub не было заявлений, и ни один участник атаки не идентифицирован.