CVE-2026-23951CVE-2026-23951是SumatraPDF多格式阅读器中的一个安全漏洞。SumatraPDF是Windows平台下流行的PDF、EPUB、Mobi等多种文档格式的阅读器。该漏洞存在于PalmDbReader::GetRecord函数的验证代码中,是一个off-by-one错误(差一错误),专门在处理恰好包含2条记录的Mobi文件时触发。攻击者可以构造一个恶意Mobi文件,当用户使用SumatraPDF打开该文件时,验证逻辑中的边界检查存在缺陷,导致整数下溢,进而引发堆越界读取(out-of-bounds heap read)。这不仅会造成应用程序崩溃,还可能被攻击者利用来读取敏感内存数据。在漏洞披露时,官方尚未发布修复补丁,所有SumatraPDF版本均受影响。
该漏洞的核心问题在于PalmDbReader::GetRecord函数中的记录数量验证逻辑存在off-by-one错误。具体来说,当处理Mobi文件格式时,代码对记录数量的验证检查边界条件设置不当,当记录数量恰好等于2时,验证逻辑触发错误路径,导致后续的大小计算发生整数下溢(integer underflow)。在正常的内存分配和访问逻辑中,记录大小应该是正数,但由于整数下溢,计算出的「大小」变成了一个极大的负数或极小的异常值。当程序尝试根据这个异常大小进行堆内存读取时,就会发生越界读取(out-of-bounds read),访问本不属于该记录区域的堆内存。这种越界读取可能导致:1)读取到其他堆对象的敏感数据;2)访问未映射内存区域导致程序崩溃;3)在特定条件下可能泄露关键内存信息。攻击者只需构造一个特殊的Mobi文件并诱骗用户打开即可触发此漏洞。