Iscriviti al webinar gratuito per CISO del 18 Giugno: "Dove si rompono gli LLM: la OWASP Top 10 spiegata per chi deve governare il rischio AI." Scopri di più
Hades infetta PyPI: 37 pacchetti rubano segreti CI/CD senza import, sfruttando setup.pth e Bun
La campagna Hades rappresenta una nuova ondata di attacchi alla supply chain software che colpisce il registro PyPI, con 37 wheel malevoli distribuite attraverso 19 pacchetti. Questo filone deriva dalle precedenti varianti Mini Shai Hulud e Miasma e continua a puntare sui sistemi degli sviluppatori e sulle pipeline CI CD, sfruttando canali considerati affidabili per introdurre codice dannoso già durante le fasi iniziali di installazione.
Il meccanismo chiave osservato in Hades è la presenza di un file setup.pth che viene elaborato automaticamente dal modulo site di Python all’avvio dell’interprete. In pratica, dopo l’installazione del pacchetto compromesso, il payload può essere eseguito senza che la vittima importi mai la libreria. Questa caratteristica rende la minaccia particolarmente insidiosa in ambienti dove le dipendenze vengono installate in modo automatizzato, ad esempio su runner di GitHub Actions o in container di build.
Una volta attivato, il malware scarica e installa Bun, un runtime JavaScript, e lo utilizza per eseguire un payload offuscato in JavaScript. La scelta di Bun permette agli attaccanti di far girare codice JavaScript anche su sistemi dove Node.js non è presente, riducendo attriti e controlli tradizionali legati ai package manager. Prima di procedere, il codice effettua anche verifiche di ambiente, includendo controlli legati alla locale russa.
L’obiettivo principale è il furto di credenziali e segreti di sviluppo. Tra i dati presi di mira rientrano token e configurazioni collegati a GitHub, npm, PyPI e RubyGems, oltre a servizi cloud e DevOps come AWS, GCP, Azure, Kubernetes, Docker, Vault e JFrog. Vengono cercati anche file e tracce locali ad alto valore come chiavi SSH, shell history, file env, configurazioni npmrc e pypirc e credenziali accessibili ai runner.
Un ulteriore elemento di evoluzione è la capacità di depistare strumenti di analisi basati su modelli linguistici tramite prompt injection in chiaro, con l’intento di far classificare il pacchetto come sicuro. In alcune varianti, l’entry point è inserito direttamente in init.py tramite un import hook offuscato. Il malware interroga inoltre contenuti su GitHub per recuperare stringhe Base64 e componenti aggiuntivi, inclusi dropper in Python.
Tra le funzioni avanzate figurano propagazione laterale via SSH o SCP, abuso di configurazioni OIDC per pubblicare pacchetti trojanizzati, estrazione di segreti da runner CI, backdoor di workspace per attivazioni tramite IDE o assistenti AI e un servizio di persistenza con logica distruttiva in caso di revoca del token.