CVE-2020-1938:Apache Tomcat服务器任意文件读取/包含漏洞通告

 

近日检测到CNVD发布了CNVD-2020-10487漏洞通告,360灵腾安全实验室判断漏洞等级为严重,利用难度中,威胁程度高,影响面大。建议使用用户及时安装最新补丁,以免遭受黑客攻击。

 

0x00 漏洞概述

Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全局管理和Tomcat阀等。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。

攻击者通过Ajp协议端口利用该漏洞进行文件读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等。

 

0x01 漏洞详情

查看 Github 上 tomcat commit 历史记录可以看到有许多对AJP协议的代码提交

在其中一条commit中,发现了AJP白名单的添加

对代码块进行分析,发现java/org/apache/coyote/ajp/AbstractAjpProcessor.java中的 prepareRequest() 函数的功能是对 AJP 协议进行解析

通过对该函数的调试,可以发现在处理 Constants.SC_A_REQ_ATTRIBUTE 这部分内容时,代码中未进行内容校验,盲目的将请求的内容进行复制

因此,我们可以修改AJP请求的属性,进行能够控制任意 request.setAttribute 的key和value,通过控制request对象中这三个属性的值实现文件读取

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

利用效果:

 

0x02 影响版本

  • Tomcat 6.*
  • Tomcat 7.* < 7.0.100
  • Tomcat 8.* < 8.5.51
  • Tomcat 9.* < 9.0.31

 

0x03 漏洞检测

相关用户可通过版本检测的方法判断当前应用是否存在漏洞风险:
在web管理页面左上方可查看当前所使用的Tomcat版本

若当前版本在受影响范围内,则可能存在安全风险。

 

0x04 处置建议

1.Apache官方已发布9.0.31、8.5.51及7.0.100版本针对此漏洞进行修复,Apache Tomcat 6 已经停止维护,请升级到最新受支持的 Tomcat 版本以免遭受漏洞影响:

https://tomcat.apache.org/download-70.cgi
https://tomcat.apache.org/download-80.cgi
https://tomcat.apache.org/download-90.cgi

2.使用AJP协议的临时处置方法:为AJP Connector配置secret来设置 AJP 协议的认证凭证,且注意口令强度

3.未使用AJP协议的临时处置方法:禁用AJP协议端口,在conf/server.xml配置文件中注释,并重启Tomcat服务

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

 

0x05 关于我们

灵腾安全实验室(REDTEAM)正式成立于2020年,隶属于360政企-实网威胁感知部;主攻研究方向包括红队技术、物理攻防、安全狩猎等前瞻技术,为 360AISA全流量威胁分析系统360天相资产威胁与漏洞管理系统360虎安服务器安全管理系统360蜃景攻击欺骗防御系统 核心产品提供安全赋能。

 

0X06 Reference

https://www.cnvd.org.cn/flaw/show/CNVD-2020-10487?spm=a2c4g.11174464.0.0.48a21051t59uVP

(完)