7-Zip 是一款高压缩比的文件归档工具。26.00 及更早版本存在一个由 NTFS 压缩流缓冲区分配不足(GetCuSize 移位未定义行为)导致的堆缓冲区溢出漏洞,可能允许攻击者执行任意代码或导致应用程序崩溃。
NTFS 处理器中的 CInStream::GetCuSize() 将压缩单元缓冲区大小计算为 (UInt32)1 << (BlockSizeLog + CompressionUnit),而一个精心构造的镜像若 ClusterSizeLog >= 28 且 CompressionUnit == 4,则会使得指数变为 32,这属于未定义行为,在 x86/x64 上会崩溃,导致 _inBuf 被分配为 1 字节。随后 ReadStream_FALSE 会以 64 KB 的迭代次数将高达 256 MB 的攻击者控制数据写入该 1 字节缓冲区,由于 CInStream 对象仅位于 _inBuf 之后 304 字节处,其虚函数表指针被覆盖,下一次分派调用将触发虚函数表劫持。在 32 位构建中,溢出无条件触发;在 64 位构建中,需要并行分配 8 GB 的 _outBuf 成功,否则会导致拒绝服务式关闭。
NTFS 处理器在标准 7z.dll 中默认启用,并通过基于签名的回退匹配(在偏移 3 处匹配 "NTFS ")使得无论文件扩展名如何,解压或测试时都会打开精心构造的镜像。26.01 版本已修复该问题。
仅可在安全且授权的环境中使用本项目,例如:
示例设置:
git clone <仓库地址>
cd <仓库名称>
示例用法:
# 安装依赖
# 运行项目
python cve-2026-48095.py
# 指定输出文件名
python cve-2026-48095.py poc_ntfs_sparse.zip
一个用于在受控环境中学习、测试和研究网络安全概念的仓库。
本仓库仅用于教育和授权的安全研究。
旨在帮助用户了解:
仅可在您拥有权限的环境中使用本仓库,例如:
严禁未经授权或非法使用。
作者及贡献者不对因本项目造成的任何损害、滥用、法律问题或损失负责。
使用本仓库即表示您同意:
本项目旨在用于:
请遵循负责任的披露实践,并遵守所有适用法律。
如需负责披露或合作,请通过 GitHub 联系仓库维护者。