美文网首页IT必备技能
重磅!Tomcat 爆出高危漏洞,你升级了没?

重磅!Tomcat 爆出高危漏洞,你升级了没?

作者: 猿天下 | 来源:发表于2020-03-01 12:48 被阅读0次

    作者:Hu3sky@360CERT

    0x01 漏洞背景

    2020年02月20日, 360CERT 监测发现 国家信息安全漏洞共享平台(CNVD) 收录了 CNVD-2020-10487 Apache Tomcat文件包含漏洞

    Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。

    CNVD-2020-10487/CVE-2020-1938是文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等。

    0x02 影响版本

    • Apache Tomcat 9.x < 9.0.31
    • Apache Tomcat 8.x < 8.5.51
    • Apache Tomcat 7.x < 7.0.100
    • Apache Tomcat 6.x

    0x03 漏洞分析

    3.1 AJP Connector

    Apache Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http Connector,使用Http(HTTP/1.1)协议

    在conf/server.xml文件里,他对应的配置为

      <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    

    而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

    Ajp协议对应的配置为

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

    Tomcat服务器默认对外网开启该端口 Web客户访问Tomcat服务器的两种方式:

    public_image

    3.2 代码分析

    漏洞产生的主要位置在处理Ajp请求内容的地方org.apache.coyote.ajp.AbstractAjpProcessor.java#prepareRequest()

    public_image

    这里首先判断SC_A_REQ_ATTRIBUTE,意思是如果使用的Ajp属性并不在上述的列表中,那么就进入这个条件

    public_image

    SC_A_REQ_REMOTE_PORT对应的是AJP_REMOTE_PORT,这里指的是对远程端口的转发,Ajp13并没有转发远程端口,但是接受转发的数据作为远程端口。

    public_image

    于是这里我们可以进行对Ajp设置特定的属性,封装为request对象的Attribute属性 比如以下三个属性可以被设置

    javax.servlet.include.request_uri
    
    javax.servlet.include.path_info
    
    javax.servlet.include.servlet_path
    

    3.3 任意文件读取

    public_image

    当请求被分发到org.apache.catalina.servlets.DefaultServlet#serveResource()方法

    public_image

    调用getRelativePath方法,需要获取到request_uri不为null,然后从request对象中获取并设置pathInfo属性值和servletPath属性值

    public_image

    接着往下看到getResource方法时,会把path作为参数传入,获取到文件的源码

    public_image

    漏洞演示: 读取到/WEB-INF/web.xml文件

    public_image

    3.4 命令执行

    当在处理 jsp 请求的uri时,会调用 org.apache.jasper.servlet.JspServlet#service()

    public_image

    最后会将pathinfo交给serviceJspFile处理,以jsp解析该文件,所以当我们可以控制服务器上的jsp文件的时候,比如存在jsp的文件上传,这时,就能够造成rce

    public_image

    漏洞演示: 造成rce

    public_image

    0x04 修复建议

    更新到如下Tomcat 版本

    Tomcat 分支 版本号
    Tomcat 7 7.0.0100
    Tomcat 8 8.5.51
    Tomcat 9 9.0.31

    Apache Tomcat 6 已经停止维护,请升级到最新受支持的 Tomcat 版本以免遭受漏洞影响。

    请广大用户时刻关注 Apache Tomcat® – Welcome! 获取最新的 Tomcat Release版本,以及 apache/tomcat: Apache Tomcat 获取最新的 git 版本。

    下载链接如下:

    7.0.100版本:https://tomcat.apache.org/download-70.cgi

    8.5.51版本:https://tomcat.apache.org/download-80.cgi

    9.0.31版本 https://tomcat.apache.org/download-90.cgi

    作者:Hu3sky
    www.anquanke.com/post/id/199448

    2020年,愿所有人都能幸福将康,每天开心,被这个世界温柔对待

    ​欢迎关注于哥的技术公众号【终端研发部】,话痨技术,职场,招聘,在线面试,进阶提升。没有做不到的,只有想不到的。回复1024即可获得相关的学习资料

    相关文章

      网友评论

        本文标题:重磅!Tomcat 爆出高危漏洞,你升级了没?

        本文链接:https://www.haomeiwen.com/subject/ouugchtx.html