Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

简介: 本文讲的是Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass, Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615),在某些场景下,攻击者将分别能通过这两个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意 JSP 文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码。

本文讲的是Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

(注:图片来源于网络)

Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)远程代码执行漏洞(CVE-2017-12615),在某些场景下,攻击者将分别能通过这两个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意 JSP 文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码。

漏洞概述   

信息泄露漏洞(CVE-2017-12616)

当 Tomcat 中使用了 VirtualDirContext 时,攻击者将能通过发送精心构造的恶意请求,绕过设置的相关安全限制,或是获取到由 VirtualDirContext 提供支持资源的 JSP 源代码。

远程代码执行漏洞(CVE-2017-12615)

当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。

漏洞危害

泄露用户代码数据,或用户服务器被攻击者控制

影响版本

1、信息泄露漏洞(CVE-2017-12616)影响:Apache Tomcat 7.0.0 – 7.0.80

2、 远程代码执行漏洞(CVE-2017-12615)影响: Apache Tomcat 7.0.0 – 7.0.79

CVE-2017-12615复现

根据描述,在 Windows 服务器下,将 readonly 参数设置为 false 时,即可通过 PUT 方式创建一个 JSP 文件,并可以执行任意代码。   

通过阅读 conf/web.xml 文件,可以发现:  

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

默认 readonly 为 true,当 readonly 设置为 false 时,可以通过 PUT / DELETE 进行文件操控。  

配置 readonly 为 false:

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

启动 Tomcat,利用 PUT 请求创建文件:

提示 404。通过描述中的 Windows 受影响,可以结合 Windows 的特性。其一是 NTFS 文件流,其二是文件名的相关限制(如 Windows 中文件名不能以空格结尾)来绕过限制: 

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

访问发现可以正常输出: 

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

分析

Tomcat 的 Servlet 是在 conf/web.xml 配置的,通过配置文件可知,当后缀名为 .jsp 和 .jspx 的时候,是通过JspServlet处理请求的:  

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

可以得知,“1.jsp ”(末尾有一个和空格)并不能匹配到 JspServlet,而是会交由DefaultServlet去处理。当处理 PUT 请求时:

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

会调用resources.bind:

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

dirContext 为FileDirContext:

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

调用 rebind创建文件:

又由于 Windows 不允许“ ”作为文件名结尾,所以会创建一个 .jsp 文件,导致代码执行。

Bypass 分析

然而,经过黑盒测试,当 PUT 地址为/1.jsp/时,仍然会创建 JSP,会影响 Linux 和 Windows 服务器,并且 Bypass 了之前的补丁,分析如下。 

在进入 bind 函数时,会声明一个 File 变量:

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

进入 File 后,会对 name 进行 normalize

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass

最后得到的 path 就是没有最后 / 的 path 了:

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass









原文发布时间为:2017年9月20日

本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。.

原文链接


目录
相关文章
|
2月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
66 0
|
监控 算法 Java
java tomcat服务无缘无故挂掉分析和解决方案
最近有同事反应有时候xxx系统有时候会时不时出现服务异常提示,一上机器,发现xxx服务进程不在,重启服务后又恢复了,所以这边就需要去跟进问题。
2702 0
|
Java 应用服务中间件 容器
Tomcat原理系列之三:对请求的过程详细分析
Tomcat原理系列之三:对请求的过程详细分析
Tomcat原理系列之三:对请求的过程详细分析
|
Web App开发 网络协议 Java
tomcat 的并发能力分析
tomcat 的并发能力分析
607 0
tomcat 的并发能力分析
|
设计模式 安全 Java
【Tomcat技术专题】循序渐进,分析Servlet容器鼻祖的Server和Service组件原理
【Tomcat技术专题】循序渐进,分析Servlet容器鼻祖的Server和Service组件原理
139 0
【Tomcat技术专题】循序渐进,分析Servlet容器鼻祖的Server和Service组件原理
|
Java 应用服务中间件 Maven
springboot项目打成war包放入tomcat中运行,原理分析
1.需要将pom.xml文件的packaging设置为war。 2.改成war包之后,就可以直接使用maven的命令将项目打成一个war包了。 3.将这个war包直接放入到tomcat中运行。 4.启
286 0
|
监控 Java 应用服务中间件
【SpringBoot技术专题】「Tomcat技术专区」用正确的姿势如何用外置tomcat配置及运行(Tomcat优化分析)
【SpringBoot技术专题】「Tomcat技术专区」用正确的姿势如何用外置tomcat配置及运行(Tomcat优化分析)
313 0
|
前端开发 Java 应用服务中间件
Tomcat的启动流程分析
Tomcat的启动流程分析
Tomcat的启动流程分析
|
应用服务中间件 Shell
idea 远程打断点 tomcat
idea 远程打断点 tomcat
205 0
idea 远程打断点 tomcat
|
监控 Java 应用服务中间件
JProfiler10.1.3:远程Linux服务器Tomcat的JVM性能监控
JProfiler10.1.3:远程Linux服务器Tomcat的JVM性能监控
358 0
JProfiler10.1.3:远程Linux服务器Tomcat的JVM性能监控