最近有朋友在后台反馈 Tomcat 的漏洞,
到 Tomcat 的mail-list查看电子邮件,果然,电子邮件组的官方公告已经发布。
这次我们分析了两个 CVE 中的一个漏洞比官方公告更有影响力,除了 Windows 除了平台,其他平台也受到另一种使用形式的影响,并具体执行任何代码的风险。因此,请在此描述您的应用程序。如有影响,请尽快修复。
免责声明
本文仅进行技术分析和漏洞提醒,任何基于此的行为都与本文无关。
漏洞描述
9月19日晚,Apache Tomcat 官方公告称 所有 Windows 在平台上打开 HTTP PUT *** 支持, 有执行远程代码的风险。漏洞代码: CVE-2017-12615
官方描述如下:
详细说明:
我们很久以前的文章介绍过,Tomcat 包含两个默认 Servlet,一是 DefaultServlet,一个是 JspServlet。这两个 Servlet 都是在 Tomcat 默认的 web.xml 包含在内,自定义web.xml 进行 merge,所以每个应用都会有这两个 Servlet。
由于每个 Servlet 都可以设置一些初始化参数(init-param) ,所以默认web.xml 包含一些常用的,如是否允许文件列表,是否允许debug,fileEncoding,sendFile大小 等等。可以设置是否允许HTTP PUT *** 。
参数配置:readOnly,主要用于对方HTTP 的 PUT / DELETE *** 是否被拒绝。
readOnly 默认是true,也就是说,默认没有启用PUT、DELETE这些 *** 。如果一些朋友的容器因为应用程序依赖而打开readOnly ,一定要注意!
在 DefaultServlet 的 PUT在处理逻辑中,将首先判断readOnly
对于 DefaultServlet 的mapping 配置如下:
此时,如果要求URL 类似:
请求 *** : PUT
使用Postman可轻松构建一个(使用 *** 可参考:Web开发神器之PostMan,接口测试不再担心)
PUT 实际处理内容时,会提取并写作
虽然这里的路径是abc.jsp由于文件名称规范的限制,在实际处理过程中会进行处理,***一个/ 会被处理,所以创建了一个名字abc.jsp的文件,文件内容就是我们传来的raw 内容。这里的内容可以随意写。
当PUT请求返回后,再次请求 abc.jsp,此时 raw随机写的内容将被执行,即我们前面提到的任何代码执行的风险。
Apache Tomcat 官方描述为 Windows 如果要求,平台上的漏洞也是命名问题url里是以abc.jsp 这样的 PUT 请求,到达 DefaultServlet 处理时,创建文件仍然会过滤掉 的空间,风险相同。
解决方案:
要理这个问题需要 readOnly 设置为 true,或者保持初始值,而不是web.xml增加配置。
【本文为51CTO专栏作者“侯树成”请通过作者微信微信官方账号转载原稿。『Tomcat那些事儿』获取授权】
戳这里,看作者更好的文章
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。