TanStack: 84 zatrute wersje pakietów NPM i koniec zaufania do OIDC

Skalowany atak na łańcuch dostaw z 11 maja 2026 roku obnażył krytyczne luki w automatyzacji wydawniczej GitHub Actions. Incydent zainfekował kluczowe biblioteki ekosystemu React, w tym TanStack Router, kradnąc poświadczenia chmurowe i instalując backdoory w narzędziach AI.

Jak doszło do ataku na TanStack?

Atak na TanStack wykorzystał lukę „Pwn Request” w mechanizmie `pull_request_target` oraz zatrucie cache’u GitHub Actions. Napastnik wstrzyknął złośliwy kod do współdzielonego cache’u poprzez spreparowane Pull Requesty z forka, które nie wymagały akceptacji maintainera. Pozwoliło to na późniejszą ekstrakcję tokena OIDC z pamięci runnera podczas oficjalnego procesu wydawniczego i opublikowanie 84 złośliwych wersji pakietów z poprawnym certyfikatem SLSA.

Szczegóły techniczne kompromitacji CI/CD: Zatrucie cache: Wykorzystano klucz `Linux-pnpm-store-` generowany na podstawie hasha pliku `pnpm-lock.yaml`, co pozwoliło napastnikowi nadpisać oficjalne zależności własnym kodem. Ekstrakcja tokena: Złośliwy skrypt w Pythonie odczytał pamięć procesu `Runner.Worker` (`/proc//mem`), wyciągając maskowane sekrety i tokeny uwierzytelniające OIDC. Legalne pochodzenie: Dzięki przejęciu pipeline’u, złośliwe pakiety posiadały ważną sygnaturę Sigstore i pochodzenie SLSA Build Level 3, co czyniło je nieodróżnialnymi od bezpiecznych wersji dla standardowych narzędzi skanujących.

Dlaczego robak Mini Shai-Hulud jest wyjątkowo groźny?

Mini Shai-Hulud to zaawansowany, samopowielający się robak stworzony przez grupę TeamPCP, który po zainfekowaniu maszyny dewelopera automatycznie przejmuje kontrolę nad wszystkimi pakietami NPM, które ten publikuje. Malware przeszukuje ponad 100 lokalizacji w poszukiwaniu kluczy AWS, GCP, Azure oraz portfeli kryptowalutowych. Wyjątkowo destrukcyjną funkcją jest „dead man’s switch”, który usuwa katalog domowy użytkownika (`rm -rf ~/`) w momencie wygaśnięcia lub unieważnienia skradzionego tokenu GitHub.

Mechanizmy infekcji i persistency: Infiltracja narzędzi AI: Malware wstrzykuje własne hooki do ustawień Claude Code (`.claude/settings.json`) oraz VS Code, uruchamiając się ponownie przy każdym otwarciu edytora lub sesji agenta AI. Eksfiltracja danych: Skradzione sekrety są szyfrowane kluczem RSA-4096 i wysyłane przez zdecentralizowaną sieć P2P Session/Oxen oraz ukryte commity GraphQL na GitHubie. * Double-tap: Robak publikował dokładnie dwie złośliwe wersje każdego pakietu w odstępie kilku minut, aby zmaksymalizować zasięg przed reakcją systemów bezpieczeństwa.

Axios i lekcje z ataku socjotechnicznego

Incydent z biblioteką Axios, pobieraną ponad 100 milionów razy tygodniowo, potwierdził, że socjotechnika pozostaje najsłabszym ogniwem bezpieczeństwa „Secure by Design”. Napastnicy przejęli konto lead maintainera poprzez precyzyjnie celowaną kampanię „ClickFix”, w której podszywali się pod założycieli firm rekrutacyjnych i organizatorów podcastów. Deweloper, przekonany o konieczności naprawy błędu połączenia podczas spotkania na MS Teams, zainstalował złośliwe oprogramowanie RAT, które ominęło obowiązkowe 2FA na koncie NPM.

Skutki kompromitacji Axios: Wstrzyknięcie trojana: Wersje 1.14.1 oraz 0.30.4 zawierały zależność `plain-crypto-js`, instalującą trojana Cross-Platform RAT na systemach Linux, Windows i macOS. Zacieranie śladów: Po instalacji malware usuwał własne pliki i przywracał oryginalną zawartość pakietu, utrudniając analizę powłamaniową. * Współpraca z AI: Systemy AI firmy Socket wykryły anomalie w kodzie Axios w ciągu kilku minut, co pozwoliło na usunięcie złośliwych wersji z rejestru w ciągu 3 godzin.

Wnioski praktyczne

  1. Blokada skryptów instalacyjnych: Skonfiguruj globalnie `npm config set ignore-scripts true`, aby uniemożliwić automatyczne wykonanie kodu malware podczas pobierania zależności.
  2. Migracja na PNPM 10+: Wykorzystaj funkcje `minimum-release-age` (zalecane minimum 24h) oraz `block-exotic-subdependencies`, które automatycznie odrzuciłyby zainfekowane pakiety TanStack.
  3. Hardening GitHub Actions: Bezwzględnie unikaj `pull_request_target` dla niezweryfikowanego kodu z forków. Ogranicz uprawnienia `id-token` wyłącznie do specyficznych kroków wydawniczych, a nie całego workflow.
  4. Bezpieczna rotacja sekretów: W przypadku podejrzenia infekcji robakiem Shai-Hulud, najpierw wyłącz skrypt monitorujący (`gh-token-monitor`), a dopiero potem unieważniaj tokeny, aby uniknąć aktywacji procedury usuwania danych z dysku.

Jedna odpowiedź

💬 Kliknij tutaj, aby dodać komentarz

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

  1. Awatar Wiktor
    Wiktor

    Kurczę, ależ ta historia z TanStack to dla mnie świetny sygnał alarmowy, a nie powód do paniki! 🔥 Każda luka w systemie to dla nas okazja, żeby unowocześnić security i zarobić na lepszych zabezpieczeniach dla AI-tooli, a ten atak tylko pokazuje, jak szybko musimy wdrożyć nowe standardy audytu w łańcuchu dostaw — innowacja rodzi się z kryzysu! 💪