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

http://dy.163.com/v2/article/detail/F7VD50BL0511CJ6O.htmlhtml


  

  Apache Tomcat是一个开源的Java servlet容器。2月20日,长亭科技研究人员发现了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。该漏洞是因为Tomcat AJP协议存在缺陷而致使,攻击者利用该漏洞可经过构造特定参数,读取服务器webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。web

  本文介绍如何利用该漏洞实现远程代码执行。shell

  
AJP协议

apache

  AJP是Apache Tomcat web服务器用来与servlet容器通讯的一个二进制协议。主要用于集群或逆向代理场景,其中web服务器与应用服务器或servelet容器进行通讯。tomcat

  简单来讲,就是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还须要一些其余的先决条件。这些条件同时知足在现实场景中是很难的。

app

  巴西知名的安全研究人员Joo Matos将这些先决条件进行了总结。webapp

  

  图 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文件的错误配置:

  < Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ / >

  因此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

  

  图 5. Commit 9ac90532,检查参数secretRequired是否设置为true和是否有定义的secret

  

  图 6. Commit 64fa5b99,若是到AJP Connector的请求中含有任意或未识别的属性,拦截并返回403错误

  
结论

  综上所述,Ghostcat自己并非一个RCE漏洞,但仍然带来许多潜在的风险。考虑到当前已经有不少该漏洞的公开利用方法,所以研究人员建议用户尽快更新到最新的Tomcat版本,以较少被利用的风险。

  参考及来源:https://blog.trendmicro.com/trendlabs-security-intelligence/busting-ghostcat-an-analysis-of-the-apache-tomcat-vulnerability-cve-2020-1938-and-cnvd-2020-10487/

相关文章
相关标签/搜索