Tomcat远程执行代码漏洞破绽bugCVE-2017-12615的研究

9 月 19 日,腾讯云网安中间监测到 Apache Tomcat 修复了2个严重级其余漏洞破绽bug, 分离为: 信息泄漏漏洞破绽bug(CVE-2017-12616)、长途代码履行漏洞破绽bug(CVE-2017-12615),在某些场景下,入侵攻击者将分离能经由过程这两个漏洞破绽bug,获得用户服务器上 JSP 文件的源代码,或是经由过程经心结构的入侵攻击哀求,向用户服务器上传恶意病毒木马 JSP 文件,经由过程上传的 JSP 文件 ,可在用户服务器上履行随意率性代码。

云鼎实验室经由过程对付漏洞破绽bug描写,搭建漏洞破绽bug情况,并对其停止复现。此漏洞破绽bug为高危漏洞破绽bug,纵然长短默许设置装备摆设,然则一旦存在漏洞破绽bug,那末入侵攻击者能够胜利上传 Webshell,并节制服务器。

复现

依据描写,在 Windows 服务器下,将 readonly 参数设置为 false 时,即可经由过程 PUT 方法创立一个 JSP 文件,并能够履行随意率性代码。

经由过程浏览 conf/web.xml 文件,能够发明:

默许 readonly 为 true,当 readonly 设置为 false 时,能够经由过程 PUT / DELETE 停止文件操控。

设置装备摆设 readonly 为 false:

启动 Tomcat,应用 PUT 哀求创立文件:

提醒 404。经由过程描写中的 Windows 受影响,能够联合 Windows 的特征。其一是 NTFS 文件流,其二是文件名的相干限定(如 Windows 中文件名不能以空格开头)来绕过限定:

拜访发明能够失常输入:

阐发

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 了:

影响

因为存在去掉末了的 / 的特征,那末这个漏洞破绽bug天然影响 Linux 和 Windows 版本。而且颠末测试,这个漏洞破绽bug影响全体的 Tomcat 版本,从 5.x 到 9.x 无不中枪。今朝来讲,最好的办理方法是将 conf/web.xml 中对付 DefaultServlet 的 readonly 设置为 true,能力避免漏洞破绽bug。