欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

CVE-2020-1938/CNVD-2020-10487漏洞分析

来源:本站整理 作者:佚名 时间:2020-03-17 TAG: 我要投稿

Apache Tomcat是一个开源的Java servlet容器。2月20日,长亭科技研究人员发现了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。
本文介绍如何利用该漏洞实现远程代码执行。
AJP协议
AJP是Apache Tomcat web服务器用来与servlet容器通信的一个二进制协议。主要用于集群或逆向代理场景,其中web服务器与应用服务器或servelet容器进行通信。
简单来说,就是HTTP Connector暴露给客户端了,AJP是webserver (如Apache HTTPD)和Apache Tomcat服务器之间内部使用的,如图1所示。AJP在Apache HTTP服务器中是以模块的形式实现的,表示为mod_jk或mod_proxy_ajp。AJP本身并不会暴露到外部,这也是下一部分要讨论的RCE场景的先决条件之一。

图 1. Apache JServ协议说明
Ghostcat漏洞
Ghostcat本身是一个Local File Include/Read(本地文件包含/读)漏洞,而非任意文件上传/写漏洞。在Apache Tomcat的安全公告页中,Ghostcat被描述为“AJP Request Injection and potential Remote Code Execution”(AJP请求注入和潜在的远程代码执行)漏洞。Potential表明Ghostcat默认情况下并非RCE漏洞。公告中进一步描述了RCE发生的所需要的条件:web应用需要允许文件上传和允许将上传的文件存储到web应用中,或者攻击者可以获取web应用内容的控制权。融合了将文件看作JSP处理的场景可以实现RCE。总的来说,如果Tomcat AJP Connector对外暴露了,那么Ghostcat就会引发一些潜在的安全风险。但对外暴露并不是推荐的配置。此外,RCE还需要一些其他的先决条件。这些条件同时满足在现实场景中是很难的。
巴西知名的安全研究人员João Matos将这些先决条件进行了总结。

图 2. RCE发生的先决条件
研究人员对这些先决条件进行进一步分析:
· 通过APP特征上传文件。第一个先决条件表示系统中应该预先安装一个含有文件上传特征的应用。如果安装了,潜在攻击者就可以用web应用本身的文件上传漏洞来上传恶意web shell文件。将文件翻译为JSP只有在上传漏洞限制特定文件(如JPG或TXT)扩展时才需要。
· 文件保存在document root中。攻击者入侵应用后,就可以上传恶意文件,上传的恶意文件需要保存在应用的root文件夹中。这个先决条件几乎是不可能的,因为:-在Java应用中将文件保存到应用的root文件夹中是不常见的;
此外,从开发者角度来看,因为大多数Apache Tomcat应用都是以.WAR文件形式存在的,因此上传文件到root文件夹是没有意义的。
应用root文件夹是临时的,所以当有新版本的应用升级时,文件夹就会被覆写。
· 直接到达AJP端口。前面两个条件满足后,攻击者就可以直接从互联网通过反向代理到达Tomcat AJP Connector (默认端口8009),这也就是外部暴露的AJP。如前所述,这并不是常见的推荐配置。而且即时AJP Connector暴露了,因为AJP是一个二进制文件,因此攻击者尝试连接也会接收到一个来自服务器的400 Bad Request响应。
Ghostcat的严重性
Ghostcat漏洞影响大多数的Apache Tomcat版本。但是考虑到RCE漏洞利用所需的先决条件,研究人员认为在现实中将Ghostcat变成RCE漏洞是几乎不可能的。
大多数的PoC都证明了在Apache Tomcat的webapps/ROOT中有一个webshell.txt文件,然后可以将漏洞变成RCE漏洞。但是在实际场景中,已经存在于网络中的攻击者可能利用该漏洞来进行下一步攻击,因为可以直接到达AJP Connector。但是要到达攻击的这一阶段,仍然需要上传一个恶意文件,比如webapps/folder文件夹的webshell,然后将该文件翻译为JSP,这是很难做到的。
Ghostcat补丁
Apache Tomcat发布了一系列补丁来解决Ghostcat漏洞。
因为Ghostcat 漏洞利用的是AJP Connector中默认启用的/conf/server.xml文件的错误配置:
所以Apache Tomcat团队在commit 4c933d8禁用了AJP connector,如图3所示:

图 3. Commit 4c933d8,默认禁用AJP connector
因为补丁禁用了AJP所以也就阻止了Ghostcat漏洞利用的可能性。此外,Apache还发布了一个补丁,只需要限制AJP为默认监听回还端口无需禁用AJP,如图4所示。Apache Tomcat研究人员还做了一些改变来改善AJP协议的整体使用情况,比如当secretRequired属性设置为true时强制定义一个secret。同时也确保所有到AJP Connector的含有任意或未识别的属性的请求接收到403响应,如图6所示。

图 4. Commit 0e8a50f0,强制SJP协议监听回还地址而非0.0.0.0

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载