Интернет

42 репозитория на GitHub готовили скрытую публикацию вредоносных npm-пакетов

JFrog сообщила о 42 сторонних репозиториях на GitHub, подготовленных к запуску вредоносного кода в рамках кампании testmetest. В них нашли загрузчики, позволяющие скрыто публиковать npm-пакеты, а также команды автозапуска, встроенные в конфигурации Claude Code, Cursor, Gemini CLI и VS Code. Заражение задумано не только через зависимости, но и через инструменты, которыми разработчик пользуется ежедневно.

Несколькими днями раньше о похожей угрозе писала SafeDep: речь шла о черве, который крадёт секреты и распространяется через пакеты и репозитории. На тот момент исследователи наблюдали его активность только на тестовых аккаунтах злоумышленника, и масштаб выглядел ограниченным. Находка JFrog эту картину меняет — подготовленных площадок оказалось несколько десятков.

Отдельная деталь касается механики установки. Один из способов запуска опирается на файл сборки нативного модуля binding.gyp, поэтому отсутствие install-скрипта в package.json больше не выглядит признаком безопасной установки. Позже появились варианты с нативной библиотекой Node.js, которую вызывает команда postinstall: код срабатывает в момент установки пакета, и проверка манифеста его не показывает.

Репозитории принадлежат разработчикам и организациям. Команды прописаны в конфигурациях инструментов и запускают файл .github/init.js: для Claude Code использовано событие начала сессии, для VS Code — задача при открытии папки. Вредоносный код может сработать ещё до того, как будут установлены зависимости, то есть привычная последовательность «сначала посмотреть, что тянет проект» здесь не спасает.

Загрузчики занимают около 13 МБ и не попадают в обычную поисковую выдачу GitHub. JFrog получила эти файлы через API деревьев и объектов Git — иначе они остались бы незаметными для тех, кто проверяет репозиторий глазами через веб-интерфейс. За десятью разными оболочками стоит один и тот же издатель пакетов.

Он ищет токены, умеет пользоваться доверенной публикацией npm через GitHub Actions и добавлять вредоносный postinstall в выпускаемый пакет. То есть цель — не только заразить машину, но и встроиться в дальнейшую цепочку поставки, чтобы заражённые сборки уходили уже от доверенного имени. Доверенная публикация npm привязывает выпуск к конкретному репозиторию и workflow.

Если злоумышленник получил возможность менять этот workflow, проверка происхождения пакета сама по себе не остановит выпуск подменённого содержимого. Отсюда практический вывод: проверку зависимостей стоит дополнять контролем изменений конфигурации среды разработки и процесса выпуска. Интерес к токенам в этой схеме не случаен.

Украденные ключи к облачным сервисам оборачиваются счетами жертв до $1 млн, как в случаях LLMjacking Кража ключей к облачному ИИ: счета жертв достигают $1 млн из-за LLMjacking, поэтому добыча учётных данных и доступов — самостоятельная цель атаки, а не побочный эффект. Для команд это означает, что периметр защиты сместился. Настройки IDE, файлы автозапуска агентов и описания CI-workflow стали такой же частью поверхности атаки, как lock-файлы и реестр пакетов, и именно туда кампания testmetest целится в первую очередь.

кибербезопасность разработка искусственный интеллект

Обсуждение

Комментариев пока нет.

Читайте также