11 мая группировка TeamPCP провела атаку на цепочку поставок через библиотеку TanStack — один из самых широко используемых open-source наборов для веб-разработки. Через скомпрометированный релизный конвейер было опубликовано 84 вредоносные версии 42 пакетов. Жертвой стала OpenAI: два корпоративных устройства скомпрометированы, часть учётных данных утекла, сертификаты подписи кода отозваны. Пользовательские данные, production-системы и исходный код компания объявила незатронутыми.
Контекст
TanStack — не безымянная утилита. Это экосистема инструментов (Query, Router, Table), которую используют сотни тысяч проектов. Когда атакующие добрались до его релизного конвейера, каждый установивший «обновление» получал вредоносный пакет, подписанный легитимным ключом самого TanStack. Для систем проверки пакеты выглядели полностью доверенными — поэтому обнаружение затянулось.
Кампанию назвали Mini Shai-Hulud. Те же атакующие ранее засветились в компрометации Bitwarden CLI, сканера Trivy и ряда SAP-пакетов. Итоговый масштаб — более 160 пострадавших пакетов, среди них официальные клиенты Mistral AI, инструменты UiPath и Guardrails AI.
OpenAI оказалась в списке не потому что её атаковали напрямую. Два сотрудника использовали заражённую версию — их устройства попали под удар. В скомпрометированных репозиториях обнаружились сертификаты подписи кода, которые теперь отзываются. Именно поэтому всем пользователям macOS нужно обновить ChatGPT, Codex и браузер Atlas до 12 июня: после этой даты macOS перестанет запускать приложения, подписанные старым сертификатом. Это уже вторая ротация за два месяца — первая была в марте после инцидента с библиотекой Axios.
Аналитика
Технически атака примечательна двумя вещами. Первая: никаких zero-day. Нападавшие собрали цепочку из трёх давно описанных уязвимостей GitHub Actions — создали форк TanStack под видом папки с настройками, отравили кеш сборки, затем вытащили токен доступа к релизам из памяти процесса. Каждый шаг описан в исследованиях; просто раньше их не комбинировали так последовательно и целенаправленно.
Вторая деталь — почему история получила такой резонанс. Вредоносный коммит был подписан как claude claude@users.noreply.github.com — точная имитация GitHub-приложения Anthropic Claude, которым разработчики реально пользуются для автоматических правок. Плюс тег [skip ci], который подавляет автоматические проверки. Для любого, кто смотрел на коммит, это выглядело как рутинная правка от ИИ-ассистента. Anthropic к атаке никакого отношения не имеет — её бренд использовали как камуфляж.
Здесь важный структурный сдвиг. Чем активнее AI-инструменты — Claude, Copilot, Cursor — встраиваются в CI/CD конвейеры, тем ценнее их «имя» как вектор социальной инженерии. Разработчик, видящий коммит от «Claude», инстинктивно доверяет ему больше, чем коммиту от незнакомого аккаунта. Доверие к автоматизации само по себе становится уязвимостью — и атакующие это уже знают.
Кейсы применения в бизнесе
B2B-SaaS стартап с активным CI/CD. Если GitHub Actions собирает и деплоит код при каждом пуше, стоит провести аудит: закреплены ли сторонние Actions на конкретный SHA (а не на плавающий тег вроде @v3), есть ли защита кеша сборки. Pinning зависимостей по хешу вместо версионного тега — базовая и малозатратная защита от подобных атак. Инструменты вроде StepSecurity автоматизируют этот аудит.
Корпорация с legacy-инфраструктурой. Крупные компании зачастую используют десятки внутренних пакетов, собранных поверх open-source. Если цепочка сборки не изолирована, один заражённый upstream-пакет попадает в production незамеченным. Ответ — SBOM (Software Bill of Materials): реестр всех зависимостей с хешами и источниками, который верифицируется на каждом шаге CI.
SMB и локальный бизнес в КР/СНГ. Небольшие команды, использующие npm- или Python-пакеты, редко думают об атаках на цепочку поставок. Именно они реже проверяют хеши и реже мониторят уязвимости. Минимальный шаг: подключить Dependabot или аналог и убедиться, что пакеты тянутся из официальных реестров, а не из форков.
Кейсы в личной жизни
Разработчик, работающий с open-source. Если вы используете GitHub Actions в личных или рабочих репозиториях — пройдитесь по списку сторонних Actions. Проверьте, привязаны ли они к конкретному SHA. Инструменты вроде StepSecurity предлагают hardened runners и автоматически фиксируют версии.
Контент-мейкер или фрилансер, использующий AI-ассистентов. Если Claude, Copilot или другой инструмент имеет доступ к вашему репозиторию, это не повод расслабляться при ревью. Автоматические коммиты нужно проверять так же, как коммиты от живого человека — особенно если они затрагивают CI/CD конфигурацию или файлы зависимостей.
Студент или начинающий разработчик. Привычка проверять источник пакета кажется паранойей — до первого инцидента. Простой ритуал: перед установкой незнакомого пакета смотрите на дату последней публикации, количество загрузок и активность репозитория. Резкий скачок версий при низкой общей активности — повод насторожиться.
Как применить сегодня
- Проверьте GitHub Actions в своих репозиториях:
uses: actions/checkout@SHAвместо@v4— это и есть pinning по хешу. - Если вы на macOS и пользуетесь ChatGPT или Codex от OpenAI — обновите их до 12 июня, иначе macOS перестанет их запускать.
- Подключите Dependabot, Renovate или socket.dev для автоматических алертов на подозрительные изменения в пакетах.
- Введите правило: любой коммит, меняющий CI/CD конфигурацию или зависимости — даже от AI-ассистента — требует явного ревью от живого человека.
- Если ведёте проект на Python или Node.js — сгенерируйте SBOM через
cyclonedxилиsyftи зафиксируйте хеши ключевых зависимостей.