Nel mondo dello sviluppo, fidarsi del codice open source è diventata un’abitudine consolidata; spesso necessaria. Ma ad aprile 2025, qualcosa ha improvvisamente interrotto questo flusso di fiducia; tre innocui moduli Go apparsi su GitHub hanno rivelato un volto oscuro.

Niente avvisi, niente finestre di dialogo: l’esecuzione era immediata. In pochi secondi, i dati venivano cancellati; la macchina diventava inservibile. Non si trattava di un semplice bug o di un errore accidentale; era un attacco mirato, studiato per distruggere. In un mondo dove la velocità è tutto, quei pochi secondi bastavano per mandare offline un’intera infrastruttura.
A lanciare l’allarme è stato il team di ricerca di Socket, azienda specializzata in sicurezza della supply chain. Kush Pandya, uno dei ricercatori, ha raccontato come siano stati rilevati comportamenti anomali in tre moduli Go apparentemente innocui. Grazie agli strumenti di analisi automatizzata, Socket ha individuato codice offuscato progettato per scaricare e avviare payload da server remoti.
“Questi moduli si mascheravano bene. Solo un’attenta analisi dei pattern di rete e delle funzioni offuscate ha permesso di capire il vero scopo“, ha dichiarato Pandya.
Il team ha agito tempestivamente: ha segnalato i repository a GitHub e avvisato la comunità. Le loro scoperte non solo hanno evitato ulteriori danni, ma hanno anche alimentato un dibattito fondamentale sulla sicurezza nell’ecosistema Go. Socket ha pubblicato una serie di articoli tecnici, tra cui questo approfondimento dettagliato.
Perché proprio i moduli Go?

Il linguaggio Go punta sulla flessibilità, sull’efficienza e sulla velocità di sviluppo; è molto usato per progetti moderni. La sua comunità, sempre più ampia, utilizza GitHub come principale fonte di moduli esterni; è un punto di forza, ma anche un rischio.
Questa apertura totale, infatti, porta con sé una criticità importante: l’assenza di un controllo centralizzato. Non esistono meccanismi di verifica automatica; nessuno conferma che un modulo sia affidabile prima dell’integrazione.
In questo vuoto di sorveglianza, i malintenzionati trovano terreno fertile. Possono creare pacchetti con nomi familiari, che sembrano versioni aggiornate di tool già noti. Alcuni si camuffano persino come fork innocui; in realtà, iniettano codice dannoso.
Un errore nel copia-incolla dell’import o un aggiornamento automatico sbagliato, ed è fatta: il modulo malevolo entra nel progetto. Nessuna richiesta esplicita di permessi; nessun pop-up d’avvertimento.
Molti ambienti CI/CD integrano direttamente questi moduli, rendendo l’intero flusso vulnerabile. In pochi minuti di disattenzione, un modulo tossico diventa parte del codice di produzione. Il risultato è un attacco che arriva travestito da dipendenza.
Il funzionamento dei moduli Go malevoli

Lo schema è tanto semplice quanto devastante; è questo il motivo per cui ha funzionato così bene. Ogni modulo esegue un controllo iniziale sull’ambiente: verifica se il sistema operativo è Linux. Se il risultato è positivo, entra in azione.
Apparentemente dedicati alla trasformazione dei dati o alla gestione di connessioni sicure TLS, i moduli prototransform
, go-mcp
e tlsproxy
sembravano legittimi; nulla nel nome faceva pensare a qualcosa di anomalo. Una volta integrati in ambienti di sviluppo o server Linux, questi moduli attivavano una sequenza nascosta e molto pericolosa. Al loro interno, codice offuscato prendeva il controllo.
I moduli Go utilizzavano wget
per scaricare uno script remoto, proveniente da un server controllato dagli attaccanti; tutto in modo silenzioso. Lo script in questione si chiama done.sh
, ovvero un semplice script Bash; all’apparenza innocuo, dentro nascondeva un comando distruttivo.
Il comando è un dd if=/dev/zero of=/dev/sda
; questa stringa forza la scrittura di zeri su tutto il disco primario. Non parliamo di una cancellazione logica; è una sovrascrittura completa, irreversibile.
La macchina diventa subito inservibile; non si può più avviare, nemmeno in modalità di ripristino. Il processo avviene in pochi secondi; non genera log evidenti. Nessun antivirus ha tempo per reagire; nessuna misura di sicurezza locale è efficace.
I dati non vengono semplicemente eliminati; vengono letteralmente annientati. Anche i tool forensi più avanzati non potrebbero recuperare i dati. L’effetto è quello di una bomba digitale: rapido, silenzioso, totale.
Comparazione delle piattaforme e rischi
Piattaforma | Gestione pacchetti | Controllo centralizzato | Vulnerabile a moduli offuscati |
---|---|---|---|
npm | Sì | Alto | Sì |
PyPI | Sì | Alto | Sì |
Go Modules | No | Basso | Altissimo |
A differenza di npm o PyPI, che impongono controlli severi su publisher, nomi e versioni dei pacchetti, l’ecosistema Go si affida totalmente a GitHub. Nessun ente centrale filtra o valida i moduli caricati; questa apertura, inizialmente vista come punto di forza, si rivela ora una debolezza strutturale. Chiunque può pubblicare un modulo con nome familiare; chiunque può camuffare codice malevolo sotto una documentazione credibile.
Cosa possiamo imparare da questo episodio?
Il caso dei Go Modules non è solo un incidente isolato; è un segnale di quanto sia fragile l’attuale catena di approvvigionamento del software. Essere su GitHub da mesi non garantisce nulla; avere uno storico visibile non è sufficiente. Anche un codice apparentemente “familiare” può contenere una minaccia ben nascosta.
Servirebbe un cambio radicale di mentalità. Smettere di fidarsi ciecamente; ogni dipendenza va verificata. Ogni riga di codice esterno va trattata come potenzialmente pericolosa.
- Analizzare ogni modulo prima di integrarlo
- Automatizzare il controllo delle dipendenze, ma non abbassare la guardia
- Aggiungere un monitoraggio attivo in fase di runtime; non solo in fase di build
La supply chain moderna è un insieme complesso di componenti, ma alla base resta la fiducia. Se quella fiducia viene violata, le conseguenze possono essere devastanti. Non si tratta più solo di bug casuali; si tratta di attacchi calcolati, inseriti con precisione chirurgica nei flussi CI/CD globali.
Conclusioni: il vero rischio è l’abitudine
Ci si abitua a installare moduli con un semplice comando; quasi senza pensarci. È un gesto automatico: si importa, si compila, si distribuisce. La routine prende il sopravvento; il senso critico si affievolisce.
Ma quando la familiarità si trasforma in negligenza, anche una shell script di due righe può fare danni enormi. Una dipendenza apparentemente sicura può contenere una minaccia; spesso passa inosservata fino al momento dell’attacco. Il controllo delle dipendenze è una responsabilità cruciale, non un dettaglio tecnico. Trascurarlo significa lasciare aperta la porta principale. E chi è fuori, prima o poi, entrerà.