7-Zip 高危漏洞被公开:扩展名无关的 RCE 攻击链

7-Zip 高危漏洞被公开:扩展名无关的 RCE 攻击链

CVE-2026-48095(CVSS 8.8)已被公开确认。攻击者只需诱导用户打开一个精心构造的压缩文件,即可执行任意代码或导致应用程序崩溃。

漏洞详情

  • CVE 编号:CVE-2026-48095 / GHSL-2026-140
  • 受影响版本:7-Zip 26.00 及所有早期版本
  • 修复版本:7-Zip 26.01(2026-04-27 发布)
  • 发现者:Jaroslav Lobachevski(@JarLob),GitHub Security Lab
  • 公开时间:2026-05-22

漏洞根因在 NTFS 归档处理器的 CInStream::GetCuSize() 函数。该函数计算 NTFS 压缩单元缓冲区大小时,使用了表达式 (UInt32)1 << (BlockSizeLog + CompressionUnit)。当攻击者构造的 NTFS 镜像设置 ClusterSizeLog >= 28CompressionUnit == 4 时,位移运算的指数达到 32,触发 C++ 未定义行为(UB)。

在 x86 硬件上,这种 UB 导致 _inBuf 仅分配 1 字节。随后 ReadStream_FALSE 调用将最多 256 MB 的攻击者控制数据写入这个 1 字节缓冲区,造成堆溢出。由于 CInStream 对象在堆上距 _inBuf 仅 304 字节,第一次读取的 64 KB 迭代在 304 字节处即覆盖了对象的 vtable 指针。第二次读取通过被劫持的 vtable 分发执行,形成经典的 vtable 劫持攻击路径。

关键危险因素

扩展名无关的攻击面是此漏洞最危险的特点之一。7-Zip 使用签名回退机制:当扩展名匹配的处理程序(如 .7z、.zip 处理器)解析失败后,会自动尝试其他处理程序。NTFS 处理器匹配字节偏移 3 处的 "NTFS " 签名。这意味着任何扩展名(包括 .7z、.zip、.rar 或无扩展名)的文件,只要包含精心构造的 NTFS 签名,就能触发漏洞处理程序。

内存条件影响结果:在 64 位系统上,如果内存充足(16 GB 或更多),_outBuf.Alloc(8 GB) 调用成功,攻击链直接进入溢出,最终可实现任意代码执行。在低内存系统上,分配失败会将影响限制为拒绝服务(DoS)。

PoC 已公开

GitHub Security Lab 已公开发布 gen_ntfs_sparse.py 脚本,可生成触发漏洞的 512 MB 稀疏 NTFS 镜像。这大大降低了攻击门槛,任何具备基础技术的攻击者都能利用此漏洞。

修复方案

立即升级到 7-Zip 26.01:

  • 下载地址:https://www.7-zip.org/
  • 查看当前版本:7-Zip - 帮助 - 关于
  • 版本不是 26.01 的用户均受影响

时间线:4/24 私密报告,4/27 修复发布,5/22 公开披露。修复到公开的窗口期不足一个月,建议尽快升级。

来源:GitHub Security Lab / Socprime / Cybersecuritynews

相关推荐