В 42 GitHub-репозиториях нашли код для скрытой публикации вредоносных npm-пакетов
Исследователи JFrog обнаружили 42 сторонних GitHub-репозитория, подготовленных к запуску вредоносного кода в кампании testmetest. В них внедрили загрузчики скрытого издателя npm-пакетов и команды автозапуска для Claude Code, Cursor, Gemini CLI и VS Code.
Команды в конфигурациях инструментов запускают файл.github/init.js: например, для Claude Code использовано событие начала сессии, а для VS Code — задача при открытии папки. Вредоносный код может запуститься ещё до установки зависимостей. Загрузчики занимают около 13 МБ и не попадают в обычную поисковую выдачу GitHub — JFrog получила файлы через API деревьев и объектов Git.
За десятью разными оболочками оказался одинаковый издатель пакетов: он ищет токены, умеет использовать доверенную публикацию npm через GitHub Actions и добавлять вредоносный postinstall в выпускаемый пакет. Проверка происхождения пакета сама по себе не остановит выпуск подменённого содержимого, если злоумышленник получил возможность менять workflow, поэтому проверку зависимостей стоит дополнять контролем изменений конфигурации среды разработки и процесса выпуска.
Командам рекомендуют проверить дерево файлов репозитория на наличие.github/init.js и изменения конфигураций перечисленных инструментов — одного поиска по коду GitHub для этого недостаточно. Также стоит проверить историю workflow и ветки вида chore/ci-*, особенно изменения шагов публикации и доступа к секретам. При обнаружении npm-червя сначала нужно изолировать машину и обезвредить его механизмы закрепления, а затем менять доступные ему секреты с чистой системы.
Ранее SafeDep сообщала об обнаружении червя, который крадёт секреты и распространяется через пакеты и репозитории. Один из способов запуска использует файл сборки нативного модуля binding.gyp, поэтому отсутствие install-скрипта в package.json не гарантирует безопасную установку; позднее появились варианты с нативной библиотекой Node.js, которую вызывает команда postinstall.