Il primo dirottamento di Internet: Un volontario ha quasi messo in ginocchio Linux
Cinquecento millisecondi.
Mezzo secondo.
Il margine per cui internet non è stato dirottato.
Marzo, 2024. San Francisco.
Un ingegnere Microsoft di trentotto anni di nome Andres Freund sta eseguendo benchmark su PostgreSQL su un sistema di sviluppo Debian. È un compito di routine. Freund è un committer del progetto PostgreSQL. Testa le prestazioni del database rispetto alle distribuzioni Linux pre-release come parte regolare del suo lavoro.
Qualcosa non va nell'ambiente di test.
I tentativi di accesso SSH falliti — quelli che colpiscono costantemente ogni server esposto al pubblico, bot automatizzati che provano combinazioni casuali di nomi utente e password — stanno usando molta più CPU del dovuto. Un accesso fallito dovrebbe terminare rapidamente. Questi non stanno terminando rapidamente.
Freund lo nota.
Indaga ulteriormente. Gli accessi SSH riusciti, sulla sua macchina locale, stanno impiegando cinquecento millisecondi in più rispetto al tempo base di circa cento millisecondi.
Mezzo secondo.
Freund esegue la connessione sotto Valgrind, uno strumento di debug della memoria. Valgrind genera errori che puntano a liblzma — una libreria di compressione che il demone SSH non ha alcun motivo legittimo di invocare.
È a questo punto che l'indagine diventa urgente.
Nei giorni successivi, Freund traccia gli errori. Scopre che il processo sshd sulla sua macchina di test sta eseguendo codice da liblzma durante l'autenticazione. Disseziona il sorgente xz-utils nel repository git. Il sorgente è pulito. Ma il tarball di rilascio — l'archivio sorgente compresso che Debian scarica ed elabora — contiene un file chiamato build-to-host.m4 che non è nel sorgente git.
Quel file contiene uno script offuscato. Lo script decodifica uno script bash nascosto all'interno di un file di test chiamato bad-3-corrupt_lzma2.xz — un file mascherato da input di test difettoso per la gestione degli errori della libreria di compressione. Lo script bash decodifica un secondo file, good-large_compressed.lzma, utilizzando un'offuscazione personalizzata combinata con la decrittazione RC4.
Ciò che emerge alla fine della catena è un oggetto condiviso compilato.
L'oggetto condiviso è una backdoor.
La sera del ventinove marzo 2024 — mentre, a suo dire, ascoltava un podcast sulla sicurezza durante una pausa cucina — Andres Freund pubblica le sue scoperte sulla mailing list oss-security di Openwall.
Entro 24 ore, Red Hat gli ha assegnato un numero CVE. Il punteggio di gravità è dieci punto zero. Il più alto possibile. CISA emette un avviso di emergenza. Debian, SUSE, Fedora, Arch e Kali ripristinano tutti i pacchetti interessati. GitHub sospende l'account del manutentore che ha commesso la backdoor.
La backdoor, si scopre, era prevista per essere distribuita con le distribuzioni Linux stabili entro circa due settimane.
Freund l'ha scoperta per caso.
Questo è il fascicolo sul caso di ciò che è accaduto. Su ciò che è quasi accaduto. E su cosa fosse l'operazione.
L'obiettivo dell'attacco era xz-utils.
xz-utils è un toolkit di compressione. Il suo strumento principale, il comando xz, produce file .xz — l'equivalente Unix dei file .zip, con rapporti di compressione più elevati. Sotto lo strumento da riga di comando c'è una libreria chiamata liblzma, che fornisce l'algoritmo di compressione ad altri programmi che ne hanno bisogno.
liblzma viene caricata, direttamente o indirettamente, da un'enorme quantità di software di sistema Linux. I gestori di pacchetti si collegano ad essa. Le utilità di sistema si collegano ad essa. E — attraverso una catena che gli attaccanti hanno specificamente progettato — il demone OpenSSH si collega ad essa.
La catena funziona così. Sulla maggior parte delle principali distribuzioni Linux, sshd è patchato per supportare il meccanismo di notifica del servizio di systemd, chiamato sd_notify. Quella patch fa sì che sshd carichi una libreria chiamata libsystemd. E libsystemd, a sua volta, carica liblzma.
Il risultato: sulla maggior parte dei server Linux di produzione, il demone SSH — il processo che accetta accessi remoti — carica una libreria di compressione all'avvio, anche se SSH non comprime il traffico di autenticazione.
Comprometti la libreria di compressione e comprometti il demone che controlla l'accesso remoto a ogni server Linux su internet.
Al momento del quasi-deployment della backdoor, Linux gestiva circa il novantasei percento del milione di server web più importanti del mondo. Tutti i cinquecento supercomputer più potenti del mondo. Circa il novantadue percento delle macchine virtuali su Amazon Web Services, Google Cloud e Microsoft Azure. Android, che alimenta circa l'ottantacinque percento degli smartphone mondiali, è basato sul kernel Linux.
La backdoor xz-utils, se fosse stata distribuita con le distribuzioni stabili, sarebbe stata presente in una frazione sostanziale di tutto quanto sopra.
Alex Stamos, l'ex chief security officer di Facebook, ha descritto il risultato previsto in una frase: una chiave maestra per qualsiasi server SSH sulla Terra.
Questo è il motivo per cui il CVE ha ottenuto un punteggio di dieci punto zero.
Il design tecnico della backdoor merita di essere compreso con precisione.
L'attaccante ha sfruttato il fatto che i tarball di rilascio contengono file auto-generati che non esistono nel sorgente git controllato da versione. Nello specifico, il file build-to-host.m4 nel tarball conteneva una singola riga che era stata modificata per iniettare uno script offuscato nella fase di configurazione del processo di build.
Ciò significava che chiunque leggesse il codice sorgente git non poteva vedere la backdoor. Chiunque costruisse da git non poteva attivarla. Solo le distribuzioni Linux, che costruiscono dai tarball rilasciati — che sono praticamente tutte — avrebbero eseguito l'iniezione.
La catena di iniezione era in tre fasi. La prima fase estraeva uno script bash da un file mascherato da input di test di compressione corrotto. La seconda fase utilizzava quello script bash per decodificare un secondo file di test in un oggetto condiviso compilato. La terza fase collegava l'oggetto condiviso al binario compilato di liblzma.
L'oggetto condiviso utilizzava una legittima funzionalità di glibc chiamata IFUNC — risolutori di funzioni indirette — per dirottare una specifica funzione OpenSSH chiamata RSA_public_decrypt.
RSA_public_decrypt è la funzione OpenSSH che convalida le firme RSA durante l'autenticazione del certificato. Ogni volta che un client tenta di connettersi utilizzando un certificato RSA, sshd chiama questa funzione per verificare la firma.
Con la backdoor attiva, sshd chiamava invece il codice dell'attaccante.
Il codice dell'attaccante ispezionava il modulo pubblico RSA — il grande valore intero passato nel certificato del client. Normalmente, questo valore è usato nella verifica RSA standard. Nella backdoor, era in realtà un contenitore di payload. Il codice decrittava il payload usando una chiave simmetrica ChaCha20 hardcoded. Poi verificava la firma del payload decrittato usando una chiave pubblica Ed448 hardcoded.
Se la firma verificava — significando che il payload era firmato dalla chiave privata dell'attaccante — il codice eseguiva i comandi shell incorporati come root.
Questo è ciò che i ricercatori di sicurezza chiamano "gated remote code execution". La backdoor si attiva solo quando l'attaccante presenta una firma crittografica valida. Un attaccante comune che si imbattesse nella backdoor non potrebbe sfruttarla. Solo il detentore della chiave privata Ed448 potrebbe attivarla.
Questo dettaglio è importante. Un attore criminale che crea una vulnerabilità in vendita la rende utilizzabile da chiunque la acquisti. Un attore statale che costruisce una capacità di accesso persistente la rende esclusiva. Solo loro, e chiunque essi autorizzino esplicitamente, possono usare la chiave.
La backdoor xz-utils è stata progettata per uso esclusivo. Non era una vulnerabilità. Era un asset strategico.
L'operazione che ha prodotto la backdoor è iniziata il ventisei gennaio 2021.
In quella data, un account GitHub è stato creato con il nome utente JiaT75. Il nome visualizzato era Jia Tan. L'account non aveva alcuna impronta digitale precedente. Nessuna presenza sui social media con quel nome. Nessun intervento a conferenze. Nessun precedente contributo open-source. Nessuna apparizione in violazioni di dati. Il nome sembra essere uno pseudonimo.
Il primo contributo pubblico di JiaT75 a xz-utils è avvenuto il ventinove ottobre 2021 — nove mesi dopo la creazione dell'account. Si trattava di una piccola patch per un file di configurazione dell'editor. Innocua. Senza importanza. Il tipo di contributo che stabilisce una presenza senza attirare l'attenzione.
Nei successivi due anni e cinque mesi, JiaT75 ha prodotto più di cinquecento commit a progetti open-source. La stragrande maggioranza erano miglioramenti legittimi — revisioni del codice, traduzioni, manutenzione dell'integrazione continua, correzioni di bug. Lavoro utile. Genuinamente d'aiuto.
Circa otto di quei commit erano malevoli.
Il rapporto conta. Sessanta a uno. Per ogni commit malevolo, l'operatore ha prodotto sessanta pezzi di lavoro reale e utile. Questo è ciò che ha reso il pattern impossibile da rilevare tramite l'analisi statistica delle anomalie. L'attaccante ha dedicato due anni e mezzo di sforzi per produrre contributi genuinamente preziosi, puramente per accumulare la fiducia necessaria a commettere le otto modifiche che alla fine contavano.
L'operazione non ha lavorato da sola.
A partire da aprile 2022, un utente che si faceva chiamare Jigar Kumar è apparso sulla mailing list xz-devel. Kumar non aveva precedenti sulla lista prima di aprile 2022. La sua intera presenza consisteva in email di pressione al principale manutentore del progetto, lamentandosi dei tempi di risposta lenti e chiedendo l'aggiunta di un nuovo manutentore.
Nel maggio 2022, un secondo account — Dennis Ens — è apparso, chiedendo informazioni sullo stato di manutenzione della versione Java di xz-utils, e seguendo con ulteriori messaggi di pressione.
Entrambi gli account avevano lo stesso profilo. Nessuna presenza digitale prima del 2022. Nessuna attività al di fuori della mailing list xz-devel. Nessuna partecipazione ad altri progetti prima o dopo la campagna di pressione.
Nel febbraio 2024 — settimane prima che la backdoor fosse inserita — è apparso un terzo account. Hans Jansen. Il ruolo di Jansen era quello di fare pressione sui manutentori Debian affinché adottassero la versione compromessa di xz-utils il prima possibile. Il venticinque marzo 2024, Hans Jansen ha presentato un bug report a Debian richiedendo esplicitamente l'aggiornamento.
Quattro giorni dopo, Andres Freund ha pubblicato le sue scoperte su oss-security.
Due account di supporto aggiuntivi — krygorin4545 e misoeater91 — hanno fornito pressione di sottofondo in vari thread, seguendo lo stesso schema. Nessuna presenza pre-operazione. Partecipazione solo durante finestre di pressione specifiche. Scomparsa dopo il raggiungimento degli obiettivi.
L'analisi post-incidente di Kaspersky ha notato che lo stile geografico dei nomi dei "sock-puppet" era incoerente — singaporiano, europeo, indiano — suggerendo che l'operatore aveva deliberatamente disperso le identità di copertura per evitare l'apparenza di coordinamento. Ma il pattern comportamentale — tempistica delle apparizioni, punti di pressione sincronizzati, scomparsa collettiva dopo ogni obiettivo — suggeriva un singolo operatore o un team strettamente coordinato.
La pressione ha funzionato.
Il ventinove giugno 2022, il manutentore principale di xz-utils — uno sviluppatore software finlandese di nome Lasse Collin — ha risposto alla mailing list e ha dichiarato che Jia Tan avrebbe avuto un ruolo più importante nel progetto d'ora in poi, ed era, in pratica, già funzionante come co-manutentore.
Questo è stato il passaggio di consegne.
Per capire cosa fosse appena successo, è necessario comprendere quale fosse la posizione di Lasse Collin.
Collin aveva mantenuto xz-utils, da solo, dal 2009. Il progetto era non retribuito. Ci lavorava nel suo tempo libero. All'inizio di quello stesso mese, in una risposta alla mailing list di giugno 2022, Collin aveva pubblicamente riconosciuto di avere problemi di salute mentale a lungo termine. Si riferiva al progetto, con le sue stesse parole, come a un progetto amatoriale non retribuito.
Lasse Collin non è responsabile di ciò che è accaduto. La comunità della sicurezza è stata unanime su questo punto. Collin stava svolgendo un lavoro amatoriale non retribuito. Stava affrontando problemi di salute documentati. Era sotto pressione sostenuta e coordinata da quella che si è rivelata essere un'operazione di intelligence a livello statale. Il sistema che lo ha posto in quella posizione lo ha deluso. Non ha deluso il sistema.
Ciò che l'operazione ha sfruttato non è stata la competenza di Collin. È stata la sua posizione strutturale — solo, non retribuito, alle prese con stress del mondo reale, responsabile della manutenzione di infrastrutture utilizzate da miliardi di persone, senza supporto istituzionale.
L'attaccante professionista ha identificato quella struttura e l'ha presa di mira.
Una volta completato il passaggio di consegne, è iniziata la preparazione dell'infrastruttura.
Nell'ottobre 2022, Jia Tan è stato aggiunto all'organizzazione Tukaani su GitHub. Nel dicembre 2022, ha creato la struttura organizzativa del repository e ha effettuato la sua prima release. Nel marzo 2023, ha cambiato l'email di contatto di sicurezza principale su OSS-Fuzz di Google — la piattaforma automatizzata di scansione delle vulnerabilità — dall'indirizzo di Lasse Collin al suo. Da quel momento in poi, qualsiasi segnalazione di bug rilevante per la sicurezza avrebbe raggiunto Jia Tan prima di chiunque altro.
Nel giugno 2023, Jia Tan ha introdotto l'infrastruttura di risoluzione IFUNC in liblzma. I commit sembravano essere un legittimo lavoro di ottimizzazione delle prestazioni. In retrospettiva, erano gli "hook" attraverso i quali la backdoor sarebbe stata infine iniettata.
Nel luglio 2023, Jia Tan ha aperto una pull request su OSS-Fuzz per disabilitare il fuzzing IFUNC per xz. La modifica era intesa a impedire alla pipeline di fuzz-testing di rilevare anomalie nella backdoor basata su IFUNC quando sarebbe stata infine distribuita.
Nel febbraio 2024, un commit separato ha interrotto il rilevamento del sistema di build di Landlock — una funzionalità di sicurezza del kernel Linux che restringe i privilegi di processo. Il commit ha disabilitato la sandbox di xz su sistemi che altrimenti l'avrebbero applicata.
Il ventitré febbraio e il nove marzo 2024, la backdoor stessa è stata inserita in due fasi, impacchettata come parte delle release xz-utils 5.6.0 e 5.6.1.
Diciannove giorni dopo, Andres Freund ha notato un ritardo SSH di 500 millisecondi.
I ricercatori che analizzavano i metadati dei commit lasciati dall'operazione hanno notato un pattern.
I timestamp dei commit di Jia Tan si raggruppavano principalmente nei fusi orari dell'Europa Centrale o dell'Europa Orientale. Gli orari di lavoro corrispondevano approssimativamente dalle nove del mattino alle cinque del pomeriggio ora dell'Europa Centrale. L'attività è continuata durante le principali festività pubbliche cinesi e si è interrotta durante diverse festività europee.
Il nome, e la geografia operativa dichiarata, erano dell'Est asiatico. Il pattern di lavoro effettivo era europeo.
Questo è ciò che gli analisti di intelligence chiamano "fuga di firma". Un operatore ha passato oltre trenta mesi a mantenere un'identità di copertura. Ma i timestamp automatici incorporati in ogni commit git rivelavano periodicamente la posizione effettiva della macchina che stava eseguendo il commit.
Tre attribuzioni candidate sono apparse nelle analisi pubbliche di ricercatori di sicurezza con esperienza rilevante.
Il ricercatore di sicurezza americano Dave Aitel, ex scienziato informatico della NSA, ha pubblicamente valutato che l'operazione si adatta al pattern attribuibile ad APT29 — il gruppo di minaccia persistente avanzata attribuito dai governi di Stati Uniti e Regno Unito al Servizio di Intelligence Estera della Russia. APT29 è noto per campagne di spionaggio di lunga durata, incluso il compromesso della catena di approvvigionamento SolarWinds rivelato nel 2020. Gli orari di lavoro allineati con il fuso orario di Mosca corrispondono al pattern di Jia Tan.
Costin Raiu — l'ex direttore del Global Research and Analysis Team di Kaspersky, con tre decenni di esperienza nell'attribuzione di operazioni sofisticate — ha identificato tre candidati plausibili in un'intervista podcast di febbraio 2026. L'APT29 della Russia era uno. L'APT41 della Cina, associato al Ministero della Sicurezza di Stato, era un secondo. Il Lazarus Group della Corea del Nord, già presente nella copertura precedente di Fragment Zero, era un terzo.
Ad aprile 2026, nessun servizio di intelligence ha pubblicamente attribuito l'operazione. Nessuna accusa è stata formalizzata. Nessun arresto è stato effettuato. La vera identità di Jia Tan rimane sconosciuta.
Ciò che non è in discussione, tra i ricercatori con rilevante esperienza nel settore, è che la pazienza dell'operazione, la sicurezza operativa, la sofisticazione crittografica e l'impegno di risorse sono coerenti con un servizio di intelligence di uno stato-nazione — o un suo stretto equivalente funzionale — e sono incoerenti con l'attività criminale individuale o hacktivista.
Questo non è stato il lavoro di un hacker solitario.
L'operazione xz-utils è stata possibile grazie a una caratteristica strutturale di come la civiltà tecnologica moderna costruisce la sua infrastruttura critica.
Il software che alimenta internet è stato costruito, in misura sostanziale, da volontari che lavorano nel loro tempo libero. Le aziende che traggono profitto da questo software hanno restituito una piccola frazione del suo valore economico.
xz-utils era incluso in ogni principale distribuzione Linux e girava su un'enorme frazione dei server globali. Il suo manutentore non era retribuito. OpenSSL, la libreria che fornisce la crittografia alla maggior parte di internet, era notoriamente sotto organico prima della vulnerabilità Heartbleed nel 2014. Log4j, la libreria di logging Java dietro la vulnerabilità Log4Shell nel 2021, era mantenuta da una manciata di volontari — dietro l'infrastruttura aziendale a livello globale.
In ogni caso, una libreria trattata come infrastruttura critica da aziende multimiliardarie era mantenuta con risorse da progetto amatoriale.
L'operazione xz-utils non ha inventato questa vulnerabilità strutturale. L'ha sfruttata.
L'undici aprile 2024 — due settimane dopo la rivelazione di Freund — la U.S. Cybersecurity and Infrastructure Security Agency ha pubblicato una dichiarazione formale riconoscendo il problema strutturale. La posizione di CISA: l'onere di mettere in sicurezza l'infrastruttura open-source non può ricadere sui singoli manutentori non retribuiti, e le aziende che utilizzano software open-source devono contribuire, finanziariamente o tramite tempo di sviluppatori, per produrre un ecosistema sostenibile.
Le raccomandazioni non erano vincolanti. Erano migliori pratiche. Dipendevano dall'adozione volontaria da parte di aziende la cui struttura di incentivi non aveva storicamente premiato l'investimento.
Nel giro di un mese, la Linux Foundation e l'Open Source Security Foundation hanno pubblicato un avviso congiunto, avvertendo che tentativi simili di acquisizione tramite ingegneria sociale erano già in corso contro numerosi altri progetti open-source. La OpenJS Foundation — che mantiene Node.js, jQuery e l'infrastruttura JavaScript correlata — ha pubblicamente rivelato di aver ricevuto una campagna di pressione coordinata seguendo lo stesso pattern di xz-utils, e di averla respinta solo perché la rivelazione di xz-utils aveva insegnato alla comunità cosa cercare.
Un rapporto della Linux Foundation del 2026 ha documentato il pattern più ampio attraverso l'ecosistema. La scoperta principale del rapporto: ciò che è accaduto con xz-utils non è stato un incidente singolare. Era un metodo. Il metodo viene tentato su vasta scala. La maggior parte dei rilevamenti riusciti sta avvenendo perché il caso xz-utils ha fornito una firma da confrontare.
Quanti rilevamenti falliti ci siano — operazioni già in corso che non sono ancora state catturate — è per costruzione impossibile da contare da fonti pubbliche.
Due episodi fa su Fragment Zero, il fascicolo sul caso dell'ipotesi della Foresta Oscura si è chiuso con un'osservazione. La dottrina che Liu Cixin ha formalizzato nel 2008 — il silenzio come sopravvivenza, l'occultamento come necessità strategica, la rivelazione come rischio esistenziale — è il più antico principio di sicurezza operativa nella storia dei conflitti umani.
Ogni forza che abbia mai operato in condizioni di minaccia incerta e capacità asimmetrica è giunta alla stessa conclusione.
Sii silenzioso. Muoviti con cautela. Presumi l'osservazione.
L'operazione xz-utils è la Foresta Oscura eseguita all'interno di una relazione di fiducia umana.
L'attaccante non ha violato un firewall. L'attaccante non ha sfruttato una "zero-day". L'attaccante non ha aggirato alcuna protezione crittografica. L'attaccante ha fatto qualcosa di molto più semplice. L'attaccante si è nascosto in bella vista per tre anni, producendo lavoro utile, costruendo una credibilità genuina, comportandosi esattamente come qualsiasi altro collaboratore utile, mentre preparava — silenziosamente, pazientemente, con una pazienza strategica inimmaginabile per la maggior parte delle organizzazioni tecniche — il momento in cui l'infrastruttura preparata sarebbe stata usata.
L'attacco è riuscito quasi interamente perché è stato silenzioso. Non è stato rilevato da alcuno strumento di sicurezza, né da alcun audit, né da alcuna difesa istituzionale, ma dall'osservazione accidentale di un ingegnere di cinquecento millisecondi di latenza inspiegabile.
La dichiarazione di Andres Freund sulla sua scoperta, pubblicata su Mastodon nelle settimane successive alla rivelazione, dovrebbe chiudere il fascicolo.
Affidarsi alla fortuna in futuro è una cattiva strategia.
La backdoor xz-utils è stata scoperta.
La versione Foresta Oscura dell'operazione — quella che mira alle relazioni di fiducia piuttosto che ai sistemi informatici — è in corso proprio ora, in questo momento, contro un numero indeterminato di altri progetti open-source critici. Il pattern funziona. Gli incentivi economici che lo rendono efficace non sono cambiati in modo significativo. Le risposte istituzionali sono state reali ma insufficienti.
L'ingegnere che troverà il prossimo avrà anch'egli bisogno di fortuna. Dovrà esaminare il benchmark giusto al momento giusto sul sistema giusto. Dovrà preoccuparsi abbastanza da tracciare un'anomalia alla sua fonte. Dovrà pubblicare le sue scoperte prima che il principale dell'operazione abbia già spedito il payload alle release stabili.
Avranno bisogno, nello specifico, dei cinquecento millisecondi.
Quell'intervallo è ciò che si è frapposto tra internet nel marzo 2024 e una singola chiave crittografica detenuta da un attore sconosciuto che avrebbe sbloccato ogni server Linux che esegue SSH sulla Terra.
Fragment Zero seguirà il fascicolo.
Il fascicolo non si chiude. Aspetta.