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

CVE-2025-12084 Python xml.dom.minidom 二次方复杂度DoS漏洞

披露日期: 2025-12-03

漏洞信息

漏洞编号
CVE-2025-12084
漏洞类型
拒绝服务 (DoS)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Python xml.dom.minidom

相关标签

拒绝服务DoSPythonxml.dom.minidom二次方复杂度性能漏洞标准库漏洞

漏洞概述

CVE-2025-12084是Python标准库xml.dom.minidom中的一个拒绝服务漏洞。该漏洞存在于使用appendChild()等方法构建嵌套元素时,由于算法对_clear_id_cache()方法的依赖,导致时间复杂度达到O(n²)。攻击者可以通过构建过度嵌套的XML文档来触发此漏洞,当文档嵌套层级过深时,会导致CPU资源被大量消耗,从而影响系统的可用性。此漏洞无需认证即可利用,攻击向量为网络,CVSS评分为5.3,属于中等严重程度。xml.dom.minidom作为Python最常用的XML处理模块之一,被广泛应用于各种Python项目中,因此该漏洞的影响范围较广。建议受影响的用户及时更新Python版本或采取临时缓解措施。

技术细节

该漏洞的根本原因在于xml.dom.minidom模块中_clear_id_cache()方法的实现方式。当使用appendChild()等方法向Document对象添加子节点时,代码会调用_clear_id_cache()来清除ID缓存。然而,这个缓存清除操作的时间复杂度为O(n),其中n为已添加的节点数量。由于每次添加节点时都会触发此操作,在添加n个节点时总时间复杂度达到O(n²)。具体来说,当构建深度为k的嵌套文档时,每个节点的添加操作都需要遍历并清除之前所有节点相关的缓存,导致性能呈二次方下降。攻击者可以通过构造一个具有大量嵌套层级的XML文档(如1000层以上的嵌套元素)来触发此漏洞。在实际测试中,深度为10000层的嵌套文档会导致明显的处理延迟和CPU占用率飙升。此漏洞影响所有使用xml.dom.minidom处理不可信XML数据的应用程序。

攻击链分析

STEP 1
步骤1
攻击者识别使用xml.dom.minidom处理XML数据的Python应用程序
STEP 2
步骤2
攻击者构造包含大量嵌套层级的恶意XML文档(通常超过1000层)
STEP 3
步骤3
应用程序使用minidom的appendChild()方法处理该XML文档
STEP 4
步骤4
每次appendChild()调用触发_clear_id_cache(),由于O(n²)复杂度,处理时间急剧增加
STEP 5
步骤5
CPU资源被大量消耗,导致应用程序响应缓慢或完全无响应,实现拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-12084 PoC - xml.dom.minidom quadratic complexity DoS This PoC demonstrates the quadratic time complexity issue in xml.dom.minidom when building deeply nested elements. """ import time from xml.dom.minidom import Document def create_nested_document(depth): """ Create a deeply nested XML document using minidom This triggers the quadratic complexity in _clear_id_cache() """ doc = Document() root = doc.createElement('root') doc.appendChild(root) current = root for i in range(depth): child = doc.createElement(f'level_{i}') current.appendChild(child) current = child return doc def test_performance(): """ Test performance with different nesting depths Compare time taken for different depths to show O(n²) complexity """ depths = [100, 200, 400, 800, 1000] print("Testing xml.dom.minidom nested element building performance:") print("-" * 60) for depth in depths: start_time = time.time() doc = create_nested_document(depth) elapsed = time.time() - start_time print(f"Depth {depth:4d}: {elapsed:.4f} seconds") print("-" * 60) print("Notice: Time increases quadratically with depth (O(n²))") print("This demonstrates the vulnerability CVE-2025-12084") if __name__ == '__main__': test_performance()

影响范围

Python xml.dom.minidom < 3.9.19 (未确认修复版本)
Python 3.x 所有版本可能受影响

防御指南

临时缓解措施
如果无法立即升级Python版本,可以采取以下临时缓解措施:1) 对所有XML输入实施严格的深度限制,建议不超过100层;2) 设置XML解析超时机制;3) 使用lxml库替代minidom;4) 在应用程序层实施资源限制,防止单个请求消耗过多CPU资源;5) 对XML文档大小进行限制,建议不超过1MB。

参考链接

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