Rilevamento e mitigazione della vulnerabilità CVE-2025-24813 in Apache Tomcat

Lo sfruttamento di questa vulnerabilità può causare una RCE, gravi fughe di dati o l'inserimento di contenuti dannosi.
Lo sfruttamento di questa vulnerabilità può causare una RCE, gravi fughe di dati o l'inserimento di contenuti dannosi.

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 Segmentation

  • 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).

A common attack variant specifically targets .session file paths, which follow a randomized naming scheme — a six-character base appended with the .session file extension (Figure 1). Fig. 1: Examples of .session attack variant

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).

In most cases, the malicious object will use the java.net.URL object to “call home” once this uploaded session file is deserialized by Apache Tomcat (Figure 2). Fig. 2: Attempted .session payload in request body

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

Many exploit attempts are mitigated by existing Adaptive Security Engine rules, including those that detect Java deserialization attempts (Figure 3). Fig. 3: Adaptive Security Engine rule 3000072 detecting CVE-2025-24813 exploit attempt

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)

On March 19, 2025, Akamai’s Threat Research Team also deployed Adaptive Security Engine Rapid Rule for App & API Protector customers to provide full coverage (Figure 4). Fig. 4: Adaptive Security Engine Rapid Rule provides full coverage

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.