漏洞关键信息 问题描述 - 在对 进行模糊测试时,发现 文件中的 函数存在堆缓冲区溢出(Heap Buffer Overflow)漏洞。 - 通过调用 解析特定的恶意构造的 Base64 字符串时,由于算法逻辑存在缺陷,导致计算出的 异常,进而触发越界写入。 漏洞分析 - 漏洞位于 的 函数末尾(约第 395-396 行)。 - 计算逻辑缺陷:在解码循环中, 变量不仅统计了正常的 Padding 字符(=),还统计了无效字符,导致偏移量计算出现偏差。 - 越界写入:当输入包含大量无效字符与特定 Padding 组合时, 计算异常,导致 计算结果错误,可能负数或指向缓冲区之外,从而引发堆缓冲区越界写入。 复现步骤 - 提供了 Linux 环境、Clang 编译器(包含 AddressSanitizer)、目标 。 - 提供了 PoC 代码 以及编译运行命令、崩溃文件链接和运行示例。 崩溃日志 - 使用 AddressSanitizer(ASAN)捕获到的堆溢出信息,显示在 行发生了越界写入。 修复建议 - 建议在 函数末尾写入结束符之前,对 进行合法性校验,确保不超出目标缓冲区范围。 - 增加 padding 超过 2 个的检测代码,防止 计算异常导致的堆溢出。