Взлом Угрозы Взлом GitHub-репозиториев Grafana Labs: как атака на цепочку поставок npm привела к краже кодовой базы и вымогательству

Nowheretogo

Active
Moderator
Регистрация
06.09.25
Сообщения
86
Реакции
164



Цепочка поставок как вектор атаки

11 мая 2026 года, в промежутке с 19:20 до 19:26 UTC, произошло одно из наиболее технически изощрённых событий в истории атак на цепочку поставок npm. Группировка TeamPCP опубликовала 84 вредоносные версии пакетов в рамках 42 пакетов из пространства имён @tanstack/* - и всё это за шесть минут.

Кампания получила название Mini Shai-Hulud - отсылка к гигантским песчаным червям из вселенной «Дюны» Фрэнка Герберта. Это не первая волна активности TeamPCP: до этого они скомпрометировали сканер Trivy от Aqua Security в марте 2026-го и npm-пакет Bitwarden CLI в апреле 2026-го. Каждая следующая волна технически сложнее предыдущей.

Как работала атака: три уязвимости в одной цепочке

Атака объединила три уязвимости, каждая из которых по отдельности была бы недостаточна. Злоумышленник создал форк репозитория TanStack/router, открыл pull request, который запустил workflow с триггером pull_request_target, и отравил кэш GitHub Actions через границу доверия fork↔base. Когда легитимный workflow сработал, отравленный кэш был восстановлен, а вредоносный код извлёк OIDC-токен прямо из памяти процесса runner'а.

Ключевой момент: злоумышленники не крали статические npm-токены. Вместо этого они извлекали runtime OIDC-токены напрямую из памяти процесса runner'а, что позволило им аутентифицироваться легитимным образом через trusted publisher bindings и публиковать скомпрометированные обновления в npm-реестр.

Масштаб заражения

К концу дня было задокументировано более 170 скомпрометированных пакетов в npm и PyPI, включая Mistral AI, UiPath, OpenSearch и Guardrails AI. Для эксфильтрации использовалась тройная C2-архитектура: тайпсквоттинговый домен git-tanstack.com, децентрализованная сеть Session messenger и GitHub API dead drops, где украденные токены создавали репозитории с названиями из вселенной «Дюны».

Примечательно, что это первый задокументированный случай, когда вредоносные npm-пакеты несли валидную SLSA-провенанс - криптографический сертификат, генерируемый Sigstore и призванный подтвердить, что пакет собран из доверенного источника. Иными словами, инструменты проверки подлинности оказались бесполезны.



Ниже я Вам привел официальное сообщение команды Grafana Labs, опубликованное сегодня (19 мая 2026 года). Оно воспроизводится в полном объёме, поскольку представляет собой образцовый пример прозрачной коммуникации с сообществом в кризисной ситуации.
Если кому-то интересно то Вы можете ознакомиться с их сообщением по ссылке:
Для просмотра ссылки Войди или Зарегистрируйся



Шаг 1: Форк и внедрение вредоносного кода

Атака начиналась стандартно для open-source экосистемы: злоумышленник создал форк публичного репозитория Grafana - действие, выглядящее совершенно безобидно. Затем в форк был внедрён вредоносный curl-запрос. Когда уязвимый workflow с триггером pull_request_target выполнился, он запустил команду внутри доверенной CI-среды - это позволило атакующему сдампить переменные окружения и извлечь привилегированный GitHub-токен.

Шаг 2: Canary-токен как детектор вторжения

Вторжение было обнаружено потому, что один из тысяч canary-токенов, которые Grafana рассеяла по всей своей среде, был активирован - это намеренно подброшенный фальшивый credential, спроектированный так, чтобы выдать сигнал тревоги в момент, когда кто-то его коснётся.

Это решение оказалось ключевым. Когда атакующий собирал секреты из скомпрометированной build-среды, он подобрал один из таких «приманок», и сигнал сработал. Сообщество отреагировало с долей иронии: компания, которая продаёт инструменты наблюдаемости всему миру, сама спаслась благодаря именно observability-технике.

Шаг 3: Эксфильтрация и вымогательство

После скачивания кода злоумышленник перешёл к вымогательству, требуя оплату в обмен на нераскрытие репозиториев. Группировка CoinbaseCartel, предположительно являющаяся ответвлением экосистемы ShinyHunters, Scattered Spider и LAPSUS$, разместила Grafana на своём сайте утечек в даркнете - однако на момент публикации украденный код опубликован не был.



«Pwn Request» - уязвимость, которая никуда не ушла

Первопричина была отслежена до недавно включённого GitHub Action, содержащего уязвимость типа «Pwn Request» - неправильную конфигурацию в workflow, запускаемом по событию pull_request_target, которая предоставляла внешним контрибьюторам доступ к production-секретам во время CI-прогонов.

Этот паттерн задокументирован GitHub Security Lab годами. Кампания, отслеживавшаяся Wiz Research между мартом и апрелем 2026 года, использовала AI-генерированные pull request'ы для открытия более 500 вредоносных submissions в сотнях репозиториев, нацеленных на ту же уязвимость.

Что нужно проверить прямо сейчас

Если вы поддерживаете публичные или приватные GitHub-репозитории с CI/CD-пайплайнами, вот минимальный чеклист:

1. Аудит workflow-файлов:

Откройте директорию .github/workflows и найдите все файлы, использующие
Код:
pull_request_target
. Убедитесь, что workflow не checkout'ит и не исполняет код из pull request'а напрямую.

2. Ротация токенов:

Если ваша команда устанавливала любую из затронутых версий @tanstack/* 11 мая, ротируйте AWS, GCP, Kubernetes, Vault, GitHub, npm и SSH-credentials, доступные с хоста установки.

3. Проверка на персистентность:

Проверьте наличие persistence-демона по пути
Код:
 ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
на macOS или
Код:
~/.config/systemd/user/gh-token-monitor.service
на Linux и удалите его перед отзывом любых токенов.

4. Блокировка C2-инфраструктуры:

На уровне DNS или прокси заблокируйте
Код:
git-tanstack.com, *.getsession.org и 83.142.209.194
.

5. Внедрите canary-токены:

Если вы управляете частной организацией, рассмотрите возможность размещения собственных canary-токенов в build-средах: именно для этого сценария они и существуют - и инцидент с Grafana показывает, что они работают.

Часть V: Уроки и выводы

Прозрачность как стратегический актив


Grafana Labs сделала нечто редкое: публичное раскрытие было выпущено в тот же день, что и требование о выкупе - это намеренный сигнал о нежелании компании вступать в переговоры. Большинство компаний предпочитают тихо платить или тянуть время. Grafana выбрала другой путь - и это усилило, а не подорвало доверие сообщества.

Отказ платить выкуп - единственно верное решение

Позиция Grafana Labs согласуется с позицией ФБР и большинства регуляторов: выплата выкупа не гарантирует получения данных обратно и лишь финансирует следующие атаки. CoinbaseCartel с сентября 2025 года уже насчитывает более 170 жертв в технологическом, здравоохранительном, производственном и транспортном секторах. Каждая выплата - это вклад в расширение этой инфраструктуры.

Заключение

Инцидент с Grafana Labs - это не история о провале одной компании. Это история о системной уязвимости, которая прямо сейчас присутствует в тысячах репозиториев. Атакующие не ломали пароли и не фишили сотрудников - они воспользовались задокументированным, публично известным паттерном в GitHub Actions, который большинство команд попросту не проверяли.

Grafana Labs ответила правильно: быстро обнаружила (canary-токены), быстро раскрыла (в тот же день), отказалась платить (правильное решение) и вступила в диалог с правоохранителями. Это образец кризисных коммуникаций в сфере кибербезопасности.

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


Для просмотра ссылки Войди или Зарегистрируйся