page contents

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

漏洞背景 安全公告编号:CNTA-2020-0004 2020年02月20日, 360CERT 监测发现 国家信息安全漏洞共享平台(CNVD) 收录了 CNVD-2020-10487 Apache Tomcat文件包含漏洞。 CNVD-2020-10487/CVE-202...

漏洞背景

安全公告编号:CNTA-2020-0004

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

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

受影响的版本包括:Tomcat 6,Tomcat 7的7.0.100以下版本,Tomcat 8的8.5.51以下版本,Tomcat 9的9.0.31以下版本。

CNVD 对该漏洞的综合评级为“高危”。

影响版本

1、Apache Tomcat 9.x < 9.0.31
2、Apache Tomcat 8.x < 8.5.51
3、Apache Tomcat 7.x < 7.0.100
4、Apache Tomcat 6.x


漏洞分析

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服务器的两种方式:

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

3.2 代码分析

漏洞产生的主要位置在处理Ajp请求内容的地方

org.apache.coyote.ajp.AbstractAjpProcessor.java#prepareRequest()

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

javax.servlet.include.request_urijavax.servlet.include.path_infojavax.servlet.include.servlet_path

3.3 任意文件读取

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

3.4 命令执行

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

漏洞演示: 造成rce

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析


修复建议

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

Tomcat 竟爆出高危漏洞?Tomcat-Ajp 协议漏洞分析

下载链接如下:

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

  • 发表于 2020-02-28 15:20
  • 阅读 ( 563 )
  • 分类:Java开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章