L'ANALISI TECNICA

Log4Shell: ecco come funziona l’exploit della vulnerabilità di Log4j

Log4Shell è la vulnerabilità “più critica dell’ultimo decennio” emersa in Log4j, il framework per logging molto diffuso e utilizzato da numerosi prodotti software, servizi cloud e altre applicazioni. Ecco come funziona il suo exploit e i consigli per mettere in sicurezza le applicazioni aziendali sviluppate internamente

27 Dic 2021
G
Sean Gallagher

Senior Threat Researcher di Sophos

S
Hardik Shah

Principal Threat Researcher at Sophos

La vulnerabilità emersa all’interno di Log4j, l’utility di Apache per il logging scritta in linguaggio Java (CVE-2021-44228), è stata definita come “la vulnerabilità più critica dell’ultimo decennio”: conosciuta anche come Log4Shell, questa criticità ha costretto gli sviluppatori di numerosi prodotti software a rilasciare aggiornamenti o mitigazioni ai loro clienti. E da quando è stata scoperta la vulnerabilità, i maintainer di Log4j hanno pubblicato due nuove versioni – la seconda della quale ha completamente rimosso la funzione che aveva originariamente reso possibile l’exploit.

Come è già stato fatto notare, Log4Shell è un exploit legato alla funzione di “sostituzione messaggi” di Log4j, che permette(va) di modificare programmaticamente il log degli eventi inserendo stringhe formattate in modo da richiamare contenuti esterni. Il codice alla base di questa funzione consentiva anche di effettuare ricerche o “lookup” usando URL JNDI (Java Naming and Directory Interface).

Questa funzione ha tuttavia dato inavvertitamente la possibilità a un attaccante di inserire testo contenente URL JNDI pericolosi all’interno delle richieste inviate al software che utilizza Log4j, con la conseguenza di far caricare ed eseguire il codice remoto dal logger. Per renderci meglio conto della pericolosità degli exploit di questa funzione analizzeremo ora il codice che li rende possibili.

Come funziona Log4j

Log4j produce gli eventi di logging usando TTCCLayout: orario, thread, categoria e informazioni di contesto. Per default utilizza il seguente pattern:

WHITEPAPER
Accelerare i tempi di migrazione del cloud ibrido: una guida completa

%r [%t] %-5p %c %x – %m%n

In questo caso %r stampa il tempo in millisecondi trascorso dal momento dell’avvio del programma; %t indica il thread, %p la priorità dell’evento, %c la categoria, %x il contesto diagnostico associato al thread che ha generato l’evento e %m è riservato al messaggio associato all’evento, fornito dall’applicazione.

È proprio in quest’ultimo campo che entra in gioco la vulnerabilità.

La vulnerabilità può essere sfruttata quando la funzione logger.error() viene chiamata passando come parametro un messaggio comprendente un URL JNDI (jndi:dns://, jndi:ldap:// o una qualunque delle altre interfacce JNDI discusse nel nostro post precedente). Nel momento in cui viene passato l’URL, il software esegue un “lookup” JNDI che può provocare l’esecuzione di codice remoto.

Per replicare questa vulnerabilità possiamo vedere uno dei numerosi PoC (Proof of Concept) pubblicati, che dimostra come molte applicazioni interagiscono con Log4j. Nel codice logger/src/main/java/logger/App.java usato in questo PoC, notiamo come logger.error() venga chiamato con un parametro di tipo messaggio:

package logger;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.logger;

public class App {
     private static final Logger logger = LogManager.getLogger(App.class);
     public static void main(String[] args) {
          String msg = (args.length > 0 ? args [0] : “”);
          logger.error(msg);
     }

}

A scopo di debugging abbiamo cambiato il messaggio con un URL di test (creato con il tool Interactsh) che utilizza DNS con JNDI per passarlo come parametro alla funzione logger.error(), seguendo quindi lo svolgere passo passo del programma:

https://news.sophos.com/wp-content/uploads/2021/12/1-e1639668398247.png

Possiamo notare come, dopo aver chiamato il metodo logger.error() della classe AbstractLogger con l’URL creato apposta, venga chiamato un altro metodo, logMessage:

https://news.sophos.com/wp-content/uploads/2021/12/2-e1639677499308.png

Il metodo log.message crea un oggetto messaggio con l’URL che gli è stato passato:

https://news.sophos.com/wp-content/uploads/2021/12/3-e1639672381678.png

Dopodiché chiama processLogEvent dalla classe LoggerConfig per registrare l’evento:

https://news.sophos.com/wp-content/uploads/2021/12/4-e1639688369509.png

La chiamata successiva riguarda il metodo append della classe AbstractOutputStreamAppender, che aggiunge il messaggio al log:

https://news.sophos.com/wp-content/uploads/2021/12/5-e1639688417510.png

Ecco dove si verifica il problema

A sua volta, questo metodo chiama il metodo directEncodeEvent:

https://news.sophos.com/wp-content/uploads/2021/12/6-e1639688447404.png

E il metodo directEncodeEvent chiama il metodo getLayout().Encode, che formatta il messaggio per il log aggiungendovi il parametro che gli è stato passato – che, in questo caso, non è altro che l’URL che avevamo creato per sfruttare la vulnerabilità:

https://news.sophos.com/wp-content/uploads/2021/12/7-e1639688473890.png

Viene quindi creato un nuovo oggetto StringBuilder:

https://news.sophos.com/wp-content/uploads/2021/12/8-e1639675373458.png

StringBuilder chiama il metodo format della classe MessagePatternConvert ed esegue il parsing dell’URL fornito alla ricerca dei caratteri ‘$’ e ‘{’ per identificare l’URL effettivo:

https://news.sophos.com/wp-content/uploads/2021/12/9-e1639688540208.png

Dopodiché prova a identificare svariati nomi e valori separati da ‘:’ o ‘-’:

https://news.sophos.com/wp-content/uploads/2021/12/10-e1639675483330.png

La successiva chiamata al metodo resolveVariable della classe StrSubstitutor identifica le variabili, che possono essere una o più delle seguenti:

{date, java, marker, ctx, lower, upper, jndi, main, jvmrunargs, sys, env, log4j}

A questo punto, il codice chiama il metodo lookup della classe Interpolator per controllare il servizio associato alla variabile (che in questo caso è jndi):

https://news.sophos.com/wp-content/uploads/2021/12/11-e1639675821351.png

Avendo trovato jndi, il codice chiama il metodo lookup della classe jndiManager, che valuta quanto contenuto nella risorse JNDI:

https://news.sophos.com/wp-content/uploads/2021/12/12-e1639676035606.png

Dopodiché viene chiamato il metodo getURLOrDefaultInitCtx della classe IntialContext. Qui viene creata la richiesta che sarà successivamente inviata all’interfaccia JNDI per recuperare le informazioni di contesto, a seconda dell’URL che è stato passato. In questo esatto punto inizia a prendere forma l’exploit. Nel nostro caso, l’URL riguarda il servizio DNS:

https://news.sophos.com/wp-content/uploads/2021/12/13-e1639689038571.png

Specificando un URL del genere, con Wireshark possiamo vedere che viene inviata una query DNS all’URL che avevamo fornito (i tratta di un URL di test, non pericoloso):

https://news.sophos.com/wp-content/uploads/2021/12/14.png

Qualora l’URL sia jndi:ldap://, viene chiamato un altro metodo della classe ldapURLConext per verificare la possibilità che l’URL abbia queryComponents:

https://news.sophos.com/wp-content/uploads/2021/12/15-e1639689270961.png

Dopo aver chiamato il metodo lookup della classe ldapURLContext, la variabile name contiene l’URL ldap:

https://news.sophos.com/wp-content/uploads/2021/12/16.png

Per connettersi quindi all’URL ldap fornito:

https://news.sophos.com/wp-content/uploads/2021/12/18.png

Viene chiamato il metodo flushBuffer della classe OutputStreamManager, qui buf contiene i dati restituiti dal server LDAP, in questo caso la stringa mmm…. che possiamo osservare qui sotto:

https://news.sophos.com/wp-content/uploads/2021/12/19-e1639682998228.png

Osservando i pacchetti catturati con Wireshark, possiamo constatare come la richiesta sia composta dai seguenti bytes:

https://news.sophos.com/wp-content/uploads/2021/12/l4j-20.png

Si tratta dei dati serializzati che verranno visualizzati dal client, come possiamo vedere qui sotto dove la vulnerabilità è stata messa a frutto: si noti la stringa [main] ERROR logger.App all’interno del messaggio seguita da dati:

https://news.sophos.com/wp-content/uploads/2021/12/l4j-21.png

Problema risolto

Tutto questo è stato possibile perché in tutte le versioni di Log4j 2 fino alla 2.14 (escludendo la release di sicurezza 2.12.2), il supporto di JNDI non era limitato in termini di nomi che potevano essere risolti. Alcuni protocolli non erano sicuri o rendevano possibile l’esecuzione di codice remoto. Log4j 2.15.0 limita JNDI ai soli lookup LDAP, e tali ricerche sono ulteriormente limitate per default a connettersi agli oggetti primitivi Java residenti sull’host locale.

La versione 2.15.0 ha tuttavia lasciato parzialmente irrisolta la vulnerabilità, perché per le implementazioni dotate di “certi layout pattern non di default” per Log4j, come quelli con lookup di contesto (come “$${ctx:loginId}”) o con un pattern Thread Context Map (“%X”, “%mdc” o “%MDC”), era ancora possibile definire dati di input mediante un pattern JNDI Lookup tale da provocare un attacco Denial of Service (DoS).

Nelle ultime release tutti i lookup sono stati disabilitati per default. In questo modo la funzione JNDI è stata interamente rimossa, ma ciò evita che Log4j possa essere utilizzato per exploit remoti.

In conclusione

Log4j è un framework per logging molto diffuso e utilizzato da numerosi prodotti software, servizi cloud e altre applicazioni.

Le vulnerabilità presenti nelle versioni precedenti la 2.15.0 permettono a un malintenzionato di recuperare i dati da un’applicazione o dal relativo sistema operativo sottostante, piuttosto che eseguire codice Java che gira con lo stesso livello di autorizzazioni attribuito al runtime Java stesso (Java.exe sui sistemi Windows).

Questo codice può eseguire comandi e script sul sistema operativo locale scaricando quindi ulteriore codice pericoloso e spianando la strada all’elevazione dei privilegi e ad accessi remoti persistenti.

Sebbene la versione 2.15.0 di Log4j, rilasciata nel momento in cui la vulnerabilità è divenuta di pubblico dominio, risolva questi problemi, essa lascia tuttavia aperta la porta ad exploit e attacchi Denial of Service (situazione risolta almeno parzialmente dalla versione 2.16.0).

Il 18 dicembre è stata rilasciata una terza versione, la 2.17.0, che previene possibili attacchi ricorsivi che potrebbero provocare un Denial of Service.

Le aziende dovrebbero verificare le versioni di Log4j presenti nelle applicazioni sviluppate internamente e provvedere a passare alle versioni più recenti (2.12.2 per Java 7 e 2.17.0 per Java 8), nonché applicare le patch software non appena vengono rilasciate dai rispettivi vendor.

WEBINAR
12 Ottobre 2022 - 11:00
5 best practice per un cloud journey di successo!
Cloud
Datacenter
@RIPRODUZIONE RISERVATA

Speciale PNRR

Tutti
Incentivi
PA
Sostemibilità
Analisi
Formazione
Salute digitale
Sicurezza
Sostenibilità
Digital Economy
Formazione
Trasferimento tecnologico, il Mise mette sul piatto 7,5 milioni
Strategie
PSN e Strategia Cloud Italia: a che punto siamo e come supportare la PA in questo percorso
Dispersione idrica
Siccità: AI e analisi dei dati possono ridurre gli sprechi d’acqua. Ecco gli interventi necessari
PNRR
Cloud, firmato il contratto per l’avvio di lavori del Polo strategico
Formazione
Competenze digitali, stanziati 48 milioni per gli Istituti tecnologici superiori
Iniziative
Digitalizzazione delle reti idriche: oltre 600 milioni per 21 progetti
Competenze e competitività
PNRR, così i fondi UE possono rilanciare la ricerca e l’Università
Finanziamenti
PNRR, si sbloccano i fondi per l’agrisolare
Sanità post-pandemica
PNRR, Missione Salute: a che punto siamo e cosa resta da fare
Strategie
Sovranità e autonomia tecnologica nazionale: come avviare un processo virtuoso e sostenibile
La relazione
Pnrr e PA digitale, l’alert della Corte dei conti su execution e capacità di spesa
L'editoriale
Elezioni 2022, la sfida digitale ai margini del dibattito politico
Strategie
Digitale, il monito di I-Com: “Senza riforme Pnrr inefficace”
Transizione digitale
Pnrr: arrivano 321 milioni per cloud dei Comuni, spazio e mobilità innovativa
L'analisi I-COM
Il PNRR alla prova delle elezioni: come usare bene le risorse e centrare gli obiettivi digitali
Cineca
Quantum computing, una svolta per la ricerca: lo scenario europeo e i progetti in corso
L'indice europeo
Desi, l’Italia scala due posizioni grazie a fibra e 5G. Ma è (ancora) allarme competenze
L'approfondimento
PNRR 2, ecco tutte le misure per cittadini e imprese: portale sommerso, codice crisi d’impresa e sismabonus, cosa cambia
Servizi digitali
PNRR e trasformazione digitale: ecco gli investimenti e le riforme previste per la digitalizzazione della PA
Legal health
Lo spazio europeo dei dati sanitari: come circoleranno le informazioni sulla salute nell’Unione Europea
Servizi digitali
PNRR e PA digitale: non dimentichiamo la dematerializzazione
Digital Healthcare transformation
La trasformazione digitale degli ospedali
Governance digitale
PA digitale, è la volta buona? Così misure e risorse del PNRR possono fare la differenza
Servizi digitali
Comuni e digitale, come usare il PNRR senza sbagliare
La survey
Pnrr e digitale accoppiata vincente per il 70% delle pmi italiane
Missione salute
Fascicolo Sanitario Elettronico alla prova del PNRR: limiti, rischi e opportunità
Servizi pubblici
PNRR: come diventeranno i siti dei comuni italiani grazie alle nuove risorse
Skill gap
PNRR, la banda ultra larga crea 20.000 nuovi posti di lavoro
Il Piano
Spazio, Colao fa il punto sul Pnrr: i progetti verso la milestone 2023
FORUMPA2022
PNRR e trasformazione digitale: rivedi i Talk di FORUM PA 2022 in collaborazione con le aziende partner
I contratti
Avio, 340 milioni dal Pnrr per i nuovi propulsori a metano
Next Generation EU
PNRR, a che punto siamo e cosa possono aspettarsi le aziende private
Fondi
Operativo il nuovo portale del MISE con tutti i finanziamenti per le imprese
Servizi comunali
Il PNRR occasione unica per i Comuni digitali: strumenti e risorse per enti e cittadini
Healthcare data platform
PNRR dalla teoria alla pratica: tecnologie e soluzioni per l’innovazione in Sanità
Skill
Competenze digitali, partono le Reti di facilitazione
Gli obiettivi
Scuola 4.0, PNRR ultima chance: ecco come cambierà il sistema formativo
Sistema Paese
PNRR 2, è il turno della space economy
FORUM PA 2022
FORUM PA 2022: la maturità digitale dei comuni italiani rispetto al PNRR
Analisi
PNRR: dalla Ricerca all’impresa, una sfida da cogliere insieme
Innovazione
Pnrr, il Dipartimento per la Trasformazione digitale si riorganizza
FORUM PA 2022
PA verde e sostenibile: il ruolo di PNRR, PNIEC, energy management e green public procurement
Analisi
PNRR, Comuni e digitalizzazione: tutto su fondi e opportunità, in meno di 3 minuti. Guarda il video!
Rapporti
Competenze digitali e servizi automatizzati pilastri del piano Inps
Analisi
Attuazione del PNRR: il dialogo necessario tra istituzioni e società civile. Rivedi lo Scenario di FORUM PA 2022
Progetti
Pnrr, fondi per il Politecnico di Torino. Fra i progetti anche IS4Aerospace
Analisi
PNRR, Colao fa il punto sulla transizione digitale dell’Italia: «In linea con tutte le scadenze»
La Svolta
Ict, Istat “riclassifica” i professionisti. Via anche al catalogo dati sul Pnrr
Analisi
Spazio, Colao fa il punto sul Pnrr: i progetti verso la milestone 2023
FORUM PA 2022
Ecosistema territoriale sostenibile: l’Emilia Romagna tra FESR e PNRR
Il Piano
Innovazione, il Mise “centra” gli obiettivi Pnrr: attivati 17,5 miliardi
Analisi
PNRR: raggiunti gli obiettivi per il primo semestre 2022. Il punto e qualche riflessione
Analisi
PNRR: dal dialogo tra PA e società civile passa il corretto monitoraggio dei risultati, tra collaborazione e identità dei luoghi
Webinar
Comuni e PNRR: un focus sui bandi attivi o in pubblicazione
Analisi
Formazione 4.0: cos’è e come funziona il credito d’imposta
PA e Sicurezza
PA e sicurezza informatica: il ruolo dei territori di fronte alle sfide della digitalizzazione
PA e sicurezza
PNRR e servizi pubblici digitali: sfide e opportunità per Comuni e Città metropolitane
Water management
Water management in Italia: verso una transizione “smart” e “circular” 
LE RISORSE
Transizione digitale, Simest apre i fondi Pnrr alle medie imprese
Prospettive
Turismo, cultura e digital: come spendere bene le risorse del PNRR
Analisi
Smart City: quale contributo alla transizione ecologica
Decarbonizzazione
Idrogeno verde, 450 milioni € di investimenti PNRR, Cingolani firma
Unioncamere
PNRR, imprese in ritardo: ecco come le Camere di commercio possono aiutare
I fondi
Industria 4.0: solo un’impresa su tre pronta a salire sul treno Pnrr
Formazione
Trasferimento tecnologico, il Mise mette sul piatto 7,5 milioni
Strategie
PSN e Strategia Cloud Italia: a che punto siamo e come supportare la PA in questo percorso
Dispersione idrica
Siccità: AI e analisi dei dati possono ridurre gli sprechi d’acqua. Ecco gli interventi necessari
PNRR
Cloud, firmato il contratto per l’avvio di lavori del Polo strategico
Formazione
Competenze digitali, stanziati 48 milioni per gli Istituti tecnologici superiori
Iniziative
Digitalizzazione delle reti idriche: oltre 600 milioni per 21 progetti
Competenze e competitività
PNRR, così i fondi UE possono rilanciare la ricerca e l’Università
Finanziamenti
PNRR, si sbloccano i fondi per l’agrisolare
Sanità post-pandemica
PNRR, Missione Salute: a che punto siamo e cosa resta da fare
Strategie
Sovranità e autonomia tecnologica nazionale: come avviare un processo virtuoso e sostenibile
La relazione
Pnrr e PA digitale, l’alert della Corte dei conti su execution e capacità di spesa
L'editoriale
Elezioni 2022, la sfida digitale ai margini del dibattito politico
Strategie
Digitale, il monito di I-Com: “Senza riforme Pnrr inefficace”
Transizione digitale
Pnrr: arrivano 321 milioni per cloud dei Comuni, spazio e mobilità innovativa
L'analisi I-COM
Il PNRR alla prova delle elezioni: come usare bene le risorse e centrare gli obiettivi digitali
Cineca
Quantum computing, una svolta per la ricerca: lo scenario europeo e i progetti in corso
L'indice europeo
Desi, l’Italia scala due posizioni grazie a fibra e 5G. Ma è (ancora) allarme competenze
L'approfondimento
PNRR 2, ecco tutte le misure per cittadini e imprese: portale sommerso, codice crisi d’impresa e sismabonus, cosa cambia
Servizi digitali
PNRR e trasformazione digitale: ecco gli investimenti e le riforme previste per la digitalizzazione della PA
Legal health
Lo spazio europeo dei dati sanitari: come circoleranno le informazioni sulla salute nell’Unione Europea
Servizi digitali
PNRR e PA digitale: non dimentichiamo la dematerializzazione
Digital Healthcare transformation
La trasformazione digitale degli ospedali
Governance digitale
PA digitale, è la volta buona? Così misure e risorse del PNRR possono fare la differenza
Servizi digitali
Comuni e digitale, come usare il PNRR senza sbagliare
La survey
Pnrr e digitale accoppiata vincente per il 70% delle pmi italiane
Missione salute
Fascicolo Sanitario Elettronico alla prova del PNRR: limiti, rischi e opportunità
Servizi pubblici
PNRR: come diventeranno i siti dei comuni italiani grazie alle nuove risorse
Skill gap
PNRR, la banda ultra larga crea 20.000 nuovi posti di lavoro
Il Piano
Spazio, Colao fa il punto sul Pnrr: i progetti verso la milestone 2023
FORUMPA2022
PNRR e trasformazione digitale: rivedi i Talk di FORUM PA 2022 in collaborazione con le aziende partner
I contratti
Avio, 340 milioni dal Pnrr per i nuovi propulsori a metano
Next Generation EU
PNRR, a che punto siamo e cosa possono aspettarsi le aziende private
Fondi
Operativo il nuovo portale del MISE con tutti i finanziamenti per le imprese
Servizi comunali
Il PNRR occasione unica per i Comuni digitali: strumenti e risorse per enti e cittadini
Healthcare data platform
PNRR dalla teoria alla pratica: tecnologie e soluzioni per l’innovazione in Sanità
Skill
Competenze digitali, partono le Reti di facilitazione
Gli obiettivi
Scuola 4.0, PNRR ultima chance: ecco come cambierà il sistema formativo
Sistema Paese
PNRR 2, è il turno della space economy
FORUM PA 2022
FORUM PA 2022: la maturità digitale dei comuni italiani rispetto al PNRR
Analisi
PNRR: dalla Ricerca all’impresa, una sfida da cogliere insieme
Innovazione
Pnrr, il Dipartimento per la Trasformazione digitale si riorganizza
FORUM PA 2022
PA verde e sostenibile: il ruolo di PNRR, PNIEC, energy management e green public procurement
Analisi
PNRR, Comuni e digitalizzazione: tutto su fondi e opportunità, in meno di 3 minuti. Guarda il video!
Rapporti
Competenze digitali e servizi automatizzati pilastri del piano Inps
Analisi
Attuazione del PNRR: il dialogo necessario tra istituzioni e società civile. Rivedi lo Scenario di FORUM PA 2022
Progetti
Pnrr, fondi per il Politecnico di Torino. Fra i progetti anche IS4Aerospace
Analisi
PNRR, Colao fa il punto sulla transizione digitale dell’Italia: «In linea con tutte le scadenze»
La Svolta
Ict, Istat “riclassifica” i professionisti. Via anche al catalogo dati sul Pnrr
Analisi
Spazio, Colao fa il punto sul Pnrr: i progetti verso la milestone 2023
FORUM PA 2022
Ecosistema territoriale sostenibile: l’Emilia Romagna tra FESR e PNRR
Il Piano
Innovazione, il Mise “centra” gli obiettivi Pnrr: attivati 17,5 miliardi
Analisi
PNRR: raggiunti gli obiettivi per il primo semestre 2022. Il punto e qualche riflessione
Analisi
PNRR: dal dialogo tra PA e società civile passa il corretto monitoraggio dei risultati, tra collaborazione e identità dei luoghi
Webinar
Comuni e PNRR: un focus sui bandi attivi o in pubblicazione
Analisi
Formazione 4.0: cos’è e come funziona il credito d’imposta
PA e Sicurezza
PA e sicurezza informatica: il ruolo dei territori di fronte alle sfide della digitalizzazione
PA e sicurezza
PNRR e servizi pubblici digitali: sfide e opportunità per Comuni e Città metropolitane
Water management
Water management in Italia: verso una transizione “smart” e “circular” 
LE RISORSE
Transizione digitale, Simest apre i fondi Pnrr alle medie imprese
Prospettive
Turismo, cultura e digital: come spendere bene le risorse del PNRR
Analisi
Smart City: quale contributo alla transizione ecologica
Decarbonizzazione
Idrogeno verde, 450 milioni € di investimenti PNRR, Cingolani firma
Unioncamere
PNRR, imprese in ritardo: ecco come le Camere di commercio possono aiutare
I fondi
Industria 4.0: solo un’impresa su tre pronta a salire sul treno Pnrr

Articolo 1 di 4