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

推荐订阅源

J
Java Code Geeks
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
Cloudbric
Cloudbric
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
博客园_首页
The Cloudflare Blog
C
Cisco Blogs
AWS News Blog
AWS News Blog
IT之家
IT之家
Cyberwarzone
Cyberwarzone
罗磊的独立博客
美团技术团队
V
V2EX
Project Zero
Project Zero
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
S
Schneier on Security
P
Privacy International News Feed
V
Visual Studio Blog
量子位
T
Tor Project blog
S
Securelist
腾讯CDC
A
About on SuperTechFans
T
Threat Research - Cisco Blogs
G
GRAHAM CLULEY
B
Blog RSS Feed
D
DataBreaches.Net
博客园 - 三生石上(FineUI控件)
B
Blog
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
V
Vulnerabilities – Threatpost
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
L
LINUX DO - 热门话题
Recorded Future
Recorded Future

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

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет 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 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Взлом GitHub-репозиториев Grafana Labs: как атака на цепочку поставок npm привела к краже кодовой базы и вымогательству
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-токены), быстро раскрыла (в тот же день), отказалась платить (правильное решение) и вступила в диалог с правоохранителями. Это образец кризисных коммуникаций в сфере кибербезопасности.

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