欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Tomcat 爆出高危漏洞!

程序员文章站 2022-04-28 18:46:52
一、漏洞背景 安全公告编号:CNTA 2020 0004 "2020年02月20日, 360CERT 监测发现 国家信息安全漏洞共享平台(CNVD) 收录了 CNVD 2020 10487 Apache Tomcat文件包含漏洞。" CNVD 2020 10487/CVE 2020 1938是文件包 ......

Tomcat 爆出高危漏洞!

一、漏洞背景

安全公告编号: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 爆出高危漏洞!

3.2 代码分析

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

Tomcat 爆出高危漏洞!

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

Tomcat 爆出高危漏洞!

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

Tomcat 爆出高危漏洞!

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

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

3.3 任意文件读取

Tomcat 爆出高危漏洞!

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

Tomcat 爆出高危漏洞!

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

Tomcat 爆出高危漏洞!

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

Tomcat 爆出高危漏洞!

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

Tomcat 爆出高危漏洞!

3.4 命令执行

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

Tomcat 爆出高危漏洞!

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

Tomcat 爆出高危漏洞!

漏洞演示:造成rce

Tomcat 爆出高危漏洞!

四、修复建议

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

Tomcat 爆出高危漏洞!

下载链接如下:

7.0.100版本:

8.5.51版本:

9.0.31版本

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

推荐去我的博客阅读更多:

1.java jvm、集合、多线程、新特性系列教程

2.spring mvc、spring boot、spring cloud 系列教程

3.maven、git、eclipse、intellij idea 系列工具教程

4.java、后端、架构、阿里巴巴等大厂最新面试题

生活很美好,明天见~