Внимание, айтишники! Сегодня у нас просто праздник какой-то, но праздник для хакеров, а не для нас с вами. Помните, как все радовались Sigstore? Ну, так вот, его обошли, как стоячего.
По данным VentureBeat, 19 мая аж 633 вредоносные версии npm-пакетов успешно прошли проверку Sigstore. Как? Да очень просто: злоумышленники получили доступ к валидным сертификатам скомпрометированных аккаунтов мейнтейнеров. Sigstore отработал как надо: проверил, что пакет собран в CI-среде, подтвердил валидный сертификат и все записал в лог. Но вот что он не может проверить, так это, что человек, держащий ключи, действительно разрешил публикацию. И эта дыра превратила последнюю автоматическую гарантию доверия в npm в просто камуфляж.
Днем ранее StepSecurity обнаружили атаку на расширение Nx Console для VS Code, которым пользуются больше 2,2 миллионов разработчиков. Версия 18.95.0 была опубликована с использованием украденных учетных данных 18 мая и провисела всего 40 минут. Но, по внутренней телеметрии Nx, за это время она успела активироваться около 6000 раз (в основном через автообновление), в то время как официальных загрузок было всего 28. Эта версия собирала конфигурационные файлы Claude Code, AWS-ключи, GitHub-токены, npm-токены, содержимое хранилища 1Password и токены сервисных аккаунтов Kubernetes. Вот это комбо!
Кампания Mini Shai-Hulud, которую несколько исследователей приписывают финансово мотивированному TeamPCP, ударила по npm-реестру 19 мая. Endor Labs обнаружили первую волну, когда два "спящих" пакета, jest-canvas-mock и size-sensor, выпустили новые версии с обфусцированным Bun-скриптом размером 498 КБ. Эти пакеты не обновлялись больше трех лет, так что внезапное обновление с зависимостями в виде сырых хешей коммитов GitHub должно было стать сигналом тревоги. Но, видимо, не для всех.
К 02:06 UTC червь распространился по экосистеме визуализации данных @antv и десяткам пакетов без областей видимости, включая echarts-for-react (около 1,1 миллиона еженедельных загрузок). Socket поднял общее количество скомпрометированных версий до 639 по 323 уникальным пакетам в этой волне. За все время кампании Socket отследил 1055 вредоносных версий по 502 пакетам в npm, PyPI и Composer.
StepSecurity подтвердили, что вредоносный код содержал полную интеграцию с Sigstore. То есть, злоумышленники не просто украли учетные данные, они могли подписывать и публиковать npm-пакеты с валидными аттестациями происхождения.
И это еще не все! Исследовательские группы из Endor Labs, Socket, StepSecurity, Adversa AI, Johns Hopkins, Microsoft MSRC и LayerX независимо доказали, что модель верификации инструментов разработчика сломана, и ни один вендор не аудирует все поверхности атаки.
За 48 часов между 18 и 19 мая провалились целых семь поверхностей атаки: подделка происхождения npm, кража учетных данных расширений VS Code, автозапуск MCP-сервера, инъекция в CI/CD-агента, исполнение кода в фреймворке агента, раскрытие учетных данных в IDE и раскрытие теневых AI-данных.
Модель верификации сломана во всех четырех основных AI-кодинг CLIs. Adversa AI 7 мая раскрыли TrustFall, показав, что Claude Code, Gemini CLI, Cursor CLI и Copilot CLI все автоматически запускают MCP-серверы, определенные в проекте, как только разработчик принимает запрос на доверие к папке. Все четыре по умолчанию выбирают "Да" или "Доверять". Одно нажатие клавиши запускает процесс с полными привилегиями разработчика.
MCP-сервер запускается с достаточными привилегиями для чтения сохраненных секретов и исходного кода из других проектов. В CI-раннерах, использующих GitHub Action Claude Code в headless-режиме, диалог доверия вообще не отображается. Атака выполняется без какого-либо взаимодействия с человеком.
Исследователи из Johns Hopkins опубликовали работу "Comment and Control", доказав, что вредоносная инструкция в заголовке pull request в GitHub заставила Claude Code Security Review опубликовать свой собственный API-ключ в качестве комментария. Та же атака сработала и на Gemini CLI Action от Google и Copilot Agent от GitHub. Anthropic оценили уязвимость CVSS 9.4 Critical через свою программу HackerOne.
Microsoft MSRC 7 мая раскрыли две критические уязвимости Semantic Kernel. Одна направляет контролируемые злоумышленником поля векторного хранилища в вызов Python eval(), другая предоставляет метод загрузки файлов на стороне хоста в качестве вызываемой функции ядра. Это означает, что один зараженный документ в векторном хранилище запускает процесс на хосте.
Исследователи безопасности из LayerX отдельно продемонстрировали, что Cursor хранит API-ключи и токены сессий в незащищенном хранилище, что означает, что любое расширение браузера может получить доступ к учетным данным разработчика без повышенных разрешений.
В общем, веселье только начинается. Похоже, что безопасники не поспевают за креативностью хакеров. И это, друзья, только начало. Готовьтесь к новым увлекательным приключениям в мире кибербезопасности!