Tentativi di sfruttamento della vulnerabilità di Struts 2 S2-066 (CVE-2023-50164)
Introduzione
Apache Struts è un potente framework di applicazioni web open source, utilizzato da aziende e organizzazioni di tutto il mondo. A causa della sua popolarità, il framework è stato un obiettivo primario degli hacker. Quando viene annunciata una vulnerabilità critica per l'esecuzione di codice in modalità remota (RCE), i team addetti alla sicurezza e all'IT devono agire immediatamente per proteggere i sistemi.
Il 7 dicembre 2023, è stata pubblicata la vulnerabilità CVE-2023-50164 che consente ai criminali di manipolare i parametri di caricamento dei file per sferrare un attacco path traversal e caricare un file dannoso. In questo modo l'autore dell'attacco è in grado di acquisire il controllo completo del sistema.
L'11 dicembre, i primi exploit PoC (Proof of Concept) sono stati pubblicati e resi disponibili su larga scala. Poco dopo, il 12 dicembre, si sono verificati diversi tentativi di sfruttamento (Figura 1).
Informazioni sulla CVE
La CVE-2023-50164 rappresenta una vulnerabilità critica scoperta all'interno di Apache Struts 2, un framework open source ampiamente utilizzato per lo sviluppo e la realizzazione di applicazioni web Java EE. Apache Struts, noto per la sua affidabilità e flessibilità, svolge un ruolo importante nella creazione dell'architettura di numerosi progetti web commerciali e open source. Per tale ragione, questa vulnerabilità desta notevoli preoccupazioni in diversi ambiti, tra cui settori chiave come finanza, sanità ed enti governativi.
Il problema principale della CVE-2023-50164 risiede nella sua logica RCE e nella possibilità di sfruttare una vulnerabilità di tipo path traversal. In particolare, viene colpito il processo utilizzato dal framework Apache Struts per gestire i caricamenti di file. Mediante la manipolazione dei parametri di caricamento, un utente malintenzionato può attraversare efficacemente la struttura di directory del server web senza autorizzazione.
Può quindi posizionare file dannosi, in genere web shell basate su Java Server Page (JSP), in directory o percorsi non originariamente destinati o accessibili a contenuti caricati dall'utente. L'exploit fa affidamento sulla capacità di aggirare i meccanismi di sicurezza lato server in modo non previsto dagli sviluppatori di applicazioni.
La metodologia dell'attacco
Gli attacchi vengono sferrati secondo la procedura seguente:
1. L'autore dell'attacco esegue prima una ricognizione e identifica un sito o un'applicazione web che utilizza una versione vulnerabile di Apache Struts e l'URL di caricamento dei file.
2. L'autore dell'attacco prepara un file dannoso, di solito un file JSP o una web shell.
3. Crea quindi una richiesta speciale di caricamento, che include dati fittizi, come il nome e il percorso del file, attraverso cui vengono manipolati i parametri di caricamento del file.
4. Nella richiesta di caricamento menzionata al punto 3, l'autore dell'attacco include comandi di sistema che sfruttano la vulnerabilità di path traversal. Questi comandi indicano al server di posizionare il file al di fuori della normale directory di caricamento: si tratta della fase di path traversal.
5. L'autore dell'attacco invia la richiesta di caricamento al server che esegue le versioni vulnerabili di Apache Struts. Se l'operazione ha successo, il server salva il file o la web shell dannosi in una posizione o directory in cui è possibile eseguirli.
6. L'autore dell'attacco accede al file dannoso caricato attraverso un browser web o uno script automatico. L'accesso a questo file attiva l'esecuzione del codice dannoso o della web shell sul server.
7. Una volta completata l'operazione al punto 6, l'autore dell'attacco può eseguire ulteriori azioni sul server: dal furto di dati sensibili, alla modifica dei contenuti del sito web, all'assunzione del controllo completo del server web.
8. A seconda delle intenzioni o motivazioni dell'autore dell'attacco, l'accesso potrebbe essere tenuto nascosto per uno sfruttamento futuro del server o per lanciare attacchi successivi.
Le implicazioni
Le ripercussioni della CVE-2023-50164 sono di ampia portata. Le vulnerabilità RCE sono tra le minacce più gravi e critiche alle applicazioni web, poiché consentono agli autori degli attacchi di eseguire comandi arbitrari sui dispositivi interessati. Possono condurre ad accessi non autorizzati, al furto di dati e, potenzialmente, alla compromissione dell'intero sistema.
L'integrazione diffusa di Apache Struts amplifica questi rischi, rendendo la vulnerabilità CVE-2023-50164 un problema prioritario per le organizzazioni di tutto il mondo.
Tentativi di sfruttamento osservati
Il 12 dicembre, un giorno dopo che l'exploit PoC è stato reso ampiamente disponibile, abbiamo iniziato a riscontrare tentativi di sfruttamento simili a quelli dell'exploit PoC pubblicato (Figura 2). Sebbene si sia in presenza di numerosi tentativi, è improbabile che abbiano successo. Affinché l'attacco venga eseguito correttamente, l'endpoint di destinazione deve disporre della funzionalità di caricamento dei file.
Oltre alla scansione del PoC prevista, abbiamo iniziato a rilevare alcune richieste che tentano di sfruttare questa vulnerabilità ma che non corrispondono al PoC pubblicato. Questa variante riguarda il percorso /s2/upload.action piuttosto che l'originale /login.action (Figura 2). È interessante notare che il nome del parametro "fileFileName" viene utilizzato per includere il path traversal che differisce dal nome "uploadFileName" originale.
Non è chiaro se questi endpoint abbiano la funzionalità di caricamento dei file. Stiamo assistendo agli stessi tentativi di sfruttamento della variante 2 da parte di un gruppo di IP che si rivolgono a diversi clienti.
L'Akamai Security Intelligence Group) continuerà ad analizzare i log del nostro Web Application Firewall (WAF) alla ricerca di nuove varianti e aggiornerà questa sezione del blog con eventuali nuove informazioni.
Misure di mitigazione con App & API Protector
I clienti che utilizzano Akamai Adaptive Security Engine in modalità automatica e con il gruppo "Web Platform Attack" in modalità di rifiuto vengono automaticamente protetti da questi attacchi. I clienti che utilizzano Adaptive Security Engine in modalità manuale devono verificare di avere il gruppo "Web Platform Attack" o la seguente regola individuale in modalità di rifiuto (Figura 4):
3000929 - Rilevamento di un attacco di caricamento dei file e path traversal di Apache Struts (CVE-2023-50164)
Riepilogo
Akamai App & API Protector ha mitigato con successo questi tentativi di attacco ai nostri clienti. Non siamo stati in grado di determinare in modo definitivo se gli endpoint di destinazione possiedano la funzionalità di caricamento dei file, quindi non abbiamo osservato azioni di post-sfruttamento che gli autori degli attacchi potrebbero aver intrapreso dopo la riuscita di un attacco.
Sebbene la difesa più efficace sia quella di aggiornare tempestivamente il codice sorgente, riconosciamo l'enorme sforzo richiesto ai team addetti alla sicurezza per identificare e aggiornare rapidamente i componenti vulnerabili. Questa sfida è resa ancora più ardua dal numero sempre crescente di applicazioni e dalla natura dinamica di questi ambienti.
Il concetto di "sicurezza a più livelli" può sembrare banale, ma è fondamentale considerare metodi aggiuntivi per migliorare la sicurezza complessiva. Gli autori degli attacchi si stanno rapidamente adattando ai nuovi PoC pubblici, spesso nell'arco di 24 ore, il che aumenta significativamente la sfida per gli addetti alla sicurezza.
L'implementazione di un WAF, come Akamai App & API Protector, può fungere da ulteriore livello di difesa, in grado di proteggere dalle CVE appena rilevate e fornire un buffer aggiuntivo di sicurezza.