Pomoc zdalna
alerty bezpieczeństwa

Zatrute biblioteki TanStack w npm (CVE-2026-45321) kradły klucze, także dla ransomware

11 maja 2026 r. do npm trafiły 84 złośliwe wersje pakietów TanStack, opublikowane prawdziwą tożsamością wydawcy. CISA potwierdza ataki. Sprawdź, czy instalowaliście je tego dnia, i wymień klucze.

  • Paweł Niedźwiecki
Paweł Niedźwiecki
17 września 2026 10 min czytania
Fragment kodu programowania na ekranie

Ten alert jest dla zarządu, CTO i CFO firm, które mają aplikacje webowe pisane w JavaScript, własne lub zamówione w agencji. Werdykt: jeśli Twój projekt korzysta z bibliotek TanStack i 11 maja 2026 roku ktoś instalował w nim zależności, potraktuj komputer programisty i serwer budujący jako przejęte i wymień wszystkie klucze dostępowe dziś.

1. CO SIĘ STAŁO? Fakty w pigułce

Amerykańska agencja CISA 27 maja 2026 roku dopisała CVE-2026-45321 do katalogu KEV, czyli listy podatności, o których ma dowody wykorzystania w prawdziwych atakach. To nietypowy wpis: nie chodzi o błąd w kodzie, który trzeba załatać, tylko o atak na łańcuch dostaw oprogramowania. Wieczorem 11 maja 2026 roku, w oknie około sześciu minut (według GitHub między 19:20 a 19:26 UTC, czyli 21:20 i 21:26 czasu polskiego), do publicznego rejestru npm trafiły 84 złośliwe wersje w 42 pakietach projektu TanStack. Wersje te zawierały program kradnący hasła, tokeny i klucze.

Najważniejsze: złośliwe wersje zostały opublikowane prawdziwą, zaufaną tożsamością wydawcy projektu. Kontrola podpisu pakietu nie ostrzegłaby nikogo.

Element

Szczegóły

Identyfikator CVE

CVE-2026-45321

Data dodania do CISA KEV

2026-05-27

Termin naprawy wg CISA

2026-06-10

Produkt

TanStack, pakiety @tanstack/* w rejestrze npm (m.in. react-router, router-core, react-start, solid-router, vue-router)

Wersje zagrożone

84 konkretne wersje w 42 pakietach, po dwie na pakiet, np. @tanstack/react-router i @tanstack/router-core 1.169.5 oraz 1.169.8. Zagrożone jest każde środowisko, które zainstalowało taką wersję (komputer programisty, serwer CI)

Wersje bezpieczne

Złośliwe wersje wycofano z npm. Doradztwo GitHub wskazuje wersje poprawione o numer wyżej (np. react-router 1.169.9). W rejestrze npm pierwszym nowym wydaniem react-router po incydencie jest 1.170.0 z 15 maja 2026, najnowsze na 17 września 2026 to 1.170.38 (router-core: 1.171.32). Ostatnie czyste wydanie react-router sprzed incydentu: 1.169.2

Typ podatności

Osadzony złośliwy kod w bibliotece (atak na łańcuch dostaw); CWE-506. W katalogu CISA: „TanStack Unspecified Vulnerability”

Ocena CVSS

9.6 KRYTYCZNA (CVSS 3.1, ocena GitHub jako podmiotu rejestrującego). NVD nie wystawiło własnej oceny. Atak przez sieć, bez uprawnień, wymaga instalacji pakietu przez ofiarę, skutki wychodzą poza zaatakowany element

2. O CO CHODZI W PROSTYCH SŁOWACH?

Wyobraź sobie hurtownię, która od lat dostarcza do Twojej restauracji produkty w zaplombowanych skrzynkach z pieczęcią producenta. Pewnego wieczoru ktoś na kilka minut dostał się do linii pakującej i wydał dwie partie skrzynek z prawdziwą pieczęcią, ale z podmienioną zawartością. Kucharz otwiera skrzynkę, bo pieczęć się zgadza, a w środku jest urządzenie, które kopiuje klucze do zaplecza i sejfu.

Tak zadziałał atak na TanStack. Aplikacje nie powstają od zera, tylko z setek gotowych bibliotek pobieranych automatycznie. Rejestr npm ma mechanizm „zaufanego wydawcy”, który pozwala publikować tylko automatowi uruchomionemu z właściwego repozytorium. Napastnik nie łamał tego mechanizmu: połączył trzy znane słabości procesu budowania w GitHub Actions i wydobył z pamięci automatu prawdziwy token tożsamości. Zaufanie nie zostało podrobione, tylko pożyczone.

💡 npm to publiczny rejestr bibliotek dla JavaScript, z którego programiści i serwery budujące pobierają gotowe elementy aplikacji. CI (serwer budujący) to automat, który składa i wdraża aplikację. Token to cyfrowa przepustka, która zastępuje hasło w komunikacji między systemami. Łańcuch dostaw oprogramowania to wszystkie zewnętrzne elementy, z których składa się Twoja aplikacja.

Scenariusz

Normalnie

Z podatnością

Programista instaluje zależności

Pobiera sprawdzone wersje bibliotek

Pobiera wersję z programem kradnącym, który uruchamia się już przy instalacji

Kontrola podpisu wydawcy

Chroni przed podróbkami

Nie pomaga, bo podpis jest prawdziwy

Serwer budujący (CI)

Ma klucze do chmury i serwerów, by wdrażać aplikację

Te same klucze trafiają do napastnika

Klucze SSH, tokeny GitHub i npm

Znane tylko firmie lub agencji

Wysłane szyfrowanym kanałem poza firmę

Pakiety utrzymywane przez ofiarę

Publikowane przez uprawnione osoby

Program próbuje je przepublikować z tym samym złośliwym dodatkiem

Stos sklejkowych skrzyń transportowych z tym samym numerem partiiźródło: Unsplash, Yosuke Ota

3. JAK HAKERZY TO WYKORZYSTUJĄ?

Poniżej typowy przebieg ataku dla tej klasy zdarzeń. To scenariusz poglądowy dopasowany do opisu z doradztwa GitHub, a nie odtworzenie konkretnego włamania do konkretnej firmy. Kluczowe jest to, że okno publikacji było jedno i już się zamknęło: dziś nie da się tą samą drogą zainfekować nowej instalacji, ale skutki kradzieży z 11 maja mogą trwać.

Etap

Czas

Akcja hakerów

Wynik

1. Publikacja

T+0 min

Wydanie złośliwych wersji 42 pakietów pod prawdziwą tożsamością TanStack

Zatrute biblioteki w publicznym rejestrze

2. Instalacja

T+minuty do godzin

Programista lub serwer CI uruchamia npm install, pnpm install albo yarn install

Program kradnący uruchamia się bez wiedzy użytkownika

3. Kradzież

T+sekundy od instalacji

Zbieranie kluczy AWS i GCP, tokenów Kubernetes, Vault, GitHub i npm oraz kluczy SSH

Poświadczenia wysłane szyfrowanym kanałem komunikatora Session

4. Rozprzestrzenianie

T+godziny

Przepublikowanie pakietów npm utrzymywanych przez ofiarę z tym samym dodatkiem

Kolejne zatrute biblioteki, kolejne ofiary

5. Wejście do firmy

T+dni

Logowanie do chmury, repozytoriów i serwerów prawdziwymi kluczami

Działania nieodróżnialne od pracy agencji lub działu IT

6. Szantaż

T+tygodnie

Kradzież danych, szyfrowanie systemów, żądanie okupu

Przestój i żądanie zapłaty; CISA oznaczyła użycie w kampaniach ransomware

Konkretne scenariusze zagrożenia

  • 🔴 Scenariusz 1: agencja odbudowała sklep internetowy 11 maja wieczorem, a serwer CI miał klucze do produkcyjnej bazy danych; po kilku dniach ktoś pobiera bazę klientów prawdziwym kontem technicznym.
  • 🔴 Scenariusz 2: z laptopa programisty wyciekają klucze SSH i token GitHub, więc napastnik dopisuje własny kod do repozytorium firmowej aplikacji, który trafia do klientów przy najbliższym wdrożeniu.
  • 🔴 Scenariusz 3: skradzione klucze do chmury trafiają do grupy ransomware, która kasuje kopie zapasowe w tym samym koncie chmurowym i szyfruje serwery.

4. DLACZEGO TO RYZYKO DLA TWOJEJ FIRMY?

Firma zamawiająca aplikację zwykle czuje się od tego daleko, bo sama nie instaluje bibliotek. Tymczasem złośliwy kod działał tam, gdzie leżą klucze do Twoich systemów: na komputerach programistów i serwerach budujących, często u zewnętrznego dostawcy. Widocznym skutkiem nie jest awaria, tylko późniejsze logowania prawdziwymi poświadczeniami.

Obszar biznesu

Potencjalny wpływ

Czas do wystąpienia

Koszty szacunkowe

Operacyjny

Wstrzymanie wdrożeń, wymiana wszystkich kluczy, audyt repozytoriów, możliwy przestój sklepu lub aplikacji

Dni

20 tys. do 150 tys. PLN (praca zespołu, odtwarzanie)

Bezpieczeństwo danych

Dostęp do baz klientów, kodu źródłowego i chmury przy użyciu skradzionych kluczy

Dni do tygodni

30 tys. do 250 tys. PLN (analiza powłamaniowa)

Finansowy

Nieautoryzowane zasoby w chmurze, okup, utracona sprzedaż

Tygodnie

50 tys. do 800 tys. PLN łącznie

Reputacyjny

Utrata zaufania klientów, szczególnie jeśli zatruty kod trafi do Twojej aplikacji

Miesiące

50 tys. do 400 tys. PLN (utracone kontrakty)

Prawny

Obowiązek zgłoszenia naruszenia do UODO w ciągu 72 godzin i ewentualnie powiadomienia osób; możliwa kara RODO do 20 mln EUR lub 4% rocznego obrotu, zależnie od okoliczności; spory z agencją o odpowiedzialność

72 godziny od wykrycia

20 tys. do 120 tys. PLN (obsługa prawna), bez ewentualnej kary

Tomasz Kaczmarek
Tomasz Kaczmarek

Mogę Ci jakoś pomóc?

Kwoty są orientacyjnymi widełkami dla małej i średniej firmy, nie danymi z tego incydentu.

Macierz ryzyka dla firmy, której projekt używa TanStack i instalował zależności 11 maja 2026 Wpływ 5 | . . ■ . . ← WYSOKIE 4 | . . . . . 3 | . . . . . 2 | . . . . . 1 | . . . . . +-------------------- 1 2 3 4 5 Prawdopodobieństwo

Interpretacja: skutek jest krytyczny, bo wyciekają klucze do całej infrastruktury, ale prawdopodobieństwo jest średnie, bo zależy od tego, czy instalacja zależności wypadła w krótkim oknie 11 maja; dla firm bez TanStack albo z przypiętymi starszymi wersjami ryzyko tej konkretnej sprawy jest bliskie zeru.

5. CO MUSISZ ZROBIĆ NATYCHMIAST?

Lp.

Priorytet

Działanie

Termin

Odpowiedzialny

1

🔴 NATYCHMIAST

Ustalić, czy którykolwiek projekt (także u agencji) używa pakietów @tanstack/*

Dziś

CTO / kierownik projektu

2

🔴 NATYCHMIAST

Sprawdzić pliki blokady wersji (package-lock.json, pnpm-lock.yaml, yarn.lock) i logi CI pod kątem złośliwych wersji oraz instalacji 11 maja 2026

Dziś

Programista / DevOps

3

🔴 NATYCHMIAST

Jeśli tak: wymienić wszystkie poświadczenia dostępne dla procesu instalacji (chmura, GitHub, npm, SSH, Vault, Kubernetes)

Dziś

DevOps / administrator

4

🟠 PILNIE

Przejrzeć logi audytowe chmury i GitHub od 11 maja pod kątem działań z nieznanych adresów

Do 3 dni

Dział IT / zespół bezpieczeństwa

5

🟠 PILNIE

Usunąć node_modules i plik blokady, zainstalować zależności od nowa na czystych wersjach

Do 3 dni

Programista

6

🟠 PILNIE

Sprawdzić, czy pakiety npm publikowane przez firmę nie dostały nieautoryzowanych wydań

Do 3 dni

Programista

7

🟡 WAŻNIE

Wprowadzić przypinanie wersji, opóźnienie przyjmowania świeżych wydań i minimalne uprawnienia serwera CI

Do 30 dni

CTO

Jeśli aktualizacja nie jest dostępna

Czyste wydania TanStack są dostępne, a złośliwe wersje wycofano z npm, więc samo „zaktualizowanie” nie wystarczy: najważniejsze jest ustalenie, czy do instalacji doszło, i wymiana kluczy. Poniższe miary ograniczają ryzyko podobnych zdarzeń. Oceny efektywności to ocena ekspercka.

Czasowa miara ochronna

Efektywność

Łatwość wdrożenia

Przypięcie wszystkich @tanstack/* do wersji sprzed 11 maja 2026 lub po incydencie (zalecenie GitHub)

Wysoka wobec tej sprawy

Łatwa

Wyłączenie skryptów instalacyjnych (npm config set ignore-scripts true, zalecenie GitHub)

Wysoka: ładunek uruchamiał się przy instalacji

Średnia: część narzędzi może przestać działać

Blokada ruchu do domen komunikatora Session z serwerów CI (wskazana w doradztwie)

Średnia: utrudnia wysłanie danych, nie usuwa kodu

Średnia

Instalowanie zależności tylko z plikiem blokady (npm ci)

Średnia: chroni przed nieplanowanym pobraniem nowych wersji

Łatwa

Przed i po działaniu

Stan

Przed działaniem

Po działaniu

Wiedza o narażeniu

Nie wiadomo, czy zatruta wersja była instalowana

Udokumentowana odpowiedź: tak lub nie, z dowodem z plików blokady i logów CI

Klucze i tokeny

Mogą być w rękach napastnika

Wymienione, stare unieważnione

Zależności

Mogą wskazywać na złośliwe wersje

Czyste wersje przypięte w pliku blokady

Serwer CI

Szerokie uprawnienia, klucze produkcyjne na stałe

Minimalne uprawnienia, krótkotrwałe tokeny

Relacja z agencją

Ogólne zapewnienie „nas to nie dotyczy”

Pisemna odpowiedź na trzy konkretne pytania

6. KONTEKST I SKALA ZAGROŻENIA

Aspekt

Informacja

Czy jest wykorzystywana?

TAK (potwierdzone przez CISA). Złośliwe wersje były publicznie dostępne w npm 11 maja 2026

Grupy przestępcze

Brak publicznych informacji o nazwie grupy

Kampanie ransomware

TAK (CISA KEV: Known), bez wskazania konkretnych kampanii

Ocena CVSS

9.6 KRYTYCZNA (CVSS 3.1, GitHub); brak własnej oceny NVD

PoC dostępny publicznie?

Nie dotyczy w zwykłym sensie: to gotowy złośliwy kod, a nie luka do wykorzystania. Doradztwo opisuje mechanizm i wskaźniki włamania

Liczba atakowanych firm

Brak publicznych informacji; zasięg zależy od liczby instalacji w oknie publikacji

Prognoza EPSS

0,02342 (około 2%) według odczytu z 23 sierpnia 2026; niska, bo okna ataku nie da się powtórzyć

Zasięg w danych NVD

Lista dopasowań produktów w bazie NVD liczy kilkaset pozycji (wg analizy źródłowej), więc nie jest miarą zasięgu zdarzenia

Wskaźniki mówią tu różne rzeczy, bo zdarzenie było jednorazowe. Dla decyzji zarządu liczy się pytanie, co budowano 11 maja i jakie klucze wtedy były dostępne:

Sygnały zagrożenia dla CVE-2026-45321 CVSS 3.1 (GitHub) 9.6/10 ███████████████████░ KRYTYCZNA CISA KEV TAK ████████████████████ ataki potwierdzone Ransomware (CISA) Known ████████████████████ używana EPSS (próba w 30 dni) ~2% ░░░░░░░░░░░░░░░░░░░░ niska, okno zamknięte Okno publikacji ~6 min █░░░░░░░░░░░░░░░░░░░ krótkie, ale skuteczne

Linia czasu incydentu

2026-05-11 19:20-19:26 UTC: 84 złośliwe wersje w 42 pakietach TanStack w npm 2026-05-12 GitHub publikuje doradztwo GHSA-g7cv-rxg3-hmpx 2026-05-15 Pierwsze nowe wydanie @tanstack/react-router (1.170.0) 2026-05-27 CISA dodaje CVE-2026-45321 do katalogu KEV, ransomware: Known 2026-06-08 Ostatnia aktualizacja doradztwa GitHub 2026-06-10 Termin naprawy wg CISA dla agencji federalnych ... ponad 3 miesiące od terminu CISA 2026-09-17: TUTAJ JESTEŚMY

7. BEZPOŚREDNI LINK DO DZIAŁANIA: checklista dla CTO/CFO

Oficjalne doradztwo projektu z listą wersji i wskaźnikami włamania: GHSA-g7cv-rxg3-hmpx . Wpis w NVD: nvd.nist.gov/vuln/detail/CVE-2026-45321 .

Lp.

Zadanie

Kto

Deadline

1

Wysłać do agencji i zespołu pytanie: czy używamy @tanstack/* i czy 11 maja 2026 instalowano zależności

CTO

DZISIAJ

2

Zlecić wymianę wszystkich kluczy dostępnych dla serwerów CI i komputerów programistów, jeśli odpowiedź jest twierdząca lub niepewna

CTO

DZISIAJ

3

Uzyskać listę wersji z plików blokady wszystkich aktywnych projektów

CTO

DO JUTRA

4

Zlecić przegląd logów audytowych chmury i GitHub od 11 maja 2026

CTO

DO JUTRA

5

Zarezerwować budżet na analizę powłamaniową, jeśli przegląd coś wykaże

CFO

DO JUTRA

6

Sprawdzić w umowie z agencją zapisy o bezpieczeństwie zależności i zgłaszaniu incydentów

CFO

DO JUTRA

7

Sprawdzić rachunek za chmurę pod kątem nieoczekiwanych zasobów od maja 2026

CFO

DO JUTRA

Tomasz Kaczmarek
Tomasz Kaczmarek

Mogę Ci jakoś pomóc?

8. PYTANIA DO TWOJEGO ZESPOŁU IT

#

Pytanie

Odpowiedź

Priorytet

1

Czy którykolwiek nasz projekt używa pakietów @tanstack/*?

TAK / NIE

🔴

2

Czy 11 maja 2026 na komputerach programistów lub serwerach CI instalowano zależności tych projektów?

TAK / NIE, [data]

🔴

3

Czy pliki blokady wskazują którąkolwiek z 84 złośliwych wersji?

TAK / NIE, [wersja]

🔴

4

Kiedy ostatnio wymieniono klucze do chmury, GitHub, npm i SSH używane przez CI?

[data]

🔴

5

Czy logi audytowe chmury i GitHub od 11 maja zostały przejrzane?

TAK / NIE, [data]

🟠

6

Czy serwer CI instaluje zależności tylko z pliku blokady i ma wyłączone zbędne skrypty instalacyjne?

TAK / NIE

🟠

7

Czy publikujemy własne pakiety npm i czy sprawdziliśmy, że nie pojawiły się ich nieautoryzowane wydania?

TAK / NIE

🟡

Pytania diagnostyczne dla managera

  • ✓ Czy wiem, jakie zewnętrzne biblioteki są w naszych aplikacjach i kto za nie odpowiada?
  • ✓ Czy nasza agencja poinformowała nas o tej sprawie w maju, a jeśli nie, dlaczego?
  • ✓ Czy serwer budujący ma dostęp do produkcji, i czy naprawdę musi go mieć na stałe?
  • ✓ Czy potrafimy w jeden dzień wymienić wszystkie klucze dostępowe do naszych systemów?
  • ✓ Czy mamy procedurę zgłoszenia naruszenia danych do UODO w 72 godziny?

Podsumowanie

CVE-2026-45321 to atak na łańcuch dostaw: przez około sześć minut 11 maja 2026 roku rejestr npm wydawał złośliwe wersje bibliotek TanStack pod prawdziwą tożsamością wydawcy, a program kradł klucze z komputerów programistów i serwerów budujących. CISA potwierdza wykorzystanie, także w kampaniach ransomware, więc kluczowe jest ustalenie, czy instalacja wypadła w tym oknie, i wymiana poświadczeń, a nie sama aktualizacja.

Czytaj dalej

Powiązane artykuły

Zestaw zmienia się codziennie, więc przy kolejnej wizycie zobaczysz inny wycinek bloga.

Masz to samo u siebie?

Możemy się tym zająć

Krótka rozmowa wystarczy, żeby ocenić zakres prac i podać widełki kosztu. Bez zobowiązań.