Rilevamento e mitigazione della vulnerabilità CVE-2025-24813 in Apache Tomcat
Analisi riassuntiva
Il 10 marzo 2025, è stata divulgata pubblicamente una vulnerabilità per equivalenza di percorso in Apache Tomcat (a cui è stato assegnato il codice CVE-2025-24813), insieme ad una patch per la sua correzione.
Anche se la vulnerabilità potrebbe causare una RCE, viene considerata da Apache di moderata gravità poiché non presenta specifici prerequisiti da poter sfruttare.
Poco dopo la pubblicazione di questa vulnerabilità, Akamai ha iniziato ad osservare alcuni tentativi di sfruttamento su potenziali server.
In questo blog, i ricercatori di Akamai forniscono dettagli approfonditi sulla vulnerabilità, sulle tecniche di sfruttamento e sulle strategie di rilevamento.
La soluzione Akamai Adaptive Security Engine Rapid Rule fornisce una protezione automatica ai clienti di Akamai App & API Protector,
mentre per le operazioni di rilevamento viene fornita una query Insight di Akamai Guardicore Segmentatione
- i clienti di Akamai Hunt che sono stati interessati hanno già ricevuto una mappatura dettagliata delle risorse vulnerabili.
Che cos'è la vulnerabilità CVE-2025-24813?
Il 10 marzo 2025, è stata annunciata una vulnerabilità per equivalenza di percorso in Apache Tomcat, un popolare server open source e un container di servlet Java comunemente usato per ospitare le applicazioni basate su Java (CVE-2025-24813), insieme alla patch per la sua correzione. La vulnerabilità interessa, nello specifico, il modo con cui il server elabora i percorsi dei file al suo interno. Pochi giorni dopo il rilascio di una PoC pubblica, i criminali hanno tentato di sfruttare la vulnerabilità in rete a seguito di una preoccupante tendenza che abbiamo osservato recentemente: un tempo di sfruttamento della vulnerabilità sempre più ridotto.
Apache ha assegnato alla vulnerabilità il codice CVE-2025-24813 classificandola di moderata gravità per i suoi requisiti di sfruttamento. Un server vulnerabile deve soddisfare specifici prerequisiti, il che rende questa falla più difficile da sfruttare. Tuttavia, nonostante questi prerequisiti, poiché la vulnerabilità potrebbe causare un'esecuzione di codice remoto (RCE) non autenticata, è importante correggerla immediatamente con una patch.
La vulnerabilità è stata corretta con una patch nelle versioni 11.0.3, 10.1.35 e 9.0.99 di Apache Tomcat, ma i server con le versioni dalla 11.0.0-M1 alla 1.0.2, dalla 10.1.0-M1 alla 10.1.34 e dalla 9.0.0-M1 alla 9.0.98 potrebbero ancora essere vulnerabili.
Che cos'è la vulnerabilità CVE-2025-24813?
Se un servlet predefinito di Apache Tomcat viene configurato in modo da attivare la funzionalità di scrittura, che è disabilitata per impostazione predefinita, un criminale può sferrare un attacco significativo sfruttando la vulnerabilità CVE-2025-24813. Insieme al comportamento predefinito che accetta le richieste PUT parziali, un criminale può caricare un file di sessione serializzato appositamente progettato come esempio in una directory scrivibile. Una volta caricato questo file, una successiva richiesta HTTP forza il sistema Tomcat a deserializzare i suoi contenuti, attivando così l'esecuzione del payload incorporato.
Lo sfruttamento di questa vulnerabilità può causare una RCE, gravi fughe di dati o l'inserimento di contenuti dannosi, che può anche danneggiare in modo critico i file di configurazione del server. Le versioni di Apache Tomcat interessate sono: dalla 11.0.0‑M1 alla 11.0.2, dalla 10.1.0‑M1 alla 10.1.34 e dalla 9.0.0‑M1 alla 9.0.98.
Sfruttamento della vulnerabilità CVE-2025-24813
Il risultato finale di questo sfruttamento è alquanto grave, tuttavia per attivare una RCE tramite questa vulnerabilità, è necessario soddisfare specifici prerequisiti:
Il servlet predefinito deve avere attivata esplicitamente la funzionalità di scrittura
Il server deve accettare le richieste PUT parziali
L'applicazione web deve utilizzare la persistenza di sessione basata su file con la posizione di storage predefinita (fornendo una directory di destinazione scrivibile per il payload serializzato dannoso)
Una libreria vulnerabile alla deserializzazione deve essere presente o utilizzata dall'applicazione (per consentire l'esecuzione del payload tramite un attacco di deserializzazione)
Inoltre, un criminale deve conoscere le convenzioni interne di denominazione dei file utilizzate dall'applicazione e la struttura della directory nel file system di destinazione
Anche se la maggior parte dei prerequisiti potrebbe essere attivata, il prerequisito più importante (la funzionalità di scrittura del servlet predefinito) è disabilitata per impostazione predefinita.
Traffico degli attacchi osservato
L'Akamai Security Intelligence Group (SIG) ha identificato il traffico degli attacchi immediatamente dopo la pubblicazione della vulnerabilità. La maggior parte dei payload degli attacchi osservati esamina le vulnerabilità per aiutare i criminali a stabilire se il server preso di mira è vulnerabile. Una comune variante di attacco prende di mira nello specifico i percorsi dei file .session , che seguono uno schema di denominazione randomizzato, ossia una base a sei caratteri a cui viene aggiunta l'estensione file .session (Figura 1).
Il payload più popolare presentava un file .session nel corpo della richiesta, che era costituita da oggetti dannosi con serializzazione Java. Nella maggior parte dei casi, l'oggetto dannoso utilizza l'elemento java.net.URL per richiamare l'origine dopo la deserializzazione di questo file di sessione caricato da parte di Apache Tomcat (Figura 2).
Rilevamento delle applicazioni vulnerabili
L'identificazione di ogni istanza vulnerabile di Apache Tomcat in una rete può risultare difficoltosa. I team addetti alla sicurezza devono valutare una vasta gamma di risorse perché Apache Tomcat è integrato in vari punti, tra cui le applicazioni in cui vengono usate le librerie all'insaputa degli addetti alla sicurezza.
Analogamente alla recente vulnerabilità scoperta in Apache Camel , questa libreria può essere presente come dipendenza indiretta a indicare che non è esplicitamente inclusa nel codice sorgente, ma, invece, viene introdotta tramite un altro pacchetto software. Tutto ciò aggiunge un livello di complessità che ostacola il rilevamento e, ovviamente, la mitigazione.
Apache Tomcat può essere installato separatamente sia in Windows che in Linux o come parte delle applicazioni Kava e rilevato tramite una scansione ricorsiva dei file di archivio di Java (JAR) denominati tomcat-api.jar. Una volta individuato un file JAR correlato a Tomcat, è possibile esaminare il relativo file manifest per stabilire la versione in uso.
Con la versione estratta, i team addetti alla sicurezza possono effettuare riferimenti incrociati rispetto all' avviso sulla sicurezza di Apache per valutare le potenziali vulnerabilità. Sono interessate le seguenti versioni:
- Apache Tomcat dalla 11.0.0-M1 alla 11.0.2
- Apache Tomcat dalla 10.1.0-M1 alla 10.1.34
- Apache Tomcat dalla 9.0.0.-M1 alla 9.0.98
Automazione del rilevamento
Per i clienti di Akamai Guardicore Segmentation , abbiamo creato una query Insight che è in grado di identificare le risorse vulnerabili. La query restituisce tutti i percorsi e gli hash disponibili per il file tomcat-api.jar. Il file JAR restituito può essere controllato in VirusTotal tramite l'hash o il file manifest all'interno del JAR per individuare la versione corretta.
Windows: Apache Tomcat nelle applicazioni
WITH relevant_cwds as (
SELECT DISTINCT
proc.pid,
proc.path,
proc.cmdline,
proc.cwd,
mmap.path AS mmap_path
FROM process_memory_map AS mmap
LEFT JOIN processes AS proc USING(pid)
WHERE mmap_path LIKE "%jvm%"
UNION
SELECT DISTINCT
proc.pid,
proc.path,
proc.cmdline,
proc.cwd,
proc.path AS placeholder_path
FROM processes AS proc
WHERE proc.name IN ("java", "javaw", "java.exe", "javaw.exe")
UNION
SELECT DISTINCT
proc.pid,
proc.path,
proc.cmdline,
proc.cwd,
proc.path AS placeholder_path
FROM processes AS proc
WHERE LOWER(proc.name) LIKE "%tomcat%"
),
RELEVANT_JAR_PATHS AS (
SELECT file.path as lib_path, cwd, cwd || '..\%\%\tomcat-api.jar' AS jar_path, sha256
FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
INNER JOIN hash on file.path = hash.path
UNION
SELECT file.path as lib_path, cwd, cwd || '..\%\tomcat-api.jar' AS jar_path, sha256
FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
INNER JOIN hash on file.path = hash.path
UNION
SELECT file.path as lib_path, cwd, cwd || '%\%\tomcat-api.jar' AS jar_path, sha256
FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
INNER JOIN hash on file.path = hash.path
)
SELECT DISTINCT lib_path, cwd, jar_path, sha256
FROM RELEVANT_JAR_PATHS
Linux: Apache Tomcat nelle applicazioni
WITH relevant_cwds as (
SELECT DISTINCT
proc.pid,
proc.path,
proc.cmdline,
proc.cwd,
mmap.path AS mmap_path
FROM process_memory_map AS mmap
LEFT JOIN processes AS proc USING(pid)
WHERE mmap_path LIKE "%jvm%"
UNION
SELECT DISTINCT
proc.pid,
proc.path,
proc.cmdline,
proc.cwd,
proc.path AS placeholder_path
FROM processes AS proc
WHERE proc.name IN ("java", "javaw", "java.exe", "javaw.exe")
UNION
SELECT DISTINCT
proc.pid,
proc.path,
proc.cmdline,
proc.cwd,
proc.path AS placeholder_path
FROM processes AS proc
WHERE LOWER(proc.name) LIKE "%tomcat%"
),
RELEVANT_JAR_PATHS AS (
SELECT file.path as lib_path, cwd, cwd || '../%/%/tomcat-api.jar' AS jar_path, sha256
FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
INNER JOIN hash on file.path = hash.path
UNION
SELECT file.path as lib_path, cwd, cwd || '../%/tomcat-api.jar' AS jar_path, sha256
FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
INNER JOIN hash on file.path = hash.path
UNION
SELECT file.path as lib_path, cwd, cwd || '%/%/tomcat-api.jar' AS jar_path, sha256
FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
INNER JOIN hash on file.path = hash.path
)
SELECT DISTINCT lib_path, cwd, jar_path, sha256
FROM RELEVANT_JAR_PATHS
Windows: Apache Tomcat installato
SELECT name, version
FROM programs
WHERE name LIKE '%tomcat%'
AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))
Linux: Apache Tomcat installato
SELECT name, version
FROM deb_packages
WHERE name LIKE '%tomcat%'
AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))
UNION
SELECT name, version
FROM rpm_packages
WHERE name LIKE '%tomcat%'
AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))
Mitigazione con Akamai App & API Protector
Molti tentativi di sfruttamento della vulnerabilità sono mitigati dalle regole di Adaptive Security Engine esistenti, tra cui quelli che rilevano i tentativi di deserializzazione di Java (Figura 3).
3000072 : attacco di deserializzazione rilevato
Il 19 marzo 2025, il team Akamai Threat Research ha implementato anche una soluzione Adaptive Security Engine Rapid Rule per i clienti di App & API Protector per offrire una protezione totale (Figura 4).
3000957 : esecuzione di codice remoto in Apache Tomcat rilevata (CVE-2025-24813)
La versione 1 della regola rapida ha l'azione predefinita impostata sulla generazione di avvisi. Per bloccare i tentativi di attacco, si consiglia ai clienti di impostare l'azione della regola su Rifiuta dopo aver configurat i trigger per l'eliminazione dei falsi positivi.
Riepilogo
L'Akamai SIG continuerà a monitorare, segnalare e creare mitigazioni per minacce come queste per i clienti dell'azienda e per la più vasta comunità della sicurezza. Per tenervi aggiornati sulle ultime novità dell'Akamai Security Intelligence Group, potete consultare la nostra home page sulle ricerche e seguirci sui social media.