Сложности в безопасности: уязвимости инструментов разработчика подрывают доверие к ИИ-кодированию

Сложности в безопасности: уязвимости инструментов разработчика подрывают доверие к ИИ-кодированию

19 мая 2024 года было зафиксировано, что 633 вредоносные версии npm-пакетов прошли верификацию происхождения Sigstore. Система одобрила их, так как злоумышленник с помощью скомпрометированной учетной записи разработчика смог создать действительные сертификаты подписи. Sigstore сработал в точном соответствии со своим дизайном: он подтвердил, что пакет был собран в среде непрерывной интеграции (CI), выдал действительный сертификат и зарегистрировал все данные в журнале прозрачности. Однако система не может определить, был ли владелец учетных данных уполномочен на публикацию пакета, и этот пробел превратил последний автоматизированный сигнал доверия в npm в инструмент маскировки.

Волна атак: от VS Code до экосистем пакетов

За день до этого, 18 мая, компания StepSecurity задокументировала атаку на расширение Nx Console для среды разработки Visual Studio Code (VS Code), популярный инструмент разработчика, который был установлен более 2,2 миллиона раз. Версия 18.95.0 была опубликована с использованием украденных учетных данных и оставалась активной менее 40 минут. Тем не менее, внутренняя телеметрия Nx показала около 6 тысяч активаций за этот период, большинство из которых произошло через автоматические обновления, по сравнению с всего 28 официальными загрузками. Вредоносная нагрузка собирала файлы конфигурации Claude Code, ключи доступа AWS (Amazon Web Services), токены GitHub, токены npm, содержимое хранилищ 1Password и токены сервисных учетных записей Kubernetes.

Кампания "Mini Shai-Hulud", которую несколько исследователей приписывают финансово мотивированному киберпреступнику под именем TeamPCP, обрушилась на репозиторий npm в 01:39 по всемирному координированному времени (UTC) 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 (репозиторий Python-пакетов) и Composer (менеджер зависимостей PHP). StepSecurity подтвердила, что вредоносная нагрузка включала полную интеграцию с Sigstore. Злоумышленник не просто украл учетные данные; он смог подписывать и публиковать последующие npm-пакеты, которые имели действительные подтверждения происхождения.

Неединичные инциденты и сломленная модель верификации

Эти два инцидента не являются изолированными случаями. Исследовательские группы из Endor Labs, Socket, StepSecurity, Adversa AI, Университета Джонса Хопкинса, Microsoft MSRC и LayerX независимо друг от друга доказали, что модель верификации инструментов разработчика несовершенна, и ни один из фреймворков поставщиков не проверяет все уязвимости, которые привели к сбоям. За 48 часов между 18 и 19 мая было зафиксировано семь основных уязвимостей: подделка происхождения npm-пакетов, кража учетных данных расширений VS Code, автоматический запуск MCP-серверов, инъекция запросов в агентов CI/CD, выполнение кода фреймворками агентов, утечка учетных данных из хранилищ IDE и утечка данных через "теневой ИИ".

Уязвимости в CLI-инструментах для ИИ-кодирования

Модель верификации нарушена во всех четырех основных интерфейсах командной строки (CLI) для ИИ-кодирования.

7 мая Adversa AI раскрыла уязвимость TrustFall, продемонстрировав, что Claude Code, Gemini CLI, Cursor CLI и Copilot CLI автоматически запускают определенные проектом MCP-серверы (серверы метапрограммирования) в тот момент, когда разработчик одобряет запрос на доверие к папке. Все четыре инструмента по умолчанию выбирают "Да" или "Доверять". Одно нажатие клавиши запускает незащищенный процесс с полными привилегиями разработчика. MCP-сервер работает с достаточными привилегиями для чтения хранимых секретов и исходного кода из других проектов. На CI-раннерах (исполнителях непрерывной интеграции), использующих GitHub Action для Claude Code в безголовом режиме, диалог доверия не отображается, и атака выполняется без участия человека.

Исследователи из Университета Джонса Хопкинса Аонань Гуань, Чжэнъюй Лю и Гэвин Чжун опубликовали работу "Комментарий и контроль", доказав, что вредоносная инструкция в заголовке запроса на слияние (pull request) GitHub приводила к тому, что Claude Code Security Review публиковал собственный ключ API в виде комментария. Аналогичная атака работала на Gemini CLI Action от Google и Copilot Agent от GitHub. Компания Anthropic оценила эту уязвимость в 9,4 балла по шкале CVSS (Critical) в рамках своей программы HackerOne.

7 мая Microsoft MSRC сообщила о двух критических уязвимостях в Semantic Kernel. Одна из них направляла контролируемые злоумышленником поля фильтрации векторного хранилища в вызов функции `eval()` в Python; другая раскрывала метод загрузки файлов на стороне хоста как вызываемую функцию ядра. Это означает, что один зараженный документ в векторном хранилище мог запустить процесс на хосте.

Исследователи безопасности из LayerX отдельно продемонстрировали, что Cursor хранит ключи API и сессионные токены в незащищенном хранилище, что позволяет любому установленному расширению браузера получать доступ к учетным данным разработчика без повышенных привилегий.

Удвоенная активность злоумышленников и "теневой ИИ"

Злоумышленники, охотящиеся за этими учетными данными, удвоили свою операционную активность. Отчет Verizon 2026 Data Breach Investigations, опубликованный 19 мая, показал, что 67% сотрудников используют ИИ-сервисы с личных учетных записей на корпоративных устройствах. "Теневой ИИ" (использование несанкционированных ИИ-инструментов) теперь является третьим по распространенности незлонамеренным действием инсайдеров в наборах данных DLP (систем предотвращения утечек данных). Исходный код возглавляет список типов данных, отправляемых на неавторизованные ИИ-платформы — тот же класс активов, на который была нацелена кампания npm-червя.

Отчет CrowdStrike 2026 Financial Services Threat Landscape, опубликованный 14 мая, документирует противников, активно охотящихся за типами учетных данных, которые собирают эти атаки. Группа STARDUST CHOLLIMA утроила свою операционную активность против финансовых организаций в четвертом квартале 2025 года. CrowdStrike задокументировала использование группой сгенерированных ИИ образов рекрутеров в LinkedIn и Telegram, рассылку вредоносных задач по программированию, выглядящих как технические оценки, и проведение фальшивых видеозвонков с использованием синтетических сред. Целями атак являются персональные токены доступа GitHub (PAT), токены npm, ключи доступа AWS и секреты CI/CD (непрерывной интеграции/непрерывного развертывания). Уязвимость "теневого ИИ", упомянутая выше, является дверью, через которую они проникают.

Аудит уязвимостей в инструментах разработчика, связанных с кражей личности

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

  • 1. Подделка происхождения npm-пакетов

    Обнаружено: Endor Labs, Socket (19 мая)

    Что не сработало в верификации: Сертификаты Sigstore, сгенерированные из украденных токенов OIDC (OpenID Connect), проходят автоматическую верификацию.

    Что ваш стек не видит: EDR (обнаружение и реагирование на конечных точках) и SAST (статический анализ безопасности приложений) не проверяют, уполномочена ли учетная запись CI, подписавшая пакет, на его публикацию.

    Рекомендуемые действия: Требуйте двухстороннего одобрения перед публикацией пакетов с более чем 10 тысячами загрузок в неделю. Не считайте "зеленый значок" Sigstore доказательством легитимности.

  • 2. Кража учетных данных расширений VS Code

    Обнаружено: StepSecurity (18 мая)

    Что не сработало в верификации: VS Code Marketplace принял вредоносную версию расширения, опубликованную с украденным токеном участника.

    Что ваш стек не видит: Автоматические обновления расширений обходят обнаружение на конечных точках. Окно уязвимости в Marketplace: с 12:30 до 12:48 UTC; общая длительность уязвимости (включая Open VSX): с 12:30 до 13:09 UTC.

    Рекомендуемые действия: Введите политики минимального возраста для обновлений расширений. Закрепите критически важные версии расширений. Проведите аудит всех расширений, имеющих доступ к API терминала или файловой системы.

  • 3. Автоматический запуск MCP-серверов

    Обнаружено: Adversa AI, TrustFall (7 мая)

    Что не сработало в верификации: Все четыре диалога доверия в CLI-инструментах по умолчанию одобряют ("Да/Доверять"), не перечисляя, какие исполняемые файлы будут запущены.

    Что ваш стек не видит: EDR отслеживает поведение процессов, но не то, что большая языковая модель (LLM) инструктирует MCP-сервер делать. WAF (межсетевой экран веб-приложений) проверяет HTTP-пакеты, но не намерение вызова инструмента.

    Рекомендуемые действия: Отключите автоматическое одобрение MCP-серверов в рамках проектов в Claude Code, Gemini CLI, Cursor CLI и Copilot CLI. Блокируйте файлы .mcp.json в конвейерах CI, если они явно не внесены в белый список.

  • 4. Инъекция запросов в агентов CI/CD

    Обнаружено: Университет Джонса Хопкинса, "Комментарий и контроль" (апрель 2026 года)

    Что не сработало в верификации: Рабочие процессы GitHub Actions, использующие триггер `pull_request_target`, внедряют секреты в среды раннеров, которые ИИ-агенты обрабатывают как инструкции.

    Что ваш стек не видит: SIEM-системы (системы управления информацией и событиями безопасности) регистрируют вызов API от легитимного GitHub Action. Сам вызов является атакой. Аномальная сетевая сигнатура отсутствует.

    Рекомендуемые действия: Переведите рабочие процессы проверки кода с ИИ на триггер `pull_request`. Проведите аудит всех рабочих процессов, использующих `pull_request_target` с доступом к секретам, для интеграций с ИИ-агентами.

  • 5. Выполнение кода фреймворками агентов

    Обнаружено: Microsoft MSRC (7 мая)

    Что не сработало в верификации: SDK Python для Semantic Kernel направлял поля фильтрации векторного хранилища в функцию `eval()`. SDK .NET предоставил функцию записи файлов на хосте как вызываемую функцию ядра.

    Что ваш стек не видит: Межсетевые экраны приложений проверяют входные данные. Они не проверяют, как фреймворк оркестровки анализирует эти данные внутри себя.

    Рекомендуемые действия: Обновите Semantic Kernel Python SDK до версии 1.39.4 и .NET SDK до версии 1.71.0. Проведите аудит всех фреймворков агентов на наличие функций, помеченных как вызываемые моделью, которые имеют доступ к файловой системе хоста или оболочке.

  • 6. Утечка учетных данных из хранилищ IDE

    Обнаружено: LayerX (апрель 2026 года)

    Что не сработало в верификации: Cursor хранит ключи API и сессионные токены в незащищенном хранилище, доступном любому установленному расширению браузера.

    Что ваш стек не видит: DLP (системы предотвращения утечек данных) отслеживают данные в движении. Учетные данные Cursor в состоянии покоя невидимы для DLP, так как событие исходящего трафика не происходит, пока расширение не осуществит эксфильтрацию.

    Рекомендуемые действия: Проведите аудит инструментов разработчика на предмет практик хранения учетных данных. Требуйте использования защищенного хранилища (системные связки ключей, зашифрованные хранилища учетных данных) для всех конфигураций ИИ-инструментов кодирования.

  • 7. Утечка данных через "теневой ИИ"

    Обнаружено: Verizon 2026 DBIR (Отчет о расследованиях утечек данных), 19 мая

    Что не сработало в верификации: 67% сотрудников используют ИИ-сервисы с личных учетных записей на корпоративных устройствах. Исходный код является ведущим типом данных, отправляемых на неавторизованные ИИ-платформы.

    Что ваш стек не видит: Политики CASB (брокеров безопасности облачного доступа) охватывают санкционированные SaaS-сервисы. Некорпоративные учетные записи ИИ на корпоративных устройствах полностью выходят за рамки CASB.

    Рекомендуемые действия: Внедрите управление ИИ на уровне браузера, которое отслеживает использование несанкционированных ИИ на корпоративных устройствах. Проведите инвентаризацию расширений браузеров с ИИ по всей организации.

План действий для директоров по безопасности

Директорам по безопасности рекомендуется проанализировать эту таблицу на предмет текущих контрактов с поставщиками до завершения продлений во втором квартале. Следует уточнить у каждого поставщика, какие из семи уязвимостей охватывает их продукт, считая неполные ответы пробелами в защите.

Любые учетные данные, доступные с машины разработчика или CI-раннера, на которых были установлены затронутые npm-пакеты в период с 01:39 до 02:18 UTC 19 мая, должны считаться скомпрометированными. Сюда относятся персональные токены доступа GitHub (PAT), токены npm, ключи доступа AWS, токены сервисных учетных записей Kubernetes, токены HashiCorp Vault, SSH-ключи и содержимое хранилищ 1Password.

Интеграции ИИ-агентов кодирования, работающие в конвейерах CI/CD с рабочими процессами `pull_request_target`, заслуживают особого внимания. Каждая из них представляет собой поверхность для инъекций запросов, обрабатывающую комментарии к запросам на слияние как инструкции для агента.

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

Цепочка поставок инструментов разработчика столкнулась с той же проблемой, с которой IAM (управление идентификацией и доступом) столкнулся десятилетие назад: учетные данные доказывают, кем вы себя называете, а не кем вы являетесь на самом деле. У IAM было 10 лет форы для разработки компенсирующих мер до того, как государственные субъекты превратили кражу учетных данных в операцию промышленного масштаба. Экосистема инструментов для ИИ-кодирования начинает отсчет этого времени сейчас.