
Исследователи 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, то проверка происхождения пакета сама по себе не остановит выпуск подменённого содержимого. Поэтому проверку зависимостей стоит дополнять контролем изменений конфигурации среды разработки и процесса выпуска.
Командам, которые могли столкнуться с кампанией, стоит:
-
Проверить дерево файлов репозитория на наличие файлов
.github/init.jsи изменения конфигураций перечисленных инструментов. Одного поиска по коду GitHub для этой проверки недостаточно. -
Проверить историю workflow и ветки вида
chore/ci-*, особенно изменения шагов публикации и доступа к секретам. -
При обнаружении npm-червя сначала изолировать машину и обезвредить его механизмы закрепления, затем менять доступные ему секреты с чистой системы.
База CodeScoring содержит сведения о вредоносности пакетов кампании testmetest. Для блокировки новых загрузок известных вредоносных версий организациям с настроенным модулем CodeScoring.OSA достаточно включить блокирующую политику с условием «Зависимость опасна».
Источник: habr.com