FavoriteLoading
0

Apache Tomcat 远程执行代码CVE-2017-12617

   Apache Tomcat 远程执行代码CVE-2017-12617

 

 

 

 

Apache Tomcat团队  今天宣布  ,如果配置  了  默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操作系统上的潜在危险的远程执行代码(RCE)漏洞   参数  readonly 设置为  false 或者使用参数readonly 设置  启用WebDAV servlet  false。此配置将允许任何未经身份验证的用户上传文件(如WebDAV中所使用的)。发现阻止上传JavaServer Pages(.jsp)的过滤器可以避免。所以JSP可以上传,然后可以在服务器上执行。

现在,由于此功能通常不需要,所以大多数公开曝光的系统将不会  readonly 设置  false 并因此不受影响。

在Windows CVE-2017-12615的 Tomcat 7中,类似的漏洞 被修复后,发现了这个安全问题(CVE-2017-12617)  。不幸的是,它已经在 9月20日在Tomcat Bugtracker中公开披露  。

漏洞利用

该  公开描述的利用  是作为发送特殊特制HTTP作为简单  PUT 作为有效载荷用JSP请求到Tomcat服务器。

然后,当通过HTTP客户端(例如Web浏览器)访问新上传的JSP时,执行代码:

配置错误

默认servlet中的配置错误可以通过检查web.xml 默认servlet是否包含这样的init-param 来发现  (通常还有其他的init-params集):

    <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>
    </init-param>

请注意,错误配置也可能发生在代码或WebDAV servlet的配置中(如果启用)。

默认servlet的  文档  讲述了这样的只读参数:

这个上下文是否“只读”,因此像PUT和DELETE这样的HTTP命令被拒绝?[真正]

由于这句话没有提到这个参数的危险,我们  建议更改所述文档

减轻

将Tomcat更新到该漏洞被修复的版本(例如,  Tomcat 8.5.23)只能防止攻击者上传JSP。
但是  readonly init-param不应该  false 首先设置。如果此参数保留到默认(true),则攻击者无法上传文件。
另外,当然也可以 在前端服务器(例如WAF)上阻止  PUT 和  DELETE请求。

最后的想法

在我们眼里,几乎总是错的设置  readonly 到  false ,希望大多数公众开放的Tomcat服务器没有它反正设置为false,因此不会受到影响。

如果您是Apache Tomcat的用户,建议订阅  tomcat-announce  邮件列表  ,直接从Tomcat团队获取有关新版本和安全漏洞的信息。

开发人员更新(2017年10月04日)

在互联网上(例如,在一些网站上  堆栈溢出),你会发现,你应该设置的信息  readonly ,以  false 使您的Servlet接受  PUT 或  DELETE 请求。这是错误的!