11 травня 2026 року в реєстрі npm були опубліковані 84 шкідливі версії 42 пакетів @tanstack/* — атака на ланцюг постачання, яка відстежується як CVE-2026-45321 з оцінкою CVSS 9.6 (критична). Шкідливий код викрадав облікові дані з машин розробників, включно з токенами GitHub, ключами SSH та хмарними креденшелами. За даними CrowdSec, саме ця атака призвела до компрометації ноутбука колишнього співробітника компанії, через акаунт якого 22 травня були скопійовані близько 170 приватних репозиторіїв GitHub. Архів із вихідним кодом і персональними даними з’явився на онлайн-форумі 16 вересня. Інцидент також зачепив OpenAI та Mistral AI.
Механізм атаки на ланцюг постачання TanStack
Згідно з офіційним бюлетенем безпеки TanStack, 84 шкідливі версії були опубліковані в шестихвилинному вікні — між 19:20 та 19:26 UTC 11 травня 2026 року. Кожен із 42 заторкнутих пакетів отримав рівно по дві шкідливі версії. Наприклад, для @tanstack/react-router це були версії 1.169.5 і 1.169.8, а виправленою стала версія 1.169.9.
Встановлення будь-якої зараженої версії запускало обфускований файл router_init.js (~2,3 МБ), який збирав і надсилав на зовнішні сервери широкий набір облікових даних:
- Облікові дані AWS, GCP, Kubernetes, HashiCorp Vault
- Токени npm та GitHub
- Ключі SSH
Дані ексфільтрувалися через домени filev2.getsession.org, seed1.getsession.org, seed2.getsession.org та seed3.getsession.org. Шкідливі версії містили характерний індикатор — необов’язкову залежність @tanstack/setup, що вказувала на шкідливий Git-реф github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c.
Вразливість класифікована як CWE-506 (вбудований шкідливий код). Бюлетень TanStack прямо вказує: середовища розробки та CI/CD, які встановили затронуту версію 11 травня через npm, pnpm або yarn, слід вважати скомпрометованими.
Інцидент із CrowdSec: хронологія та масштаб
За даними CrowdSec, опублікованими 18 вересня, ланцюг подій виглядав так. Колишній співробітник компанії залишив організацію, але його доступ до GitHub був збережений для завершення поточної роботи. Його ноутбук, як повідомляє компанія, був скомпрометований через шкідливий пакет TanStack. Через 11 днів після публікації шкідливих версій, 22 травня, за допомогою OAuth-токена GitHub з акаунта колишнього співробітника були скопійовані близько 170 приватних репозиторіїв.
CrowdSec видалила акаунт зі своєї GitHub-організації 25 травня — через три дні після копіювання, але за кілька місяців до того, як дізналася про витік. Компанія зазначає, що токен не залишив слідів у доступних їй журналах GitHub і вже не існував на момент виявлення витоку. За словами CrowdSec, служба підтримки GitHub згодом відстежила історію токена і підтвердила зв’язок з атакою на TanStack.
Важливо зазначити: атрибуція копіювання репозиторіїв саме через скомпрометований токен колишнього співробітника ґрунтується виключно на заявах CrowdSec і не підтверджена незалежними джерелами.
Вміст витоку
Архів, що з’явився на онлайн-форумі 16 вересня, за даними CrowdSec, містив:
- Вихідний код веб-консолі, скрипти та моделі обробки даних, скрипти автоматизації
- Алгоритм консенсусу, який визначає, які IP-адреси потрапляють до блок-листів, включно з раніше непублічними пороговими значеннями
- Адреси електронної пошти 83 користувачів CrowdSec
- Імена, адреси електронної пошти та інвестиційний контекст 51 потенційного інвестора (дані 2020 року)
CrowdSec стверджує, що інфраструктура та бази даних компанії не були зачеплені, а код не було змінено. Єдиний чинний креденшел у витоку, за даними компанії, надавав доступ лише до сервісу сповіщень AWS SNS із правом публікації в одну тему. Спроба його використання була зафіксована 17 серпня — за місяць до публікації архіву.
Суперечності в заявах CrowdSec
Звіт CrowdSec від 18 вересня суттєво розширив опис наслідків порівняно з початковою заявою від 17 вересня. У першій заяві компанія стверджувала: «Жодні клієнтські дані, логіни/паролі, імена, організації чи що-небудь інше не були розкриті», а наслідки обмежувалися лише самою компанією. Однак уже наступного дня звіт зафіксував витік даних 83 користувачів і 51 інвестора. Перша заява також вказувала, що шкідливий компонент TanStack був виявлений у коді CrowdSec, тоді як звіт від 18 вересня повідомив, що жодна шкідлива версія TanStack у коді компанії знайдена не була, а джерелом став акаунт колишнього співробітника.
Наслідки для інших компаній
Атака на TanStack зачепила не лише CrowdSec. Згідно із заявою OpenAI, два пристрої співробітників були скомпрометовані, що призвело до несанкціонованого доступу до обмеженого набору внутрішніх репозиторіїв вихідного коду. OpenAI повідомила, що не виявила свідчень компрометації клієнтських даних чи інтелектуальної власності, а також зміни опублікованого програмного забезпечення. Ми вже писали про інші інциденти за участю OpenAI. Mistral AI також повідомила про компрометацію пристрою розробника у зв’язку з цією атакою.
Інцидент показує, що в атаки на ланцюг постачання є дві окремі групи постраждалих. Перша — будь-яке середовище розробки або CI/CD, яке встановило шкідливу версію пакета TanStack: для них потрібне повне розслідування хоста та ротація всіх доступних креденшелів. Друга — організації на кшталт CrowdSec, чиї ресурси були скомпрометовані через викрадені токени співробітників.
Рекомендації
Для розробників і команд DevOps, що використовують пакети @tanstack/*:
- Перевірте залежності: у маніфестах зафіксованих версій @tanstack/* шукайте необов’язкову залежність
@tanstack/setupі файлrouter_init.jsу корені пакета — це індикатори компрометації - Оновіть пакети до виправлених версій, зазначених у бюлетені TanStack, і перевстановіть залежності з чистого lock-файла
- Проведіть ротацію всіх креденшелів, доступних на заторкнутих машинах — пріоритет саме ротації, а не лише видалення пакета, оскільки шкідливу залежність могли встановити й видалити без слідів у
node_modules - Перевірте журнали аудиту хмари (AWS CloudTrail, GCP Audit Logs) на предмет несанкціонованого доступу з використанням викрадених креденшелів
- Перевірте домени ексфільтрації у мережевих журналах:
filev2.getsession.org,seed1-3.getsession.org
Для організацій загалом інцидент CrowdSec підкреслює критичну важливість негайного відкликання доступу співробітників, які звільняються, до всіх систем без винятку, а також необхідність обов’язкового використання засобів захисту кінцевих точок на машинах розробників. CrowdSec визнала, що на момент інциденту не вимагала встановлення такого ПЗ і впровадила цю вимогу після події.
Атака CVE-2026-45321 на ланцюг постачання TanStack — підтверджений випадок експлуатації в реальних умовах із критичною оцінкою CVSS 9.6. Усі команди, які працювали з пакетами @tanstack/* 11 травня 2026 року, мають негайно перевірити свої середовища на індикатори компрометації, виконати ротацію креденшелів і оновити пакети до виправлених версій. Зволікання з ротацією облікових даних створює вікно для атак, подібних до тих, що пережили CrowdSec та OpenAI.