Articolo Pubblicazioni
Log4Shell: come gestire una vulnerabilità che è ovunque
di Vincenzo Calabrò · Pubblicato il 30 dicembre 2021
Abstract
Il 9 dicembre 2021 è stata resa pubblica una vulnerabilità nella libreria Java Apache Log4j 2 che permette a un attaccante di eseguire codice su un server semplicemente facendogli registrare una stringa. L’articolo spiega il meccanismo, ricostruisce le tre settimane successive con le versioni correttive e le nuove vulnerabilità collegate, descrive le mitigazioni e i metodi di rilevamento e trae le lezioni per la gestione delle vulnerabilità nei componenti software.
Che cosa è successo
Log4j è una libreria open source della Apache Software Foundation che i programmi Java usano per scrivere i messaggi di log. È presente in applicazioni aziendali, prodotti commerciali, servizi cloud, apparati di rete, videogiochi. Il 9 dicembre 2021 è stata pubblicata una vulnerabilità nella versione 2 della libreria, identificata come CVE-2021-44228 e chiamata Log4Shell, con il punteggio massimo di 10 nella scala CVSS. Era stata segnalata alla fondazione il 24 novembre da un ricercatore del team di sicurezza di Alibaba Cloud. I primi sfruttamenti pubblici sono stati osservati nei server del videogioco Minecraft, dove bastava scrivere una stringa nella chat.
Il meccanismo
Log4j 2 interpreta alcune espressioni contenute nei messaggi da registrare, le cosiddette lookup. Una di queste, ${jndi:...}, fa sì che la libreria contatti un servizio esterno tramite l’interfaccia Java JNDI, per esempio un server LDAP. Se l’attaccante controlla quel server, può restituire un riferimento a una classe Java che il programma vulnerabile scarica ed esegue. Basta quindi che un dato controllato dall’esterno, come un’intestazione HTTP, un nome utente o un campo di un modulo, finisca in un messaggio di log perché l’attaccante ottenga l’esecuzione di codice sul server. Non serve autenticazione e non serve conoscere l’applicazione.
Tre settimane di correzioni
Le versioni correttive si sono succedute rapidamente, perché ogni intervento ha rivelato nuovi problemi:
- la 2.15.0, pubblicata in corrispondenza della divulgazione, limita le lookup JNDI;
- la 2.16.0, del 13 dicembre, disattiva JNDI per impostazione predefinita e rimuove le lookup nei messaggi, dopo la scoperta della CVE-2021-45046 che aggirava la prima correzione in alcune configurazioni;
- la 2.17.0, del 17 dicembre, corregge la CVE-2021-45105, un problema di ricorsione infinita che provoca un blocco del servizio;
- la 2.17.1, del 28 dicembre, corregge la CVE-2021-44832, sfruttabile solo da chi può modificare la configurazione dei log.
Log4Shell riguarda la sola versione 2. La versione 1 è priva di aggiornamenti dal 2015 e ha vulnerabilità proprie, tra cui la CVE-2021-4104 pubblicata nello stesso mese. Chi la usa ancora dovrebbe pianificarne la sostituzione.
Mitigazioni temporanee
Quando l’aggiornamento non è possibile subito, le mitigazioni indicate da Apache e dai CSIRT nazionali sono queste:
- rimuovere la classe JndiLookup dal file della libreria, misura efficace per le versioni dalla 2.10 in poi;
- limitare le connessioni in uscita dei server verso Internet, in particolare sui protocolli LDAP e RMI;
- applicare regole sui web application firewall per bloccare le stringhe di attacco, sapendo che esistono molte varianti offuscate;
- separare i sistemi esposti da quelli interni, per ridurre l’impatto in caso di compromissione.
L’impostazione formatMsgNoLookups, suggerita nei primi giorni, si è rivelata insufficiente e non va considerata una protezione.
Rilevare i tentativi
La ricerca di attacchi va fatta in due direzioni. Nei log delle applicazioni e dei proxy si cercano le stringhe che iniziano con ${jndi: e le loro forme offuscate, come quelle che usano ${lower:} o ${::-j} per spezzare le parole. Nei log del firewall si cercano connessioni in uscita verso indirizzi sconosciuti sulle porte LDAP, RMI e DNS a partire dai server applicativi. Un tentativo registrato indica soltanto che il sistema è stato preso di mira. Una connessione in uscita riuscita verso il server dell’attaccante richiede un’analisi approfondita del sistema. Nelle prime settimane gli sfruttamenti osservati hanno installato soprattutto programmi per minare criptovalute e agenti di botnet, e sono stati segnalati tentativi legati a ransomware.
Il vero problema è l’inventario
Per molte organizzazioni la domanda più difficile è stata sapere dove si trovasse Log4j. La libreria è spesso inclusa all’interno di altri componenti, a volte a più livelli di profondità, e compare in prodotti di terze parti di cui il cliente non vede il codice. Un inventario degli asset fermo ai server e ai sistemi operativi non aiuta. Servono strumenti che analizzino i file delle applicazioni, compresi gli archivi Java annidati, e soprattutto l’elenco dei componenti fornito dai produttori.
È qui che entra in gioco la Software Bill of Materials, l’elenco strutturato dei componenti di un prodotto software. Negli Stati Uniti l’ordine esecutivo del maggio 2021 sulla sicurezza informatica ne ha previsto l’adozione per il software acquistato dalle agenzie federali, e la NTIA ha pubblicato a luglio gli elementi minimi. Log4Shell ha mostrato in modo concreto a che cosa serve. Chi disponeva di SBOM aggiornate ha saputo in poche ore quali sistemi erano coinvolti.
La risposta delle autorità
Il CSIRT Italia ha diffuso un allarme nei giorni immediatamente successivi alla divulgazione e ha aggiornato le indicazioni man mano che uscivano nuove versioni. Negli Stati Uniti la CISA ha emesso il 17 dicembre una direttiva di emergenza che impone alle agenzie federali di individuare i sistemi vulnerabili, applicare correzioni o mitigazioni e riferire entro scadenze precise, e ha pubblicato un elenco dei prodotti coinvolti alimentato dai produttori. In Europa altri CERT nazionali hanno fatto lo stesso. Per un’organizzazione italiana la fonte più affidabile resta l’avviso del produttore di ciascun prodotto, perché solo il produttore sa se e come la libreria viene usata al suo interno.
Le lezioni
Il caso lascia alcune indicazioni pratiche per chi gestisce la sicurezza. Conviene chiedere ai fornitori un elenco dei componenti e un impegno sui tempi di risposta alle vulnerabilità. Le connessioni in uscita dei server vanno limitate a ciò che serve, perché molte catene di attacco richiedono di scaricare qualcosa dall’esterno. Infine una libreria mantenuta da pochi volontari può reggere una parte rilevante dei servizi digitali, e il sostegno ai progetti open source critici diventa una questione di sicurezza collettiva.
Vedi anche: l’articolo del 2018 Metodologie di penetration testing, l’articolo del 2026 Vulnerability management: priorità con CVSS, EPSS e KEV e l’articolo del 2026 Software Bill of Materials per l’IA.
Vincenzo Calabrò | Ingegnere informatico specializzato in sicurezza informatica e investigazioni digitali. Funzionario informatico del Ministero dell'Interno; su incarico autorizzato si occupa di sicurezza informatica e di perizie informatiche forensi. Autore di articoli e saggi. Lecturer, Speaker, Trainer.Profili: Google Scholar · ORCID · ResearchGate · Academia.edu · CyberSecurity360 · AgendaDigitale · ICT Security Magazine · LinkedIn