Talos 漏洞报告总结:LibRaw deflate_dng_load_raw 整数溢出漏洞 漏洞概述 漏洞名称: LibRaw deflate_dng_load_raw integer overflow vulnerability CVE编号: CVE-2026-20894 CVSS评分: 8.1 (CVSS:3.1/AVN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) 漏洞类型: CWE-190 - Integer Overflow or Wraparound (整数溢出或回绕) 详细描述: 在 LibRaw (Commit 8dc69e2) 的 功能中存在整数溢出漏洞。该函数用于读取和解码 RAW 图像文件(特别是支持 deflate 压缩的浮点 DNG 文件)。 解码例程在计算内存限制大小时存在堆缓冲区溢出漏洞。当处理攻击者控制的 tile dimension values(瓦片尺寸值)时,计算过程使用了 32 位算术运算,尽管最终结果被分配给 64 位变量。如果 32 位乘积发生溢出,损坏的值会被提升为 64 位,导致后续内存分配过小。 当处理进程到达超出预分配分配的位置时, 操作会写入超出分配区域的内存,导致堆缓冲区溢出。这可能导致内存损坏和潜在的特权代码执行。 注意: 默认情况下(使用默认的 ),该漏洞不可利用,因为 中的预解码检查使用了正确的 64 位算术并阻止了大图像。只有当 被提升以通过预解码检查时,漏洞才会被触发。 影响范围 受影响版本: LibRaw Commit 8dc69e2 修复方案 修复逻辑: 确保在计算缓冲区大小时使用正确的 64 位算术运算,而不是 32 位算术。 防御措施: 保持默认的 限制,或者在 中实施更严格的预解码检查,确保在调用 之前正确验证图像尺寸和内存需求。 POC 代码与利用细节 漏洞函数位置: 中的 漏洞代码片段: 利用示例 (POC): 使用以下参数构造 DNG 文件: : 30000 : 30000 : 9500 : 9500 : 3 利用过程分析: 1. 溢出计算: 在代码 处进行 32 位乘法: 该值超过了 (4294967295) 并回绕为 。 2. 内存分配: 乘以 (4) 后,计算出的 约为 字节 (~141 MB)。 3. 绕过检查: 在代码 处,检查看到 ~141 MB,这通过了任何合理的内存限制检查。 4. 溢出发生**: 在代码 处,实际分配请求仅 ~141 MB。但在 处,处理循环使用原始图像尺寸(30000x30000)。当 和 超过 ~141 MB 缓冲区时, 写入超出分配区域,导致堆溢出。