CVE-2025-24813: RCE mediante PUT parcial en Apache Tomcat
Una vulnerabilidad crítica en Apache Tomcat permite la ejecución remota de código sin autenticación mediante solo dos solicitudes HTTP. El ataque aprovecha la función de PUT parcial de Tomcat para cargar un objeto Java serializado y, a continuación, desencadena la deserialización mediante una solicitud GET. CVSS 9.8. Afecta a Tomcat 9, 10 y 11 con la configuración predeterminada.
| Atributo | Valor |
|---|---|
| ID de CVE | CVE-2025-24813 |
| Vector CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-502: Deserialización de datos no confiables |
| Publicación | 10 de marzo de 2025 |
| Explotación | Activa — PoC pública publicada en menos de 30 horas |
¿Qué es CVE-2025-24813?
Apache Tomcat admite el «PUT parcial», una función HTTP que permite a los clientes cargar archivos grandes por segmentos mediante encabezados Content-Range. Tomcat almacena estas cargas parciales como archivos temporales en un directorio de trabajo. La vulnerabilidad surge de dos fallos en esta implementación:
- El nombre del archivo temporal se deriva de la ruta URL de carga, que está parcialmente controlada por el atacante
- Si el mecanismo de persistencia de sesiones de Java está habilitado (almacenando las sesiones en archivos), Tomcat puede deserializar cualquier archivo del directorio de trabajo que tenga la extensión
.session
Un atacante puede combinar estos fallos para cargar un objeto Java serializado malicioso, camuflado como una carga parcial, y luego desencadenar su deserialización solicitando una URL que Tomcat interpreta como una consulta de sesión.
🚨 PoC pública en menos de 30 horas
Se publicó en GitHub un exploit funcional aproximadamente 30 horas después de divulgarse CVE-2025-24813. El ataque de dos solicitudes es extremadamente fácil de automatizar y se observaron campañas de explotación masiva en cuestión de días. Cualquier servidor Tomcat expuesto a Internet, sin parchear y con la configuración predeterminada debe considerarse comprometido.
Versiones afectadas
| Versión de Tomcat | Rango afectado | Versión corregida |
|---|---|---|
| Apache Tomcat 11.x | 11.0.0-M1 a 11.0.2 | 11.0.3+ |
| Apache Tomcat 10.x | 10.1.0-M1 a 10.1.34 | 10.1.35+ |
| Apache Tomcat 9.x | 9.0.0.M1 a 9.0.98 | 9.0.99+ |
Requisitos previos para la RCE: Deben cumplirse ambas condiciones:
- El servlet predeterminado tiene habilitada la escritura (
readonly=false) — NO es la configuración predeterminada; debe configurarse explícitamente - Está configurada la persistencia de sesiones basada en archivos — O las escrituras mediante PUT parcial llegan a una ruta accesible para la deserialización
Nota sobre los requisitos previos: Algunas fuentes informaron inicialmente que los requisitos previos eran estrictos. Sin embargo, el análisis de entornos reales demostró que ciertas configuraciones habituales de Tomcat (incluidas algunas distribuciones de servidores de aplicaciones) cumplen ambas condiciones. Aplique el parche de todos modos: la puntuación CVSS refleja las condiciones del peor escenario.
El ataque de dos solicitudes
# Solicitud 1: cargar un objeto serializado malicioso mediante PUT parcial PUT /.xxxxx HTTP/1.1 Host: target.com Content-Type: application/octet-stream Content-Range: bytes 0-1233/1234 Content-Length: 1234 [carga útil de una cadena de gadgets Java serializada — p. ej., Commons Collections] # Tomcat lo almacena como archivo temporal en el directorio de trabajo # Nombre de archivo derivado de la URL: .xxxxx → almacenado como carga parcial # Solicitud 2: desencadenar la deserialización mediante una consulta de sesión GET /.xxxxx HTTP/1.1 Host: target.com Cookie: JSESSIONID=.xxxxx # Tomcat busca el archivo de sesión que coincide con el ID de sesión # Encuentra el archivo del atacante → lo deserializa → RCE
Por qué Tomcat es un objetivo de alto valor
Apache Tomcat es uno de los servidores de aplicaciones Java más utilizados del mundo y se emplea en:
- Aplicaciones web Java empresariales
- Aplicaciones Spring Boot desplegadas como archivos WAR
- Aplicaciones J2EE heredadas
- Aplicaciones internas de recursos humanos, ERP y negocio
- Microservicios nativos de la nube
Una RCE en Tomcat suele implicar acceso a credenciales de bases de datos, API internas y datos empresariales confidenciales almacenados por las aplicaciones que se ejecutan en él.
Detección
# Comprobar la versión de Tomcat /opt/tomcat/bin/version.sh # o comprobar el manifiesto de catalina.jar unzip -p /opt/tomcat/lib/catalina.jar META-INF/MANIFEST.MF | grep Implementation-Version # Buscar cargas PUT parciales sospechosas en los registros de acceso grep 'PUT' /opt/tomcat/logs/localhost_access_log.* | grep -v '200\|201\|204' grep 'PUT.*Content-Range' /opt/tomcat/logs/localhost_access_log.* # Buscar archivos inusuales en el directorio de trabajo de Tomcat find /opt/tomcat/work -name "*.session" -newer /opt/tomcat/conf/server.xml find /opt/tomcat/work -type f -newer /opt/tomcat/conf/server.xml # Comprobar si la escritura del servlet predeterminado está habilitada grep -r "readonly" /opt/tomcat/conf/web.xml /opt/tomcat/webapps/
Mitigación
- Aplique el parche inmediatamente: Actualice a Tomcat 9.0.99+, 10.1.35+ u 11.0.3+
- Deshabilite la escritura del servlet predeterminado (si no es necesaria):
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>readonly</param-name> <param-value>true</param-value> <!-- Asegúrese de que esto sea true --> </init-param> </servlet> - Deshabilite la persistencia de sesiones basada en archivos: Cambie a la persistencia de sesiones en memoria o en una base de datos
- Implemente reglas de WAF: Bloquee las solicitudes HTTP PUT con encabezados
Content-Rangesi no son necesarias - Utilice filtros de deserialización de Java: Configure los filtros de serialización de Java 9+ para restringir las clases que pueden deserializarse
Capacidad de detección de KENSAI
- Detección de versiones de Tomcat: KENSAI identifica las versiones de Apache Tomcat mediante encabezados HTTP, páginas de error y rutas predeterminadas en todos los activos expuestos a Internet
- Sonda de explotación segura: Confirma la posibilidad de explotar CVE-2025-24813 sin ejecutar cargas útiles
- Auditoría de configuración: Comprueba la presencia de un servlet predeterminado con escritura habilitada y de persistencia de sesiones basada en archivos
- Descubrimiento interno: Encuentra instancias de Tomcat ejecutándose en redes internas mediante un agente o escaneo de red
- Repetición automatizada de pruebas: Confirma la aplicación del parche después de la remediación
Encuentre sus servidores Tomcat expuestos antes que los atacantes
KENSAI identifica cada instancia de Apache Tomcat en su entorno y comprueba si está afectada por CVE-2025-24813 y otras vulnerabilidades críticas de servidores de aplicaciones Java.
Buscar vulnerabilidades de Tomcat →