一、漏洞描述:
2017年9月19日,Apache Tomcat官方 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615)
1.1CVE-2017-12616:信息泄露漏洞
当 Tomcat 中使用了 VirtualDirContext 时,攻击者将能通过发送精心构造的恶意请求,绕过设置的相关安全限制,或是获取到由 VirtualDirContext 提供支持资源的 JSP 源代码。
1.2远程代码执行漏洞(CVE-2017-12615)
如果Apache Tomcat服务器上启用了HTTP PUT请求方法(将web.xml中 readonly 初始化参数由默认值设置为 false),则可能存在远程代码执行漏洞。攻击者可以通过该漏洞上传jsp文件。
二、影响范围:
2.1信息泄露漏洞(CVE-2017-12616)影响范围:
Apache Tomcat 7.0.0 – 7.0.80
2.2远程代码执行漏洞(CVE-2017-12615)影响范围:
Apache Tomcat 5.x – 9.x
三、漏洞复现:
3.1 Apache Tomcat/7.0.79
修改/conf/web.xml
Readonly的含义:当设置为false时,PUT、DELETE方法生效
发送PUT请求包
思路可参考https://msdn.microsoft.com/en-us/library/dn393272.aspx
成功创建jsp文件
3.2 Apache Tomcat/7.0.81
上传失败
由于tomcat 对jsp做了一定处理。那么就考虑是否可以使其处理过程中对文件名的识别存在差异性,前面的流程中 topsec.jsp/ 识别为非jsp文件,而后续保存文件的时候,文件名不接受/字符,故而忽略掉。
修改文件名格式后再次提交请求:
3.3 Apache Tomcat/8.5.20 Linux
经过测试此方法在Linux上同样成功
四、修复方法:
注释掉web.xml的readonly配置,或者设置readonly=true
五、参考文档
http://tomcat.apache.org/security-7.html#Fixed_in_Apache_Tomcat_7.0.81
https://msdn.microsoft.com/en-us/library/dn393272.aspx
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-12615