
Analisi della vulnerabilità e PoC per Apache Tomcat - CGIServlet enableCmdLineArguments Remote Code Execution (RCE)
Analisi della vulnerabilità e PoC per Apache Tomcat - CGIServlet enableCmdLineArguments Esecuzione Remota di Codice (RCE)
Video PoC disponibile su https://www.youtube.com/watch?v=RA7kzuHOWqA
Apache Tomcat presenta una vulnerabilità nel CGI Servlet che può essere sfruttata per ottenere l'esecuzione remota di codice (RCE). È sfruttabile solo su Windows in una configurazione non predefinita in combinazione con file batch. Common Gateway Interface (CGI) è un protocollo standard che consente ai server web di eseguire programmi/script da riga di comando tramite richieste web. Questo protocollo permette anche di passare argomenti da riga di comando allo script o programma in esecuzione tramite parametri URL. Il protocollo stesso è definito nella RFC 3875. Quando eseguito su Windows con enableCmdLineArguments abilitato, il CGI Servlet in Apache Tomcat è vulnerabile all'RCE a causa di un bug nel modo in cui il JRE passa gli argomenti da riga di comando a Windows. Il CGI Servlet è disabilitato per impostazione predefinita. L'opzione CGI enableCmdLineArguments è disabilitata per impostazione predefinita in Tomcat 9.0.x (e sarà disabilitata per impostazione predefinita in tutte le versioni in risposta a questa vulnerabilità).
Video PoC disponibile su https://www.youtube.com/watch?v=RA7kzuHOWqA
1.È necessario avere un server Apache con una delle versioni vulnerabili di Tomcat elencate sopra installata su PC Windows. Inoltre, è necessario avere Java JRE installato sulla stessa macchina. 2.Nel mio caso ho installato Apache Tomcat 9.0.0.M1 sul server XAMPP. 3.Dopo aver installato Tomcat, apportare le seguenti modifiche alla configurazione:
a.Modificare conf/context.xml e impostare <Context privileged="true">

b.Apportare le seguenti modifiche nel file /conf/web.xml rispettivamente vicino alle righe 366 e 420.

enableCmdLineArguments deve essere impostato su True poiché stiamo utilizzando Tomcat 9.
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi/*</url-pattern>
</servlet-mapping>
4.Creare una cartella per i file CGI in webapps\ROOT\WEB-INF\cgi e aggiungere un file ism.bat con il seguente contenuto:

@echo off
echo Content-Type: text/plain
echo .
http://localhost:8080/cgi/ism.bat?&dir per verificare che il server funzioni.
cve-2019-0232.py aggiungendo l'IP del server e la porta.
Link al Video PoC: https://www.youtube.com/watch?v=RA7kzuHOWqA
[[a-zA-Z0-9\Q-_.\\/:\E]+] per impedire che l'input venga eseguito come comandi sui sistemi Windows.