Site icon Matrice Digitale

Due bug al prezzo di uno, la triste storia di Log4j

Successione di 0 e 1
Tempo di lettura: 3 minuti.

Recentemente abbiamo parlato di log4j. Molti nostri lettori però non hanno le competenze tecniche per leggere la storia in tutti i suoi risvolti tragicomici. Questa è la versione “for dummies” della storia di Log4j, centinaia di linee di codice Java che dovevano aiutare i programmatori a trovare i bug nei loro programmi, e che poi si sono rivelati essere uno dei più grandi bug nella storia dell’informatica. E sta succedendo ora.

Log4j spiegato semplice

Java è un linguaggio di programmazione largamente usato, perché è uno standard solido (ovvero resiste nel tempo), è un linguaggio potente (permette di accedere a tante funzionalità) ed è sicuro (ovvero il programma agisce non sull’hardware reale, ma in una simulazione, in modo da contenere comportamenti non graditi, come ad esempio il consumo eccessivo di memoria o la modifica di file di sistema, come farebbe un virus).

Log4j è una libreria (insieme di funzioni) che permettono di tenere traccia di quello che succede all’interno dell’applicazione, viene usato dai programmatori per capire se tutto funziona come dovrebbe. In pratica, i programmatori Java, possono scegliere di scrivere da soli le funzioni per generare i log, oppure possono usare una libreria già pronta tra quelle disponibili, e Log4j è quella più utilizzata.

Alcune settimane fa è stato trovato un errore di programmazione nel codice di questa libreria, un errore che ha generato panico nell’ambiente informatico, perché permette ad un hacker di sfruttare il bug per eseguire comandi su server Internet. (per altri dettagli tecnici leggi l’articolo Log4j: la libreria Java che sta facendo tremare il mondo)

La soluzione al bug trovata in fretta, troppo in fretta.

Il panico, la pressione mediatica e la voglia di passare il periodo festivo lontano dalle tragedie, hanno spinto i manutentori del codice ufficiale di Log4j a trovare una soluzione molto velocemente. E’ qui che inizia la parte più triste della storia.

La soluzione al bug che è stata fornita come soluzione, e che rappresentava l’unica ancora di salvezza per milioni di utenti in tutto il mondo, si è rivelata essere produttrice di due ulteriori bug, ben più gravi di quello originario.

Log4J 2.16.0 Forse ci siamo.

La versione 2.16 dovrebbe aver risolto il problema, e quel “dovrebbe” è stato messo lì proprio a scopo scaramantico.

La nuove versione ha eliminato le funzionalità incriminate, tagliando la testa al toro. Queste funzionalità in realtà non vengono utilizzate dal 99% dei programmatori che fanno uso di Log4J.

La vera colpa dell’OpenSource

Il vero “colpevole” della gravità di questo bug è l’Open Source. Il fatto che Log4J sia disponibile gratuitamente spinge molto programmatori ad utilizzare questa libreria, anche se non servono tutte le sue funzionalità. “Tanto è gratis, perchè non scegliere il prodotto più completo?”

L’importante è non iniziare a pensare che prodotti commerciali, a codice chiuso, siano più sicuri dei programmi Open Source. Una falla di sicurezza in un programma Open Source che viene inserito in migliaia di altri programmi (e sono davvero tanti) amplifica l’effetto della vulnerabilità, come anche il fatto che la presenza della libreria sia dichiarata nell’elenco dei codici in licenza Open Source utilizzati.

In parole povere, le falle di sicurezza sono ovunque, quando sentiamo parlare di “zero day” non significa che il problema è appena sorto, ma significa che il problema è appena stato scoperto da tutti.

Il mercato nero degli zero-day

Quando un bug non è a conoscenza di tutti ma solo di qualcuno, questa conoscenza può essere venduta al “mercato nero degli zero-day”.

Nel darkweb esistono luoghi dove scoperte del genere diventano denaro. Molto denaro.

Le organizzazioni criminali che operano nel settore dei RANSOMWARE sono capaci di trasformare un errore di programmazione come quello di Log4j in una miniera d’oro, e tutto questo molto prima della “scoperta” nel canale ufficiale degli “zero-day”

Exit mobile version