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

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

云鼎实验室通过对于漏洞描述,搭建漏洞环境,并对其进行复现。此漏洞为高危漏洞,即使是非默认配置,但是一旦存在漏洞,那么攻击者可以成功上传 Webshell,并控制服务器。

复现

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

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

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

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

配置 readonly 为 false:

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

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

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

访问发现可以正常输出:

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

分析

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

而其他的静态文件是通过DefaultServlet处理的:

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

会调用resources.bind:

dirContext 为FileDirContext:

调用 rebind创建文件:

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

Bypass 分析

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

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

进入 File 后,会对 name 进行 normalize

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

影响

由于存在去掉最后的 / 的特性,那么这个漏洞自然影响 Linux 以及 Windows 版本。而且经过测试,这个漏洞影响全部的 Tomcat 版本,从 5.x 到 9.x 无不中枪。目前来说,最好的解决方式是将 conf/web.xml 中对于 DefaultServlet 的 readonly 设置为 true,才能防止漏洞。

本文作者:腾讯云安全团队,转载请注明来自FreeBuf.COM

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

大家知道什么是git中的 .gitignore吗?

团队开发中,需要一种工具来协调我们的工作。因为代码不是由一个人写的,而是团队成员,每一个人都有自己的工作。于是呢,每天都有代码提交到项目里面,每天开始写的时候,...

3047
来自专栏农夫安全

文件上传漏洞超级大汇总-第一篇

? 先上图,由于太大复制麻烦我分两次贡献出来吧。废话不多说了,直接上正文 1、IIS解析漏洞 1、目录解析(IIS6.0):建立*.asa 、*.asp格式的...

3526
来自专栏CDA数据分析师

如何发布一个Python命令行工具

上次写的一个终端里面斗鱼TV弹幕Python版本和Ruby版本,并且发布到PIP和RubyGems上面.在发布PIP包的时候,居然Google不到一篇可以非常好...

2288
来自专栏青枫的专栏

sublime text 3如何安装插件

学习Sublime Text扩展插件的安装前,让我们来先了解一下它的插件官方网站:https://packagecontrol.io/。

701
来自专栏伪君子的梦呓

下载 Jekyll,并使用它在本地搭建一个博客

964
来自专栏Crossin的编程教室

[新手向视频]新版PyCharm创建项目为什么会有问题

文字版 之前我们发过一篇关于 PyCharm 的文章: 喏,你们要的 PyCharm 快速上手指南 文章帮好多新手解决了问题,在微博上还被知乎官方账号推荐了。 ...

3077
来自专栏菜鸟程序员

Android studio安装与配置

763
来自专栏编程微刊

基于mpvue的小程序项目搭建的步骤步骤1. 检查下 Node.js 是否安装成功

1263
来自专栏王亚昌的专栏

office系列文档的在线预览解决方案 - 在linux平台下转为pdf

office系列文档包括:.ppt .pptx .doc .docx .xls .xlsx 等常用格式。

862
来自专栏玩转JavaEE

V部落博客管理平台开源啦! Vue+SpringBoot强强联合!

V部落是一个多用户博客管理平台,采用Vue+SpringBoot开发。 演示地址: http://45.77.146.32:8081/index.html 项目...

3319

扫码关注云+社区