Detección y mitigación de Apache Tomcat CVE-2025-24813

Su explotación puede dar lugar a una ejecución remota de código (RCE), una filtración grave de información o una inyección de contenido malicioso.
Su explotación puede dar lugar a una ejecución remota de código (RCE), una filtración grave de información o una inyección de contenido malicioso.

Resumen ejecutivo

  • El 10 de marzo de 2025, se divulgó públicamente una vulnerabilidad de equivalencia de ruta en Apache Tomcat (identificador asignado CVE-2025-24813), junto con un parche para ella. 

  • Aunque la vulnerabilidad podría permitir una RCE, Apache la considera una vulnerabilidad de gravedad moderada, ya que tiene requisitos previos específicos no predeterminados para poder ser explotada.

  • Poco después de que se publicara la vulnerabilidad, Akamai comenzó a ver intentos iniciales de ataque que exploraban posibles servidores en busca de esta vulnerabilidad.

  • En esta entrada de blog, los investigadores de Akamai proporcionan información detallada sobre la vulnerabilidad, las técnicas de explotación y las estrategias de detección.

  • Una regla rápida de Akamai Adaptive Security Engine proporciona automáticamente protección a los clientes de Akamai App & API Protector

  • También proporcionamos una consulta en la función Insight de Akamai Guardicore Segmentation para la detección

  • Los clientes de Akamai Hunt afectados ya han recibido un listado detallado de los activos vulnerables.

¿Qué es CVE-2025-24813?

El 10 de marzo de 2025, se anunció junto con el parche una vulnerabilidad de equivalencia de ruta en Apache Tomcat, un conocido servidor web de código abierto y contenedor de servlet Java que se utiliza habitualmente para alojar aplicaciones basadas en Java (CVE-2025-24813). El defecto afecta específicamente a la forma en que el servidor procesa las rutas de acceso a los archivos internamente. Pocos días después de la publicación de una prueba de concepto pública, los atacantes intentaban explotarla en su entorno natural, siguiendo una tendencia preocupante que hemos visto últimamente: un tiempo de explotación cada vez menor.

Apache etiquetó la gravedad de CVE-2025-24813 como moderada debido a los requisitos de explotación. Un servidor vulnerable tiene que cumplir un conjunto específico de requisitos previos, lo que hace que este problema sea menos susceptible de ser explotado. Sin embargo, independientemente de estos requisitos previos, dado que la vulnerabilidad podría llevar a la ejecución remota de código (RCE) no autenticado si se aprovecha, es importante aplicar parches de inmediato.

La vulnerabilidad se corrigió en las versiones 11.0.3, 10.1.35 y 9.0.99 de Apache Tomcat pero los servidores que ejecuten las versiones 11.0.0-M1 a 11.0.2, 10.1.0-M1 a 10.1.34 y 9.0.0-M1 a 9.0.98 aún pueden ser vulnerables.

¿Qué es CVE-2025-24813?

Cuando se configura un servlet predeterminado de Apache Tomcat para habilitar la funcionalidad de escritura, que está desactivada de forma predeterminada, un atacante puede tener un impacto significativo mediante la CVE-2025-24813. Cuando se combina con el comportamiento predeterminado de permitir solicitudes parciales PUT, un atacante puede cargar un archivo de sesión especialmente elaborado y serializado, por ejemplo, en un directorio editable. Una vez cargado este archivo, una solicitud HTTP posterior obliga a Tomcat a deserializar su contenido, lo que activa la ejecución de la carga integrada.

Su explotación puede dar lugar a una RCE, una filtración grave de información o una inyección de contenido malicioso que también puede dañar archivos de configuración críticos del servidor. Las versiones afectadas de Apache Tomcat incluyen de 11.0.0‑M1 a 11.0.2, 10.1.0‑M1 a 10.1.34 y 9.0.0‑M1 a 9.0.98.

Explotación de CVE-2025-24813

El resultado final de la explotación es bastante grave, pero para lograr la RCE a través de esta vulnerabilidad se requiere un conjunto sólido de requisitos previos:

  • El servlet predeterminado debe tener la capacidad de escritura activada de forma explícita.

  • Las solicitudes parciales PUT deben permitirse.

  • La aplicación web debe utilizar la persistencia de sesión basada en archivos con la ubicación de almacenamiento predeterminada (proporcionando un directorio de destino editable para la carga serializada maliciosa).

  • La aplicación debe tener presente o utilizar una biblioteca vulnerable a la deserialización (lo que permite que la ejecución de la carga se realice mediante un ataque de deserialización).

  • Además, un atacante debe conocer las convenciones de nomenclatura de archivos internas utilizadas por la aplicación y la estructura de directorios del sistema de archivos de destino.

Aunque la mayoría de los requisitos previos pueden estar vigentes, el más crítico, la capacidad de escritura de servlet predeterminado, está desactivada por defecto.

Tráfico de ataque observado

El grupo de inteligencia sobre seguridad (SIG) de Akamai identificó tráfico de ataque poco después de que se revelara la vulnerabilidad. La mayoría de las cargas de ataque observadas son sondas de vulnerabilidad diseñadas para ayudar a los atacantes a determinar si el servidor de destino es vulnerable. Una variante de ataque común se dirige específicamente a rutas de archivos .session, que siguen un esquema de nombres aleatorio, una base de seis caracteres anexada a la extensión de archivo .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

La carga útil más popular incluía un archivo .session como el cuerpo de la solicitud, que consistía en objetos Java serializados maliciosos. En la mayoría de los casos, el objeto malicioso utilizará el objeto java.net.URL para "llamar a casa" una vez que Apache Tomcat deserialice este archivo de sesión cargado (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

Detección de aplicaciones vulnerables

Identificar todas las instancias vulnerables de Apache Tomcat en una red puede ser todo un desafío. Los equipos de seguridad deben evaluar una amplia gama de activos, ya que Apache Tomcat está integrado en muchos lugares, incluidas las aplicaciones en las que se utilizan bibliotecas que los defensores desconocen.

Similar a la reciente vulnerabilidad de Apache Camel , esta biblioteca puede estar presente como una dependencia indirecta, lo que significa que no se incluye explícitamente en el código fuente, sino a través de otro paquete de software. Esto añade una capa de complejidad para la detección y, por supuesto, la mitigación.

Apache Tomcat se puede instalar por sí solo en Windows y Linux, o formar parte de aplicaciones Java. Se puede detectar mediante la exploración recursiva de directorios para buscar archivos de almacenamiento Java (JAR) denominados tomcat-api.jar. Una vez localizado un archivo JAR relacionado con Tomcat, se puede examinar su archivo de manifiesto para determinar la versión en uso.

Teniendo la versión extraída, los equipos de seguridad pueden compararla con el aviso de seguridad de Apache para evaluar posibles vulnerabilidades. Las versiones afectadas son las siguientes:

  • Apache Tomcat de 11.0.0-M1 a 11.0.2
  • Apache Tomcat de 10.1.0-M1 a 10.1.34
  • Apache Tomcat de 9.0.0.-M1 a 9.0.98

Detección automatizada

Para Akamai Guardicore Segmentation , hemos creado una consulta de Insight que puede identificar loas activos vulnerables. La consulta devolverá todas las rutas de acceso y hashes disponibles para tomcat-api.jar. El JAR devuelto puede ser verificado en VirusTotal a través de su hash o a través del archivo de manifiesto dentro del JAR para llegar a la versión correcta.

Windows: Apache Tomcat dentro de las aplicaciones

  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 dentro de las aplicaciones

  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 instalado

  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 instalado

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

Mitigación con Akamai App & API Protector

Muchos intentos de explotación se mitigan mediante reglas existentes del motor Adaptive Security Engine, incluidas las que detectan intentos de deserialización de Java (Figura 3).

  • 3000072 - Ataque de deserialización detectado

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

El 19 de marzo de 2025, el equipo de investigación de amenazas de Akamai también implementó una regla rápida de Adaptive Security Engine para los clientes de App & API Protector a fin de proporcionar una cobertura completa (Figura 4).

  • 3000957 — Se ha detectado un ataque de ejecución remota de código Apache Tomcat (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 versión 1 de la regla rápida tiene la acción predeterminada establecida en Alerta. Para bloquear los intentos de ataque, se recomienda a los clientes que establezcan la acción de la regla en Denegar después de revisar los activadores para eliminar los falsos positivos.

Resumen

El SIG de Akamai seguirá supervisando, informando y creando mitigaciones para amenazas de este tipo tanto para nuestros clientes como para la comunidad de seguridad en general. Para estar al día de las últimas noticias del grupo de inteligencia sobre seguridad de Akamai, consulte nuestra página de inicio sobre investigación y síganos en las redes sociales.