Laboratorio de reproducción local para Apache Tomcat CVE-2025-24813, que documenta las condiciones de explotación y la verificación asistida por IA de la vulnerabilidad.
Solo para experimentos locales autorizados, comprensión de parches y verificación defensiva. No envíes solicitudes a objetivos no autorizados.
Este proyecto documenta el proceso de reproducción de CVE-2025-24813 en una instancia local de Apache Tomcat 9.0.98: mediante el uso de partial PUT para escribir un archivo temporal, en una configuración con persistencia de Session basada en archivos habilitada y condiciones de filtrado de deserialización laxas, se verifica la cadena de carga del archivo de Session y la ejecución del Payload.
.inject.session en el directorio de trabajo, y luego confirma que el acceso desencadena la carga de la Session y la ejecución del Payload; no se puede determinar el éxito únicamente por el código de estado HTTP.409 o 500, pero la escritura del archivo y la activación posterior aún deben evaluarse por etapas combinando el contenido del archivo, los registros del servidor y los efectos secundarios controlados.El aviso oficial de seguridad de Apache enumera los requisitos de activación de CVE-2025-24813, el alcance de impacto (Tomcat 9.0.0-M1 a 9.0.98) y la información de corrección en 9.0.99: https://tomcat.apache.org/security-9
java -version)requests127.0.0.1:8080 localscripts/reproduce_local.py # Script de verificación local, el objetivo predeterminado es localhost:8080
evidence/ # Capturas de pantalla del experimento (renombradas por pasos)
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
python scripts/reproduce_local.py
El objetivo en el script está fijado a la dirección del experimento local y no incluye lógica de escaneo remoto. Antes de ejecutar, se debe confirmar en la instancia local de Tomcat:
work/Catalina/localhost/ROOT son observables.PUT /inject/session con Content-Range, observar si se genera el archivo temporal;work/Catalina/localhost/ROOT/.inject.session;JSESSIONID=.inject, observar la carga del archivo de Session;409/500 directamente como fallo o éxito de la reproducción de la vulnerabilidad.Los encabezados HTTP deben usar CRLF reales (bytes 0d 0a), no envíes 0x0d0x0a como texto visible. En Python se debe usar b"\\r\\n" o dejar que requests se encargue de construir los encabezados de la solicitud.
Priorice la actualización a una versión de Tomcat que incluya la corrección y vuelva a revisar los permisos de escritura del Default Servlet, los escenarios de uso de PUT parcial y la configuración del filtro de persistencia de Session. Tras la corrección, repita el mismo conjunto de pasos de verificación local; se espera que la cadena de escritura de archivos temporales o la cadena de carga de Session ya no se cumplan.
Este repositorio no proporciona funcionalidades de escaneo, persistencia o explotación masiva dirigidas a objetivos de Internet. Todo el contenido está limitado al entorno de experimentos local bajo mi control y a entornos de pruebas explícitamente autorizados.