Цепочка поставок npm: действительные сертификаты, украденные аккаунты
Источник: VentureBeat · Louis Columbus
19 мая 633 вредоносных пакета npm прошли проверку подлинности Sigstore. Они были одобрены системой, поскольку злоумышленник сгенерировал действительные сертификаты подписи из взломанной учетной записи мейнтейнера.
Sigstore сработал ровно так, как и задумывалось: он подтвердил, что пакет был собран в среде CI, подтвердил выдачу действительного сертификата и зафиксировал всё в журнале прозрачности. Чего он не может сделать, так это определить, санкционировало ли публикацию лицо, владеющее учетными данными, — и этот пробел превратил последний автоматизированный сигнал доверия в npm в камуфляж.
Сутками ранее компания StepSecurity задокументировала атаку на расширение Nx Console для VS Code — широко используемый инструмент разработки с более чем 2,2 миллионами загрузок за все время. Версия 18.95.0 была опубликована с использованием украденных учетных данных 18 мая и оставалась доступной менее 40 минут, однако внутренняя телеметрия Nx показала примерно 6 000 активаций за этот период (большинство через автообновление) по сравнению с всего 28 официальными загрузками. Полезная нагрузка собирала файлы конфигурации Claude Code, ключи AWS, токены GitHub, токены npm, содержимое хранилищ 1Password и токены учетных записей служб Kubernetes.
Кампания Mini Shai-Hulud, приписываемая несколькими исследователями финансово мотивированной хакерской группе TeamPCP, поразила реестр npm 19 мая в 01:39 UTC. Endor Labs обнаружила первую волну, когда два давно не обновлявшихся пакета, jest-canvas-mock и size-sensor (их не обновляли более трех лет), опубликовали новые версии, содержащие обфусцированный скрипт Bun размером 498 КБ. Появление внезапной версии с зависимостями в виде сырых хешей коммитов GitHub само по себе является индикатором компрометации, но только если инструменты мониторинга задействованы.
К 02:06 UTC червь распространился по экосистеме визуализации данных @antv и десяткам пакетов без области видимости, включая echarts-for-react (~1,1 млн загрузок в неделю). Socket увеличила общее число скомпрометированных версий до 639 в 323 уникальных пакетах в рамках этой волны. За весь жизненный цикл кампании Socket зафиксировала 1 055 вредоносных версий в 502 пакетах, охватывающих npm, PyPI и Composer.
StepSecurity подтвердила, что полезная нагрузка содержала полную интеграцию с Sigstore. Злоумышленник не просто украл учетные данные — он мог подписывать и публиковать нижестоящие (downstream) пакеты npm, которые имели действительные аттестации происхождения.
Эти два инцидента не единичны. Исследовательские группы из Endor Labs, Socket, StepSecurity, Adversa AI, Университета Джонса Хопкинса, Microsoft MSRC и LayerX независимо друг от друга доказали, что модель верификации инструментов разработки сломана, и ни один фреймворк вендоров не проводит аудит всех векторов атак, которые дали сбой.
Семь векторов атак дали сбой за 48 часов в период с 18 по 19 мая — подделка происхождения в npm, кража учетных данных расширения для VS Code, автозапуск серверов MCP, инъекция промптов агентам CI/CD, выполнение кода в агентских фреймворках, утечка хранилищ учетных данных IDE и утечка данных через теневой ИИ. Ниже приведена таблица аудита, сопоставляющая их все.
Модель верификации сломана во всех четырех основных ИИ-клиентах для кодинга
Компания Adversa AI сообщила об уязвимости TrustFall 7 мая, продемонстрировав, что Claude Code, Gemini CLI, Cursor CLI и Copilot CLI автоматически запускают определенные в проекте MCP-серверы в момент, когда разработчик принимает запрос на доверие к папке. Все четыре инструмента по умолчанию выбирают варианты «Yes» («Да») или «Trust» («Доверять»). Одно нажатие клавиши порождает процесс без песочницы с полными привилегиями разработчика.
MCP-сервер запускается с достаточными привилегиями для чтения сохраненных секретов и исходного кода из других проектов. На CI-раннерах, использующих GitHub Action для Claude Code в фоновом режиме (headless mode), диалог доверия вообще не отображается. Атака выполняется без какого-либо участия человека.
Исследователи из Университета Джонса Хопкинса Аонан Гуан, Чжэньюй Лю и Гэвин Чжун опубликовали доклад «Comment and Control», доказав, что вредоносная инструкция в названии пул-реквеста на GitHub заставила инструмент Claude Code Security Review опубликовать собственный ключ API в качестве комментария. Такая же атака сработала на Google Gemini CLI Action и GitHub Copilot Agent. Компания Anthropic оценила эту уязвимость в 9,4 балла CVSS (критический уровень) через программу HackerOne.
Microsoft MSRC сообщила о двух критических уязвимостях в Semantic Kernel 7 мая. Первая перенаправляет контролируемые злоумышленником поля векторного хранилища в вызов Python eval(); вторая раскрывает метод загрузки файлов на стороне хоста как вызываемую функцию ядра — это означает, что один зараженный документ во векторном хранилище запускает процесс на хосте.
Исследователи безопасности из LayerX отдельно продемонстрировали, что Cursor хранит ключи API и токены сеансов в незащищенном хранилище, а это значит, что любое расширение браузера может получить доступ к учетным данным разработчика без повышенных привилегий.
Злоумышленники, охотящиеся за этими учетными данными, удвоили темп операций
В отчете Verizon за 2026 год обследовании утечек данных (DBIR), опубликованном 19 мая, отмечается, что 67% сотрудников используют ИИ-сервисы с личных (некорпоративных) аккаунтов на рабочих устройствах. Теневой ИИ в настоящее время является третьим по распространенности непреднамеренным действием инсайдеров в наборах данных DLP. Исходный код занимает первое место среди всех типов данных, передаваемых на неавторизованные ИИ-платформы, — это ровно тот же тип активов, на который была нацелена кампания с npm-червем.
В отчете Crowdstrike за 2026 год об актуальных киберугрозах в сфере финансовых услуг, опубликованном 14 мая, задокументированы действия злоумышленников, активно охотящихся за теми типами учетных данных, которые собирают данные атаки.
В IV квартале 2025 года группировка STARDUST CHOLLIMA утроила темпы своих операций против финансовых организаций. Специалисты CrowdStrike задокументировали использование группой сгенерированных ИИ профилей рекрутеров в LinkedIn и Telegram, рассылку вредоносных кодинг-задач, замаскированных под технические интервью, а также проведение фальшивых видеозвонков с использованием синтезированных сред. Целями злоумышленников являются GitHub PAT (персональные токены доступа), токены npm, ключи AWS и секреты CI/CD. Утечка через теневой ИИ, указанная в строке 7 таблицы, является той самой дверью, через которую они входят.
Таблица аудита украденных идентификационных данных в инструментах разработки
Ни один вендорский фреймворк в настоящее время не охватывает все семь векторов. Эта таблица сопоставляет каждый вектор с исследованием, которое его обнаружило, с тем, что ваш стек не в состоянии увидеть, и с мерами аудита, которые необходимо предпринять до следующего продления контракта с вендором.
|
Вектор атаки |
Кем обнаружено |
Какая проверка дала сбой |
Чего не видит ваш стек |
Меры аудита |
|
1. Подделка происхождения в npm |
Endor Labs, Socket (19 мая) |
Сертификаты Sigstore, сгенерированные из украденных токенов OIDC, проходят автоматическую проверку |
EDR и SAST не проверяют, действительно ли идентичность CI, подписавшая пакет, санкционировала публикацию |
Требовать двухстороннего одобрения при публикации для пакетов с более чем 10 000 загрузок в неделю. Не рассматривать зеленый значок Sigstore как доказательство легитимности |
|
2. Кража учетных данных расширения для VS Code |
StepSecurity (18 мая) |
Маркетплейс VS Code принял вредоносную версию расширения, опубликованную с украденным токеном контрибьютора |
Автообновления расширений обходят средства обнаружения на конечных точках. Окно маркетплейса: с 12:30 до 12:48 UTC; общая зона риска (включая Open VSX): с 12:30 до 13:09 UTC |
Внедрить политику минимального возраста для обновлений расширений. Зафиксировать версии критически важных расширений. Провести аудит всех расширений, имеющих доступ к терминалу или API файловой системы |
|
3. Автозапуск серверов MCP |
Adversa AI, TrustFall (7 мая) |
Диалоги доверия во всех четырех CLI по умолчанию выбирают «Yes/Trust» без перечисления того, какие исполняемые файлы будут запущены |
EDR отслеживает поведение процессов, а не то, что LLM приказывает делать MCP-серверу. WAF проверяет HTTP-полезную нагрузку, а не намерения при вызове инструментов |
Отключить автоматическое одобрение проектных MCP-серверов в Claude Code, Gemini CLI, Cursor CLI и Copilot CLI. Блокировать .mcp.json в CI-пайплайнах, если они явно не внесены в белый список |
|
4. Инъекция промптов агентам CI/CD |
Университет Джонса Хопкинса, Comment and Control (апрель 2026 г.) |
Ворфлоу GitHub Actions с использованием pull_request_target внедряют секреты в среды раннеров, которые ИИ-агенты обрабатывают как инструкции |
Журналы SIEM показывают вызов API от легитимного действия GitHub Action. Сам вызов и является атакой. Аномальная сетевая сигнатура отсутствует |
Мигрировать воркфлоу проверки кода ИИ на триггер pull_request. Провести аудит всех воркфлоу, использующих pull_request_target с доступом к секретам для интеграций с ИИ-агентами |
|
5. Выполнение кода в агентских фреймворках |
Microsoft MSRC (7 мая) |
Python SDK для Semantic Kernel перенаправлял поля фильтров векторного хранилища в eval(). .NET SDK предоставлял запись файлов на хосте как вызываемую функцию ядра |
Межсетевые экраны приложений проверяют входящие данные. Они не проверяют, как фреймворк оркестрации внутренне анализирует эти полезные данные |
Обновить Python SDK Semantic Kernel до версии 1.39.4, а .NET SDK — до версии 1.71.0. Провести аудит всех агентских фреймворков на предмет функций, помеченных как вызываемые моделью и имеющих доступ к файловой системе хоста или оболочке |
|
6. Утечка хранилища учетных данных IDE |
LayerX (апрель 2026 г.) |
Cursor хранит ключи API и токены сеансов в незащищенном хранилище, доступном любому установленному расширению браузера |
DLP отслеживает данные в транзите. Сохраненные учетные данные Cursor невидимы для DLP, так как событие выгрузки (exfiltration) не фиксируется до тех пор, пока расширение не извлечет их |
Провести аудит инструментов разработчика на предмет практик хранения учетных данных. Требовать использования защищенного хранения (связка ключей ОС, зашифрованные хранилища учетных данных) для всех конфигураций ИИ-инструментов кодинга |
|
7. Утечка данных через теневой ИИ |
Verizon 2026 DBIR (19 мая) |
67% сотрудников используют ИИ-сервисы с не корпоративных аккаунтов на рабочих устройствах. Исходный код является основным типом передаваемых данных |
Политики CASB охватывают санкционированный SaaS. Некорпоративные аккаунты ИИ на рабочих устройствах полностью находятся вне зоны видимости CASB |
Внедрить средства управления ИИ на уровне браузера, которые отслеживают использование некорпоративного ИИ на рабочих устройствах. Провести инвентаризацию ИИ-расширений для браузеров по всей организации |
План действий для директора по безопасности
Директорам по безопасности стоит сопоставить эту таблицу с текущими контрактами с вендорами до завершения продления во II квартале, спросив каждого вендора, какие из семи векторов покрывает их продукт, и рассматривая отсутствие ответов как карту уязвимостей.
Любые учетные данные, доступные с машины разработчика или CI-раннера, которые установили затронутые пакеты npm в период с 01:39 до 02:18 UTC 19 мая, следует считать скомпрометированными. Это включает токены GitHub PAT, токены npm, ключи доступа AWS, токены учетных записей служб Kubernetes, токены HashiCorp Vault, ключи SSH и содержимое хранилищ 1Password.
Интеграции ИИ-агентов кодинга, работающие в конвейерах CI/CD с воркфлоу pull_request_target, заслуживают пристального внимания. Каждая из них представляет собой вектор инъекции промптов, который обрабатывает комментарии к пул-реквестам как инструкции для агента.
Командам по закупкам, оценивающим инструменты ИИ-кодинга, стоит рассмотреть добавление критерия устойчивости к краже идентификационных данных при оценке вендоров. Стоит задать вопрос: может ли вендор продемонстрировать, как его инструмент отличает публикацию легитимного мейнтейнера от действий злоумышленника, использующего компрометированные учетные данные? Если нет, то этот инструмент не является уровнем верификации.
Цепочка поставок инструментов разработки столкнулась с той же проблемой, что и IAM (управление доступом) десять лет назад: учетные данные доказывают, за кого вы себя выдаете, а не кто вы есть на самом деле. У управления доступом было 10 лет форы на внедрение компенсирующих мер до того, как группы под управлением государств превратили кражу учетных данных в промышленный процесс. Экосистема инструментов ИИ-кодинга только запускает этот отсчет.



