IPBUF安全漏洞报告
English
CVE-2026-32711 CVSS 7.8 高危

CVE-2026-32711 pydicom路径遍历漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-32711
漏洞类型
路径遍历
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
pydicom

相关标签

路径遍历pydicomCVE-2026-32711任意文件读写Python库漏洞

漏洞概述

pydicom是一个用于处理DICOM文件的纯Python包。在2.0.0-rc.1至3.0.1版本中,存在路径遍历漏洞。攻击者可通过恶意构造DICOMDIR文件中的ReferencedFileID字段,将其设置为文件集根目录之外的路径。由于pydicom仅检查路径是否存在而未验证其合法性,导致后续的文件操作(如复制、写入、删除)可对任意文件进行操作,从而造成敏感信息泄露或数据破坏。

技术细节

该漏洞的根源在于pydicom处理DICOMDIR文件中ReferencedFileID字段时的校验逻辑缺陷。当程序解析该字段时,虽然会解析路径并确认目标文件是否存在,但并未严格校验解析后的绝对路径是否仍位于预期的File-set root目录下。攻击者可以利用“../”序列在ReferencedFileID中进行目录穿越。当应用程序后续调用FileSet类的公共方法(如copy()、write()或remove()与write()的组合)时,会直接使用此前未被拦截的路径进行底层文件I/O。这使得攻击者能够诱导应用程序读取、复制或移除受影响系统上的任意文件,绕过了目录访问限制。

攻击链分析

STEP 1
1. 制作恶意文件
攻击者创建一个特制的DICOMDIR文件,将ReferencedFileID字段设置为包含路径遍历序列(如“../../”)的值,指向文件集根目录外的敏感文件。
STEP 2
2. 诱导受害者
攻击者将恶意DICOMDIR文件发送给受害者,或诱导受害者使用集成pydicom的应用程序打开该文件。
STEP 3
3. 路径解析与绕过
受害者的应用程序加载文件,pydicom解析ReferencedFileID。由于存在漏洞,程序仅检查路径是否存在,未拦截路径遍历行为。
STEP 4
4. 执行未授权操作
当应用程序执行文件操作(如备份、写入或删除)时,利用解析出的恶意路径进行I/O,导致读取、复制或删除系统上的任意文件。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import os # Proof of Concept for CVE-2026-32711 # Demonstrating the lack of path traversal validation def simulate_vulnerable_logic(file_set_root, referenced_file_id): """ Simulates the vulnerable logic in pydicom < 3.0.2. It resolves the path but fails to check if it stays within the root. """ # Resolve the absolute path based on the root and the provided ID # This mimics the vulnerable behavior where '../' is allowed resolved_path = os.path.abspath(os.path.join(file_set_root, referenced_file_id)) print(f"[*] File-set Root: {os.path.abspath(file_set_root)}") print(f"[*] ReferencedFileID: {referenced_file_id}") print(f"[*] Resolved Path: {resolved_path}") # Vulnerable check: only checks existence, not location relative to root if os.path.exists(resolved_path): print(f"[+] Path exists! Vulnerable operation (read/write) would proceed on: {resolved_path}") # Check if path escaped the root (The missing check) if not os.path.abspath(resolved_path).startswith(os.path.abspath(file_set_root)): print("[!!!] PATH TRAVERSAL DETECTED: Path is outside File-set root!") return resolved_path else: print("[-] Path does not exist.") return None if __name__ == "__main__": # Setup a fake root root_dir = "/tmp/dicom_files" # Malicious payload trying to escape the root malicious_payload = "../../../../../../etc/passwd" print("--- CVE-2026-32711 PoC Simulation ---") simulate_vulnerable_logic(root_dir, malicious_payload)

影响范围

pydicom 2.0.0-rc.1
pydicom 2.0.0
pydicom 3.0.0
pydicom 3.0.1

防御指南

临时缓解措施
建议用户尽快将pydicom库升级到修复版本3.0.2。如果无法立即升级,应避免处理来源不明的DICOMDIR文件,或在受限的环境中(如容器或低权限用户)运行相关应用程序,以限制潜在文件操作的影响范围。

参考链接

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