• 我的位置:
  • 首页
  • -
  • 漏洞预警
  • -
  • 中间件
  • -
  • Apache Tomcat文件包含漏洞详细分析CVE-2020-1938(内含解决方案)
    • CNNVD编号:未知
    • 危害等级: 超危 
    • CVE编号:CVE-2020-1938
    • 漏洞类型: 文件包含
    • 威胁类型:未知
    • 厂       商:未知
    • 漏洞来源:未知
    • 发布时间:2020-09-11
    • 更新时间:2020-12-11

    漏洞简介

    2020年2月20日,CNVD公开了Apache Tomcat文件包含漏洞,CVE编号为CVE-2020-1938。Apache Tomcat 使用AJP协议通信过程中存在文件包含漏洞,由于AJP协议设计存在缺陷内部相关的属性可控,攻击者可以构造属性值,实现漏洞的利用,成功利用这些漏洞可导致获得敏感文件信息,甚至可以进行远程代码执行漏洞利用。

    漏洞公示

    以Tomcat7.0.72版本作为漏洞环境进行分析,首先我们看一下Tomcat服务器处理AJP协议的代码。跟踪org.apache.coyote.ajp.AjpProcessor类,tomcat在接收ajp请求之后会调用这个类处理消息,在经过协议识别,header处理之后,会调用prepareRequest()方法对AJP请求进行预处理。


    prepareRequest()方法在AbstractAjpProcessor类中定义,此方法会预先对request请求进行一些头部字段,属性值的设定。如下图:


    在设定的过程中,prepareRequest会将ajp消息里面的内容设置为request对象中的Attribute属性,如下图:


    由于这种特性,我们可以控制request对象的三个Attribute属性:

    javax.servlet.include.request_uri

    javax.servlet.include.path_info

    javax.servlet.include.servlet_path

    至此,漏洞的准备工作已经完成了,接下来就是利用这三个属性进行漏洞的利用。


    Tomcat在处理请求的时候,如果url未在web.xml中做映射时,通常会使用默认的DefaultServlet进行处理,在处理的过程中则会用到上面可控的三个属性读取文件。DefaultServlet对于常用方法的请求中,都会使用serveResource方法来获取资源文件,再通过getRelativePath方法获取资源文件的路径。



    再使用上述三个可控属性读取文件,这个时候我们就可以通过构造三个属性值,读取敏感文件信息。


    如果使用JspServlet处理请求时,同样也会用到这三个可控属性获取资源文件,结合文件上传,包含含有jsp代码的木马文件,则会触发远程代码执行漏洞。


    4 漏洞复现

    搭建Tomcat 7.0.72漏洞环境,通过AJP协议向Tomcat服务器发送构造好的数据,成功获取到了Tomcat webapp路径下的敏感文件信息。效果如下:



    RCE利用方式


    通过包含上传到Tomcat服务器的图片马,可以触发远程代码执行漏洞。效果如下:

    参考网站

    暂无

    受影响实体

    目前受影响的Apache Tomcat版本:

    Apache Software Foundation Tomcat 6.*

    Apache Software Foundation Tomcat 7.0.0 - 7.0.99

    Apache Software Foundation Tomcat 8.0.0 - 8.5.50

    Apache Software Foundation Tomcat 9.0.0 - 9.0.30

    补丁

    1修复建议

    官方发布的最新版本(Apache Software Foundation Tomcat 7.0.100;Apache Software Foundation Tomcat 8.0.51;Apache Software Foundation Tomcat 9.0.31)已经修复了此漏洞,请受影响的用户下载最新版本防御此漏洞。


    下载链接:https://tomcat.apache.org/


    2  临时解决方案

    如果相关用户暂时无法进行版本升级,可根据自身情况采用下列防护措施。


    一、若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。

    具体操作:

    (1)编辑<CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

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


    (2)将此行注释掉:

    <!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->

    (3)保存后需重新启动Tomcat,规则方可生效。


    二、若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。


    使用Tomcat 7和Tomcat 9的用户可为AJP Connector配置secret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>

    使用Tomcat 8的用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" requiredSecret="YOUR_TOMCAT_AJP_SECRET"/>


    3 深信服解决方案

    深信服安全云眼】在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。

    注册地址:http://saas.sangfor.com.cn


    深信服云镜】在漏洞爆发第一时间即完成检测能力的发布,部署了云镜的用户可以通过升级来快速检测网络中是否受该高危风险影响,避免被攻击者利用。离线使用云镜的用户需要下载离线更新包来获得漏洞检测能力,可以连接云端升级的用户可自动获得漏洞检测能力。


    深信服下一代防火墙】可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。


    深信服云盾】已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。


    深信服安全感知平台】可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。


    深信服安全运营服务】深信服云端安全专家提供7*24小时持续的安全运营服务。在漏洞爆发之初,云端安全专家即对客户的网络环境进行漏洞扫描,保障第一时间检查客户的主机是否存在此漏洞。对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。