Worm Mini Shai-Hulud: 170+ pacchetti infetti, SLSA bypassata

Mini Shai-Hulud worm ha infettato oltre 170 pacchetti npm/PyPI sfruttando GitHub Actions e ottenendo attestazioni SLSA valide, rendendo inutile la provenance.

Contenuto

Worm Mini Shai-Hulud: 170+ pacchetti infetti, SLSA bypassata
Worm Mini Shai-Hulud: 170+ pacchetti infetti, SLSA bypassata

L’11 maggio 2026, il gruppo TeamPCP ha sferrato un attacco supply chain dirompente: il worm Mini Shai-Hulud ha compromesso oltre 170 pacchetti npm e PyPI, sfruttando una catena di vulnerabilità in GitHub Actions per pubblicare versioni malevole con attestazione SLSA valida. In poche ore sono state distribuite più di 400 versioni infette, colpendo ecosistemi come TanStack, Mistral AI, UiPath, OpenSearch e Guardrails AI. La notizia brucia perché la combinazione di un dead‑man’s switch distruttivo e l’aggiramento della provenance firma un precedente che mette in crisi la fiducia nei meccanismi di integrità software.

Punti chiave
  • Il worm ha colpito 42 pacchetti degli ecosistemi TanStack, Mistral AI, UiPath, OpenSearch e Guardrails AI, con oltre 400 versioni malevole pubblicate in una finestra di 5 ore.
  • L’attacco ha sfruttato tre vulnerabilità concatenate in GitHub Actions – Pwn Request, cache poisoning ed estrazione del token OIDC dalla memoria – per firmare artefatti con attestazione SLSA legittima.
  • Un dead‑man’s switch incluso nel malware esegue rm -rf ~/ se lo sviluppatore revoca il token npm compromesso, rendendo la reazione istintiva pericolosa.
  • I pacchetti TanStack infetti contano circa 12 milioni di download settimanali e un punteggio CVSS di 9.6; i download cumulativi di tutti i pacchetti colpiti superano i 518 milioni.

La catena delle tre vulnerabilità: dall’avvelenamento della cache al furto del token OIDC

L’operazione non inizia con un furto di credenziali statiche, ma con un pull request malevolo contro un repository che espone un workflow pull_request_target. Questa azione – già nota come Pwn Request – consente di eseguire codice nel contesto del repository target senza forzare l’approvazione. Il payload inietta file contaminati nella cache di GitHub Actions, avvelenando l’ambiente per le esecuzioni successive.

Quando il workflow legittimo di build riparte, i job ereditano la cache infetta. A quel punto il codice dell’attaccante cerca il processo Runner.Worker, legge /proc/<pid>/mem e ne estrae il token OIDC effimero che GitHub usa per autenticare il runner verso npm. Con quel token, il worm pubblica nuove versioni del pacchetto direttamente dal registro npm, generando un’attestazione SLSA firmata senza dover mai toccare una password o un token npm persistente. La firma risulta quindi “valida” perché prodotta attraverso la pipeline ufficiale, di fatto aggirando la garanzia di integrità che la provenance intende fornire.

Il dead‑man’s switch: perché revocare il token distrugge il sistema

Mini Shai-Hulud non si limita a esfiltrare dati. Il malware installa un daemon che monitora continuamente il token npm compromesso tramite un polling verso l’endpoint dei token npm. Se la richiesta restituisce un errore 40X – condizione che si verifica quando il proprietario revoca il token – il daemon attiva un wiper, eseguendo rm -rf ~/ sulla macchina che ha effettuato la pubblicazione. Il commento nel codice è esplicito: “Se revochi questo token, cancellerà il computer del proprietario.”

Il meccanismo funge da trappola: la reazione standard del developer – revocare immediatamente il token sospetto – diventa l’innesco per la distruzione dei dati locali, compresi repository di lavoro e configurazioni. Per questo gli analisti raccomandano di bonificare completamente il sistema prima di procedere con qualsiasi revoca, perché un host ancora compromesso reagirà cancellando tutto.

Perché SLSA non basta: quando la pipeline viene firmata dopo il compromesso

La novità che ha fatto scalpore è che i pacchetti malevoli sono risultati validamente attestati secondo lo standard SLSA. Come conferma Ashish Kurmi di StepSecurity, si tratta del “primo worm npm documentato che produce pacchetti validamente attestati [SLSA].” Il protocollo di provenance non ha ceduto – ha funzionato esattamente come progettato – ma ha certificato un artefatto generato da una pipeline già compromessa.

Il problema sta nel momento della firma: l’attestazione viene emessa dopo l’esecuzione del codice nella pipeline. Se un attaccante riesce a iniettare codice prima di quel punto, l’attestazione diventa carta bollata per un software malevolo. È una distinzione cruciale che obbliga i team DevOps a spostare il controllo a monte, verificando l’integrità dell’ambiente di build e non solo la provenienza dell’artefatto.

“È il primo worm npm documentato che produce pacchetti validamente attestati [SLSA].” – Ashish Kurmi, StepSecurity

Oltre l’Europa: geofencing e infrastruttura decentralizzata

Il malware adotta tecniche di evasione geografica. Termina l’esecuzione se rileva impostazioni di lingua russa e ha una probabilità di 1 su 6 di attivarsi quando la localizzazione corrisponde a Israele o Iran, riducendo l’esposizione in aree dove l’attaccante potrebbe temere ripercussioni legali immediate. Per l’esfiltrazione dei dati, il worm usa il protocollo decentralizzato Session, domini typosquatting e repository GitHub “dead‑drop”, rendendo il tracciamento dei flussi più complesso.

Nonostante l’infrastruttura sia sofisticata, rimangono molti punti oscuri: il numero esatto di aziende che hanno eseguito i pacchetti infetti prima della rimozione non è noto, e l’identità reale del gruppo TeamPCP si nasconde dietro lo pseudonimo DeadCatx3. TanStack non ha subito un furto di token, ma i suoi flussi di CI/CD sono stati dirottati attraverso la cache poisoning.

Cosa fare adesso

1. Non revocare i token npm senza prima isolare e bonificare l’host. Se il dead‑man’s switch è attivo, la revoca cancella i dati locali. Spegnere la macchina o disconnetterla dalla rete, analizzare il filesystem alla ricerca del daemon gh‑token‑monitor e solo dopo procedere con la revoca.

2. Auditare tutti i workflow pull_request_target e disabilitarli dove non strettamente necessario. La superficie d’attacco parte da qui. Sostituirli con pull_request o adottare ambienti di build isolati con sandboxing, riducendo l’esposizione alla cache poisoning.

3. Verificare l’integrità del runner prima della firma. Integrare checksum dell’ambiente, confrontare l’output del runner con baseline conosciute e monitorare letture anomale di /proc/<pid>/mem. L’attestazione SLSA va accoppiata a prove che la pipeline non sia stata manomessa.

4. Ispezionare le dipendenze delle ultime release colpite. Controllare gli hash dei pacchetti TanStack (e degli altri ecosistemi) installati localmente. Le versioni malevole sono state rimosse da npm, ma chi ha eseguito npm install nella finestra critica potrebbe avere copie in cache o in lockfile da sostituire.

L’attacco Mini Shai-Hulud riscrive il manuale della risposta agli incidenti supply chain: la provenance da sola non salva nessuno se l’origine della build è contaminata. La corsa a correggere con un semplice revoke, senza aver prima spento il wiper, è esattamente l’errore che il malware aspetta. Per i team Security e DevOps la lezione è netta: l’integrità si misura da quanto accade prima della firma, non solo dalla firma stessa.

Fonti

Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.

Fonti

Link utili

Apri l'articolo su DeafNews