Heartbleed: Due Anni di Internet che Sanguinava in Silenzio
CVE-2014-0160. Un buffer overflow da 64KB in OpenSSL che ha esposto chiavi private, password e sessioni di metà internet per oltre due anni. Nessuno se n'era accorto.
Era il 7 aprile 2014. Il team di sicurezza di Google e i ricercatori di Codenomicon pubblicarono contemporaneamente — e in modo coordinato — la vulnerabilità più devastante nella storia di internet.
La chiamarono Heartbleed. CVE-2014-0160. Un bug da una riga di codice.
Cos'è OpenSSL e Perché Conta
OpenSSL è la libreria crittografica che implementa i protocolli SSL/TLS — quelli che mettono la S in HTTPS. Nel 2012, era usata da circa 66% dei server web su internet. Apache, nginx, la maggior parte dei servizi cloud, VPN, email server.
OpenSSL è open source. Mantenuta da un team di volontari. Il suo budget annuale, prima di Heartbleed, era di circa $2.000.
Sì, hai letto bene. Due milacilindri. Per il software che proteggeva la metà di internet.
Il Bug: Una Riga di C
L'estensione Heartbeat di TLS/DTLS (RFC 6520) è un meccanismo semplice: il client manda un messaggio di "keep-alive" con un payload e la sua lunghezza. Il server risponde con lo stesso payload, confermando che la connessione è viva.
Il codice originale, scritto da Robin Seggelmann nel 2011:
/* Legge la lunghezza dichiarata dal client */
unsigned int payload_length = *(unsigned short *)p;
/* Alloca il buffer di risposta */
unsigned char *buffer = OPENSSL_malloc(1 + 2 + payload_length + padding);
/* Copia il payload nella risposta — BUG: usa payload_length, non la lunghezza reale */
memcpy(bp, pl, payload_length);
Il problema è banale: nessuna validazione che payload_length corrisponda alla lunghezza reale del messaggio ricevuto. Un attaccante poteva inviare un payload di 1 byte dichiarando una lunghezza di 65.535 byte. Il server avrebbe risposto copiando 64KB di memoria heap nella risposta.
Memoria heap che poteva contenere qualsiasi cosa: chiavi private SSL, password, cookie di sessione, contenuti di altre richieste in corso.
Due Anni Nella Buio
Il bug fu introdotto nel commit del 31 dicembre 2011. Fu rilasciato in OpenSSL 1.0.1 il 14 marzo 2012.
Per due anni e 25 giorni, chiunque sapesse dell'esistenza del bug poteva leggere la memoria di qualsiasi server HTTPS nel mondo — senza lasciare tracce nei log, senza autenticazione, senza rumore.
Nessuno sa quante volte questo bug fu sfruttato prima della divulgazione pubblica. I log non registravano le richieste Heartbeat malformate. Non c'era modo di sapere se eri stato colpito.
NSA fu accusata di aver conosciuto il bug per mesi prima della disclosure pubblica. NSA smentì.
L'Impatto Reale
Quando la notizia esplose, il mondo reagì in modo caotico:
- Yahoo Mail, OKCupid, Imgur tra i siti confermati vulnerabili
- La Canada Revenue Agency (agenzia delle entrate canadese) subì il furto di 900 numeri di previdenza sociale tramite Heartbleed
- La Community Health Systems (rete ospedaliera USA) perse i dati di 4.5 milioni di pazienti
- Milioni di certificati SSL dovettero essere revocati e riemessi — e le infrastrutture di revoca quasi collassarono sotto il carico
La patch arrivò lo stesso giorno della disclosure. Ma applicare la patch non bastava: bisognava revocare i certificati, emetterne di nuovi, e revocare tutte le sessioni attive. La maggior parte degli amministratori fece solo il primo passo.
La Vera Lezione: L'Infrastruttura Open Source è Finanziata Come un Hobby
Heartbleed aprì un dibattito che ancora oggi è irrisolto.
Le aziende tecnologiche costruivano miliardi di dollari di prodotti sopra OpenSSL. Microsoft, Google, Amazon, Facebook — tutte dipendevano (e dipendono) da software mantenuto da volontari con zero budget.
Dopo Heartbleed nacque la Core Infrastructure Initiative (CII), finanziata da Linux Foundation con contributi di Amazon, Cisco, Dell, Facebook, Fujitsu, Google, IBM, Intel, Microsoft, NetApp, Rackspace, VMware. Budget: $3.9 milioni in tre anni.
OpenSSL passò da $2K/anno a circa $300K/anno di supporto.
È molto? È poco? Considera che la tua banca usa OpenSSL. Il tuo router di casa usa OpenSSL. Il sistema bancario mondiale usa OpenSSL.
Epilogo
Robin Seggelmann, il programmatore che scrisse il bug, disse in un'intervista:
"Il bug mi è sfuggito di mente durante la review del codice. Non c'era nessuna intenzione malevola."
Ha ragione. Il problema non era lui. Il problema era — ed è — un sistema in cui software critico per l'intera economia digitale dipende da volontari mal pagati, senza processi formali di review della sicurezza, senza fuzzing automatico, senza audit indipendenti.
Quanti altri Heartbleed sono là fuori in questo momento?
🪳 Il Duca del Debug — Qualcuno deve documentare.