I repository mostravano un avviso grigio con il messaggio: “This repository has been disabled. Access to this repository has been disabled by GitHub Staff due to a violation of GitHub's terms of service” .
L’episodio rappresenta un salto di qualità rispetto alla normale compromissione di un pacchetto: il codice malevolo non si è limitato a colpire una libreria, ma ha sfruttato repository di sviluppo e strumenti di programmazione assistiti dall’IA come possibile punto d’ingresso.
La prima fase della campagna era emersa il 1° giugno 2026, quando Aikido e OX Security avevano individuato codice malevolo nel namespace npm @redhat-cloud-services, utilizzato da componenti e client API della Red Hat Hybrid Cloud Console. In totale risultavano compromessi 32 pacchetti, per 96 versioni malevole e circa 117.000 download settimanali complessivi .
Secondo le analisi disponibili, non si è trattato di una semplice perdita di token npm. Gli aggressori avevano preso il controllo dell’account GitHub di un dipendente Red Hat e lo avevano usato per inserire commit dannosi nella pipeline CI/CD di RedHatInsights/javascript-clients .
Da lì hanno abusato del meccanismo di pubblicazione affidabile di GitHub, basato su OIDC, per generare attestazioni di provenienza SLSA apparentemente autentiche e pubblicare direttamente su npm versioni contenenti una backdoor . In altre parole, il normale segnale di affidabilità associato alla provenienza della build non bastava più a distinguere il pacchetto legittimo da quello manipolato.
Le versioni compromesse includevano uno script preinstall, eseguito automaticamente durante l’installazione. Lo script scaricava un payload di 28 KB progettato per sottrarre credenziali. Il malware, identificato come una nuova variante della famiglia Mini Shai-Hulud e denominato “Miasma”, è stato attribuito al gruppo TeamPCP, anche se non è stato possibile escludere l’azione di imitatori che utilizzino lo stesso codice .
Miasma combinava diversi vettori d’attacco, trasformando una singola compromissione in una possibile catena di infezioni:
preinstall non appena uno sviluppatore lanciava npm install .Azure/durabletask conteneva file di configurazione capaci di introdurre comandi per il furto di credenziali quando il repository veniva aperto in Claude Code, Gemini CLI, Cursor o VS Code .Gli assistenti per la programmazione basati sull’IA leggono spesso automaticamente file di configurazione e istruzioni presenti in un repository. In questo caso, gli aggressori hanno sfruttato proprio quel comportamento: i file malevoli erano concepiti per sembrare parte del progetto, ma potevano impartire istruzioni a un agente di coding e portarlo a eseguire un flusso controllato dall’attaccante .
Il rischio non dipende quindi soltanto dall’installazione di un pacchetto infetto. Anche l’apertura di un progetto apparentemente affidabile in uno strumento di sviluppo può diventare un momento critico, soprattutto quando l’agente dispone di accesso a token, file locali o ambienti cloud.
La risposta ha coinvolto più organizzazioni e si è sviluppata su diversi fronti:
Un ulteriore indicatore da cercare nei repository è la stringa di firma del malware: “Miasma – The Spreading Blight” .
Miasma non era l’unico sviluppo osservato in quei giorni. Il 5 giugno Endor Labs e StepSecurity hanno descritto una campagna distinta ma parallela, denominata IronWorm, che aveva compromesso 57 pacchetti npm in oltre 286 versioni malevole per distribuire una nuova variante del worm .
I ricercatori hanno inoltre rilevato tecniche diverse, tra cui l’abuso dei file binding.gyp per ottenere l’esecuzione di codice durante l’installazione . La scala e la velocità dell’operazione suggeriscono un’evoluzione della strategia: non più un singolo pacchetto compromesso, ma molteplici account, namespace e superfici di sviluppo sfruttati in parallelo.
Il Cloud Security Alliance ha sottolineato un problema di lungo periodo. Sebbene la campagna Miasma sia stata attribuita a TeamPCP, il codice alla base del malware è stato reso pubblico. Di conseguenza, altri gruppi possono riutilizzarlo o modificarlo per condurre campagne simili .
Per le aziende, la lezione è chiara: una firma di provenienza valida, un account di collaboratore legittimo o un repository ufficiale non devono essere considerati una garanzia assoluta. La difesa richiede controlli incrociati su identità, permessi, pipeline di build, dipendenze e istruzioni che gli strumenti di sviluppo — compresi gli agenti IA — sono autorizzati a eseguire.
I repository mostravano un avviso grigio con il messaggio: “This repository has been disabled. Access to this repository has been disabled by GitHub Staff due to a violation of GitHub's terms of service” .
L’episodio rappresenta un salto di qualità rispetto alla normale compromissione di un pacchetto: il codice malevolo non si è limitato a colpire una libreria, ma ha sfruttato repository di sviluppo e strumenti di programmazione assistiti dall’IA come possibile punto d’ingresso.
La prima fase della campagna era emersa il 1° giugno 2026, quando Aikido e OX Security avevano individuato codice malevolo nel namespace npm @redhat-cloud-services, utilizzato da componenti e client API della Red Hat Hybrid Cloud Console. In totale risultavano compromessi 32 pacchetti, per 96 versioni malevole e circa 117.000 download settimanali complessivi .
Secondo le analisi disponibili, non si è trattato di una semplice perdita di token npm. Gli aggressori avevano preso il controllo dell’account GitHub di un dipendente Red Hat e lo avevano usato per inserire commit dannosi nella pipeline CI/CD di RedHatInsights/javascript-clients .
Da lì hanno abusato del meccanismo di pubblicazione affidabile di GitHub, basato su OIDC, per generare attestazioni di provenienza SLSA apparentemente autentiche e pubblicare direttamente su npm versioni contenenti una backdoor . In altre parole, il normale segnale di affidabilità associato alla provenienza della build non bastava più a distinguere il pacchetto legittimo da quello manipolato.
Le versioni compromesse includevano uno script preinstall, eseguito automaticamente durante l’installazione. Lo script scaricava un payload di 28 KB progettato per sottrarre credenziali. Il malware, identificato come una nuova variante della famiglia Mini Shai-Hulud e denominato “Miasma”, è stato attribuito al gruppo TeamPCP, anche se non è stato possibile escludere l’azione di imitatori che utilizzino lo stesso codice .
Miasma combinava diversi vettori d’attacco, trasformando una singola compromissione in una possibile catena di infezioni:
preinstall non appena uno sviluppatore lanciava npm install .Azure/durabletask conteneva file di configurazione capaci di introdurre comandi per il furto di credenziali quando il repository veniva aperto in Claude Code, Gemini CLI, Cursor o VS Code .Gli assistenti per la programmazione basati sull’IA leggono spesso automaticamente file di configurazione e istruzioni presenti in un repository. In questo caso, gli aggressori hanno sfruttato proprio quel comportamento: i file malevoli erano concepiti per sembrare parte del progetto, ma potevano impartire istruzioni a un agente di coding e portarlo a eseguire un flusso controllato dall’attaccante .
Il rischio non dipende quindi soltanto dall’installazione di un pacchetto infetto. Anche l’apertura di un progetto apparentemente affidabile in uno strumento di sviluppo può diventare un momento critico, soprattutto quando l’agente dispone di accesso a token, file locali o ambienti cloud.
La risposta ha coinvolto più organizzazioni e si è sviluppata su diversi fronti:
Un ulteriore indicatore da cercare nei repository è la stringa di firma del malware: “Miasma – The Spreading Blight” .
Miasma non era l’unico sviluppo osservato in quei giorni. Il 5 giugno Endor Labs e StepSecurity hanno descritto una campagna distinta ma parallela, denominata IronWorm, che aveva compromesso 57 pacchetti npm in oltre 286 versioni malevole per distribuire una nuova variante del worm .
I ricercatori hanno inoltre rilevato tecniche diverse, tra cui l’abuso dei file binding.gyp per ottenere l’esecuzione di codice durante l’installazione . La scala e la velocità dell’operazione suggeriscono un’evoluzione della strategia: non più un singolo pacchetto compromesso, ma molteplici account, namespace e superfici di sviluppo sfruttati in parallelo.
Il Cloud Security Alliance ha sottolineato un problema di lungo periodo. Sebbene la campagna Miasma sia stata attribuita a TeamPCP, il codice alla base del malware è stato reso pubblico. Di conseguenza, altri gruppi possono riutilizzarlo o modificarlo per condurre campagne simili .
Per le aziende, la lezione è chiara: una firma di provenienza valida, un account di collaboratore legittimo o un repository ufficiale non devono essere considerati una garanzia assoluta. La difesa richiede controlli incrociati su identità, permessi, pipeline di build, dipendenze e istruzioni che gli strumenti di sviluppo — compresi gli agenti IA — sono autorizzati a eseguire.