惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
博客园 - Franky
GbyAI
GbyAI
B
Blog
WordPress大学
WordPress大学
D
Docker
小众软件
小众软件
月光博客
月光博客
博客园 - 【当耐特】
T
The Blog of Author Tim Ferriss
IT之家
IT之家
腾讯CDC
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
H
Help Net Security
M
MIT News - Artificial intelligence
L
LangChain Blog
云风的 BLOG
云风的 BLOG
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Взлом GitHub-репозиториев Grafana Labs: как атака на цепо...
stnkv-it · 2026-05-20 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение7 мин

Охват и читатели0

Обзор

Часть I: Первопричина - атака Mini Shai-Hulud на экосистему TanStack

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

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 и призванный подтвердить, что пакет собран из доверенного источника. Иными словами, инструменты проверки подлинности оказались бесполезны.

Часть II: Официальное заявление Grafana Labs

Ниже я Вам привел официальное сообщение команды Grafana Labs, опубликованное сегодня (19 мая 2026 года). Оно воспроизводится в полном объёме, поскольку представляет собой образцовый пример прозрачной коммуникации с сообществом в кризисной ситуации.
Если кому-то интересно то Вы можете ознакомиться с их сообщением по ссылке: https://grafana.com/blog/grafana-labs-security-update-latest-on-tanstack-npm-supply-chain-ransomware-incident/?pg=blog

16 мая 2026 года Grafana Labs подтвердила целевую атаку со стороны киберпреступной группировки, которая получила несанкционированный доступ к нашим репозиториям GitHub и скачала нашу кодовую базу. Затем злоумышленники потребовали выкуп, угрожая опубликовать данные.
С момента публикации наших первоначальных выводов расследование продолжалось, и мы публикуем этот материал, чтобы поделиться более подробной информацией об ответных мерах и принятых шагах по ограничению последствий. Полный отчёт по результатам расследования будет опубликован по его завершении.
На сегодняшний день расследование не выявило никаких свидетельств компрометации производственных систем или операций клиентов. Инцидент был строго ограничен средой GitHub Grafana Labs и не затронул наши производственные системы или платформу Grafana Cloud.
После первоначальной оценки мы выяснили, что помимо исходного кода загруженный контент включал GitHub-репозитории, которые некоторые команды Grafana Labs используют для совместной работы и хранения внутренней операционной информации и других сведений о нашей деятельности. Это включает деловые контактные имена и адреса электронной почты, которые были бы переданы в контексте профессиональных отношений, - но не информацию, полученную из производственных систем или обработанную через платформу Grafana Cloud.
Для пользователей open source-проектов Grafana Labs и платформы Grafana Cloud: наша кодовая база была скачана, но не была изменена. В настоящее время от наших клиентов или пользователей open source-решений не требуется никаких действий.
Расследование продолжается: мы продолжаем изучать журналы, телеметрию и все доступные данные в репозиториях GitHub компании. Если мы когда-либо установим, что системы или операции какого-либо клиента затронуты, мы уведомим его напрямую.
В Grafana Labs завоевание и поддержание доверия сообщества - это основа всего, что мы делаем. Мы понимаем, что клиенты полагаются на нас как на надёжного партнёра, и мы не относимся к этой ответственности легкомысленно. Мы публикуем это обновление в духе прозрачности, потому что понимаем: у вас могут возникнуть вопросы, и мы воспринимаем эту ситуацию серьёзно.
Краткое изложение и предыстория
Инцидент берёт начало в атаке на цепочку поставок npm TanStack в рамках кампании Mini Shai-Hulud. Мы обнаружили вредоносную активность 11 мая и немедленно инициировали план реагирования на инциденты.
Мы провели анализ и оперативно ротировали значительное количество токенов GitHub workflow, однако один пропущенный токен позволил атакующим получить доступ к нашим репозиториям GitHub. Последующая проверка подтвердила, что конкретный GitHub workflow, который мы изначально считали незатронутым, был фактически скомпрометирован.
16 мая мы получили от злоумышленников требование о выплате выкупа в обмен на нераскрытие нашей кодовой базы. Grafana Labs приняла решение не выплачивать выкуп. Это решение согласуется с официальной позицией ФБР: выплата выкупа не гарантирует безопасность и лишь стимулирует дальнейшую преступную деятельность.
Как только мы получили контакт от вымогателей, мы немедленно начали принимать меры по ограничению последствий, которые включали ротацию токенов автоматизации, внедрение расширенного мониторинга, аудит всех коммитов с момента инцидента 11 мая и существенное усиление защиты GitHub.
Мы также уведомили федеральные правоохранительные органы и будем поддерживать с ними постоянный диалог по данной ситуации.
Масштаб инцидента и принятые меры
Текущие выводы указывают на то, что масштаб инцидента ограничен репозиториями GitHub Grafana Labs, которые включают публичный и приватный исходный код, а также внутренние GitHub-репозитории.
Нет никаких свидетельств компрометации производственных систем или операций клиентов.
В рамках наших стандартных практик безопасности мы поделимся дополнительной информацией из нашего пост-инцидентного обзора по завершении расследования.
Grafana Labs также принимает меры по усилению безопасности для защиты наших систем. В настоящее время мы реализуем масштабные меры по дополнительной защите наших конвейеров CI/CD (непрерывной интеграции и непрерывного развёртывания) и предотвращению повторения подобных инцидентов.
Наши команды сосредоточены на продолжении расследования и внедрении усиленных средств контроля безопасности.

Часть III: Технический разбор - как именно это произошло

Шаг 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 на своём сайте утечек в даркнете - однако на момент публикации украденный код опубликован не был.

Часть IV: Почему это важно для каждого DevOps-инженера

«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-токены), быстро раскрыла (в тот же день), отказалась платить (правильное решение) и вступила в диалог с правоохранителями. Это образец кризисных коммуникаций в сфере кибербезопасности.

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