Атака на npm: вредоносные пакеты маскировались под знакомые CLI-команды
12 августа 2026 года исследователи зафиксировали публикацию 21 вредоносного пакета в реестре npm. Злоумышленники не занимали свободные имена обычных зависимостей, а нацелились на поле bin в файле package.json — именно оно определяет, какие команды CLI устанавливаются вместе с пакетом. Такой подход позволил имитировать исполняемые команды, предоставляемые популярными пакетами с ограниченной областью видимости (scoped packages), связанными с Google и другими крупными проектами.
Механика атаки: эксплуатация поля bin
Пакеты с ограниченной областью видимости, например @angular/localize, могут предоставлять неограниченные бинарные файлы (команды CLI), такие как localize-extract и localize-translate. Эти имена команд могут быть зарегистрированы независимо как публичные пакеты npm без префикса области видимости. Актор использовал скрапинг метаданных реестра npm, чтобы выявить пакеты с областью видимости, извлечь их записи bin, удалить область видимости и проверить, зарегистрированы ли соответствующие имена автономных пакетов.
В результате 18 из 21 вредоносного имени совпали с подтверждёнными бинарными файлами в общедоступных пакетах. При этом ни одно из 18 выявленных автономных имён не было зарегистрировано до начала кампании.
Масштаб и цели атаки
Среди целей оказались бинарные файлы, связанные со следующими пакетами:
- @angular/localize
- google-ads-api-report-fetcher
- chromecast-webdriver-server
- @google/gemini-cli-a2a-server
- @google/chrome-enterprise-premium-mcp
- @googlemaps/code-assist-mcp
- @googlemaps/github-policy-bot
- @bazel/bazelisk
- koa-karma-proxy проекта Polymer
Опубликованные пакеты содержали минимальный postinstall-маяк. Это указывает на то, что основной целью атакующих было выполнение кода и сбор телеметрии, а не внедрение сложного полезного груза.
Риски и последствия
Данная техника создаёт риск случайной установки вредоносного пакета: разработчики или автоматизированные системы могут вызвать знакомое имя CLI, не осознавая, что оно разрешается в совершенно другой пакет. Особенно опасна ситуация, когда имя команды используется без указания области видимости — например, вместо @angular/localize вызывается просто localize-extract.
Как отмечается в отчёте, «этот путь атаки не защищён общими средствами защиты от путаницы зависимостей, такими как публикация пакетов с областью видимости, разрешающие списки реестров или привязка файлов блокировки, когда вредоносный пакет намеренно назван в честь исполняемого файла, а не самой зависимости».
Иными словами, традиционные меры против подмены зависимостей (dependency confusion) не срабатывают, если злоумышленник регистрирует имя, совпадающее с бинарным файлом, а не с именем исходного пакета.
Рекомендации экспертов
Для снижения рисков организациям рекомендуется:
- Провести инвентаризацию записей bin в рамках доверенных областей видимости, используемых в проектах.
- Отслеживать наличие отдельных пакетов, чьи имена совпадают с командами CLI из доверенных источников.
- Рассматривать неожиданные пакеты, предоставляющие знакомые бинарные файлы CLI, как потенциальные угрозы цепочке поставок.
- Внедрить дополнительные проверки при установке зависимостей, особенно если имя пакета совпадает с известной командой без области видимости.
Инцидент подчёркивает важность внимательного отношения не только к именам пакетов, но и к именам исполняемых файлов, которые они предоставляют. Атаки на цепочку поставок продолжают эволюционировать, и защита должна учитывать все возможные векторы.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



