IPBUF安全漏洞报告
English
CVE-2025-14607 CVSS 6.3 中危

DCMTK dcmdata组件DcmByteString::makeDicomByteString内存损坏漏洞(CVE-2025-14607)

披露日期: 2025-12-13

漏洞信息

漏洞编号
CVE-2025-14607
漏洞类型
内存损坏
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OFFIS DCMTK

相关标签

内存损坏DCMTKdcmdata医学影像DICOM缓冲区溢出CVE-2025-14607OFFIS医疗设备安全

漏洞概述

DCMTK(DICOM Toolkit)是一款开源的医学数字影像通信(DICOM)标准实现库,广泛应用于医疗设备、PACS系统和医学影像处理软件中。该漏洞存在于DCMTK的dcmdata组件中,具体位于dcbytstr.cc文件的DcmByteString::makeDicomByteString函数。由于对字节字符串的处理不当,攻击者可以通过构造恶意的DICOM数据触发内存损坏问题。成功利用此漏洞可能导致应用程序崩溃、信息泄露或在特定条件下执行任意代码。攻击可远程发起,需要低权限认证但无需用户交互。漏洞影响DCMTK 3.6.9及之前版本,官方已在3.7.0版本中修复此安全问题。

技术细节

该漏洞属于内存损坏类安全问题,发生在DcmByteString::makeDicomByteString函数处理字节字符串的过程中。漏洞根源在于dcmdata/libsrc/dcbytstr.cc文件中对字符串长度的验证不足或内存分配逻辑存在缺陷。攻击者可以通过制作包含特殊构造数据的DICOM文件或网络数据包,在解析过程中触发缓冲区溢出或释放后使用等内存破坏条件。由于DCMTK常作为服务端组件处理外部输入,攻击者可以在无需身份验证或低权限情况下发送恶意数据。CVSS 3.1向量显示攻击复杂度低(AC:L),对机密性、完整性和可用性均造成低影响(C:L/I:L/A:L)。

攻击链分析

STEP 1
步骤1
攻击者获取或构造包含恶意数据的DICOM文件,该文件包含特制的字节字符串字段
STEP 2
步骤2
攻击者通过医疗影像传输协议或文件上传等方式将恶意DICOM数据发送到目标系统
STEP 3
步骤3
目标系统的DCMTK库在解析DICOM数据时调用dcmdata组件的DcmByteString::makeDicomByteString函数
STEP 4
步骤4
由于函数对字符串长度验证不足,特殊构造的数据导致内存缓冲区溢出或损坏
STEP 5
步骤5
成功利用后可能导致应用程序崩溃(拒绝服务)、敏感内存信息泄露或代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-14607 PoC - DCMTK dcmdata memory corruption // Target: DcmByteString::makeDicomByteString in dcbytstr.cc // Affected: DCMTK <= 3.6.9 #include <dcmtk/dcmdata/dctk.h> #include <fstream> int main(int argc, char* argv[]) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " <malicious_dcm_file>" << std::endl; return 1; } const char* filename = argv[1]; DcmFileFormat dcmff; OFCondition status = dcmff.loadFile(filename); if (status.bad()) { std::cerr << "Error loading file: " << status.text() << std::endl; return 1; } DcmDataset* dataset = dcmff.getDataset(); if (dataset) { // Trigger parsing of byte string elements // This may trigger the vulnerability in makeDicomByteString const char* patientName = nullptr; OFCondition cond = dataset->findAndGetString(DCM_PatientName, patientName); if (cond.good()) { std::cout << "Patient Name: " << patientName << std::endl; } } return 0; } // Note: Actual PoC requires crafting a DICOM file with specially // constructed byte string values that trigger memory corruption // in DcmByteString::makeDicomByteString function

影响范围

DCMTK < 3.7.0
DCMTK 3.6.9及之前版本

防御指南

临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:1)限制外部DICOM数据源的接入,对所有输入数据进行严格的格式验证;2)对DCMTK组件运行在沙箱环境中,限制其系统资源访问权限;3)启用ASLR和DEP等系统级安全防护机制;4)监控相关进程内存异常情况,及时发现潜在的漏洞利用行为。建议在条件允许时尽快完成版本升级。

参考链接

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