漏洞介绍:
Apache Tomcat是美国阿帕奇(Apache)基金会一款广泛使用的轻量级 Web应用服务器,主要用于实现对Servlet和JavaServer Page(JSP)的支持。此次漏洞的产生源于Apache Tomcat反序列化机制未对用户输入进行严格验证,导致攻击者能够通过构造恶意序列化对象绕过安全限制,进而实现远程恶意代码的执行,最终获取服务器的控制权。
漏洞危害:
攻击者可执行任意代码,实现对服务器的完全控制。这将导致服务器上的数据面临被窃取、篡改或删除的风险,严重影响业务的正常运行,甚至可能导致企业敏感信息泄露,造成不可估量的损失。
攻击者可通过构造恶意HTTP请求(如利用PUT方法上传恶意文件)触发漏洞,在目标服务器上执行任意代码,从而完全控制服务器。例如,利用反序列化漏洞链(如Commons-Collections库)和Tomcat的文件会话持久化机制,攻击者能够上传恶意序列化对象并触发反序列化操作,最终实现命令执行(如弹出计算器或下载后门程序)。
漏洞概述

漏洞等级:高危
受影响Apache Tomcat版本:
Tomcat 9:从 9.0.0-M1 至 9.0.98(包括所有中间版本)
Tomcat 10:从 10.1.0-M1 至 10.1.34(包括所有中间版本)
Tomcat 11:从 11.0.0-M1 至 11.0.2(包括所有中间版本)
漏洞类型:
远程代码执行
漏洞成因:
1、Content-Range在Tomcat的HTTP PUT请求中主要用于实现大文件的分块传输;
2、在文件上传未完成的情况下,内容会被临时存储在Tomcat的工作目录,如work\Catalina\localhost\ROOT;
3、该漏洞的核心在于不完整PUT请求上传的文件名处理机制:文件路径中的分隔符/会被转换为.。例如:访问/xxxx/session会被解析为.xxxx.session。
漏洞利用条件:
1、启用Servlet写入功能:
应用程序启用了DefaultServlet写入功能,而该功能在默认情况下是关闭的;
2、支持partial PUT请求:
应用支持partial PUT请求,此功能默认开启,攻击者可通过该请求将恶意的序列化数据写入到会话文件中;
3、使用Tomcat的文件会话持久化:
应用使用了Tomcat的文件会话持久化机制,并且使用了默认的会话存储位置;
4、包含存在反序列化漏洞的库:
应用中包含一个存在反序列化漏洞的库,如类路径下的commons-collections等,此条件取决于业务实现是否依赖存在反序列化利用链的库。
漏洞复现:
以windows环境,执行调用计算器目标验证为例:
1、 客户端生成payload:


2、 客户端发包,注:Content-Length数值要大于等于实际数值:

3、 复现效果:服务端会生成session文件,弹出计算器:

漏洞验证:

漏洞验证能力已经接入和中灵鹫峰平台。
修复建议:
1、禁止partial PUT:在conf/web.xml中修改allowPartialPut参数为false,并重启Tomcat以使配置生效;
2、严格控制Default Servlet写入权限:确保readOnly=true,禁用所有未经授权的PUT/DELETE请求,仅允许可信来源访问受限目录;
3、检查应用程序依赖库;
4、升级至最新版本:https://github.com/apache/tomcat/releases/tag/10.1.39。