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