Tomcat出现漏洞了,阿粉问你,线上版本更换了么?

简介: hello~各位读者好,我是鸭血粉丝(大家可以称呼我为「阿粉」),在这个特殊的日子里,大家要注意安全,尽量不要出门,无聊的话,就像阿粉一样,把时间愉快的花在学习上吧。

1.Tomcat漏洞介绍

使用 Apache Tomcat 软件了 Java Servlet,JavaServer 页,Java 表达式语言和 Java 的 WebSocket 技术的一个开源实现。Java Servlet,JavaServer Pages,Java Expression Language和Java WebSocket规范是在Java Community Process下开发的 。

阿粉相信大家现在用什么版本的多有,从7.0到目前最新的10.0的用什么版本的都有,但是现在,Tomcat出现了重大的漏洞。而此次的漏洞涉及到的版本也是挺多的。

影响的版本有:

  • 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

也就是说此次受影响的版本包括:Tomcat 6,Tomcat 7的7.0.100以下版本,Tomcat 8的8.5.51以下版本,Tomcat 9的9.0.31以下版本。而阿粉线上的版本确实8.5.24,也在漏洞范围之内。

2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938)。攻击者利用该漏洞,可在未授权的情况下远程读取特定目录下的任意文件。而 CNVD 也将此次漏洞定义为高危漏洞。

2.漏洞情况分析

从 CNVD 接收到长亭公司报送的Apache Tomcat文件包含漏洞开始,就开始了一轮的检测,经检测,Tomcat AJP协议由于存在实现缺陷导致相关参数可控,不得不说,这次漏洞攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若服务器端同时存在文件上传功能,攻击者可进一步实现远程代码的执行。

webapp 文件夹,相信大家是非常的熟悉,很多线上项目都是直接自己本身的项目 War 包发布到 webapps 目录下,这样也就导致了大家的源码,如果有黑客把这个作为漏洞进行攻击的话,那么一定会获取到你们的项目源码,再通过一定的手段进行反编译,那么项目的内容将没有任何秘密可言了,想想多么可怕。

2.jpg

而他是通过什么来获取的,据悉,该漏洞被追踪为CVE-2020-1938,位于Apache Tomcat软件的AJP协议中,允许未经身份验证的黑客远程访问服务器上部署的应用程序和源代码文件。

既然漏洞是位于 AJP 协议中,那么我们首先得了解一下什么是 AJP 协议。

AJP协议

AJP(Apache JServ Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过 TCP连接 和 SERVLET容器连接。这是百度百科,也就是官方的解释,那么在 Tomcat 中 AJP 协议又是在哪些地方上呢?

阿粉相信大家都改过 Tomcat 的端口号吧,比如8080 改成 8088,然后8009改成 8099 这种的,但是大家有没有仔细的去看 server.xml 文件里面的注释呢?

3.jpg

上面的这幅图,很明显这是基于 HTTP 1.1 的 Connector 而这个 Connector 简单来说就是一个连接器,有了这个,Tomcat 才能成为一个 web 服务器,但还额外可处理Servlet和jsp。

那么在看下面这幅图,注意看注释呦!4.jpg

Define an AJP 1.3 Connector on port 8009 这一句话直译的意思就是在端口8009上定义AJP 1.3连接器,也就是说这端口是基于 AJP 协议的,但是很多人都知道 HTTP 协议,是因为 8080 端口的存在,而基于 AJP 协议的 AJP1.3 的 Connector ,它使用的是 AJP 协议,使用二进制格式来传输可读性文本的协议。

如果大家真的对 AJP 协议真的感兴趣的话,那么大家可以去 Tomcat 的官网上去看一下 【https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html】,这个官方文档里面写明了 AJP 协议的设计目标,概述,还有关于一些请求的内容等等。

3.有了漏洞我们应该怎么处理呢?

  1. 一个最简单的办法,更换 Tomcat 的版本,也就是说你没有使用 AJP 协议的 Tomcat 的话,可以直接将 Tomcat 升级到 9.0.31、8.5.51或 7.0.100 版本进行漏洞修复。

如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost。

具体操作:

  • 编辑 tomcat目录下的/conf/server.xml,找到如下行:
  • <Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />

直接把这一行注释掉就OK了,保存后需重新启动,规则方可生效。

  1. 如果使用了Tomcat AJP协议:建议将Tomcat立即升级到9.0.31、8.5.51或7.0.100版本进行修复,同时为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"/>

如无法立即进行版本更新、或者是更老版本的用户,建议为 AJP Connector 配置 requiredSecret 来设置AJP协议认证凭证。

文章参考

https://www.cnvd.org.cn/webinfo/show/5415 CNVD(国家信息安全漏洞共享平台)

相关文章
|
4月前
|
安全 Java 应用服务中间件
Tomcat弱口令+后端getshell漏洞
Tomcat弱口令+后端getshell漏洞
97 6
|
4月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
3月前
|
安全 Java 应用服务中间件
Windows版本的Tomcat无法启动,如何处理?
Windows版本的Tomcat无法启动,如何处理?
209 14
|
安全 应用服务中间件 Apache
Apache-Tomcat-Ajp文件读取漏洞(CVE-2020-1938、CNVD-2020-10487)
Apache-Tomcat-Ajp文件读取漏洞产生原因是由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件
780 1
|
XML Java 关系型数据库
15Solr整合tomcat(超详细版本)
15Solr整合tomcat(超详细版本)
47 0
|
7月前
|
应用服务中间件 Shell
tomcat版本自动升级脚本
请注意,这只是一个简单的示例脚本,用于演示自动升级Tomcat版本的思路。实际部署中,您可能需要根据您的环境和需求对脚本进行更详细的定制和错误处理。确保在升级Tomcat版本之前备份重要数据和配置文件,以防止意外情况发生。
79 0
|
7月前
|
jenkins Java 应用服务中间件
Jenkins【部署 01】两种方式+两种环境部署最新版本 Jenkins v2.303.2 WAR包(直接使用 java -jar+使用Tomcat的Web端部署)
Jenkins【部署 01】两种方式+两种环境部署最新版本 Jenkins v2.303.2 WAR包(直接使用 java -jar+使用Tomcat的Web端部署)
144 0
|
7月前
|
应用服务中间件 数据安全/隐私保护
Tomcat【部署 02】Web端403 Access Denied You are not authorized to view this page解决方法(Tomcat 10.2.12 版本)
Tomcat【部署 02】Web端403 Access Denied You are not authorized to view this page解决方法(Tomcat 10.2.12 版本)
696 0
|
7月前
|
Java 应用服务中间件 Spring
Tomcat【部署 01】安装包版本说明+安装+参数配置+启动(JDK11+最新版apache-tomcat-10.0.12)
Tomcat【部署 01】安装包版本说明+安装+参数配置+启动(JDK11+最新版apache-tomcat-10.0.12)
148 0
|
前端开发 关系型数据库 MySQL
J2EE项目部署与发布(Linux版本)->jdk&tomcat安装,MySQL安装,后端接口部署,linux单体项目前端部署
J2EE项目部署与发布(Linux版本)->jdk&tomcat安装,MySQL安装,后端接口部署,linux单体项目前端部署
92 0