漏洞关键信息 漏洞摘要 类型: 堆缓冲区溢出 函数: 原因: 整数截断导致读取长度错误 漏洞描述 在分配 时使用 ,但 函数只接受 32 位的 。当 时,分配的长度被截断,而后续的读取循环仍然会写入完整的 64 位长度边界,导致堆缓冲区溢出。 漏洞复现步骤 1. 构建和安装 libvips: - 使用 ASAN/UBSAN 编译和安装 libvips。 - 导出相应环境变量。 2. 编写 PoC 代码: - 包括相关头文件。 - 定义 结构体。 - 实现 和 回调函数。 - 主函数初始化 VIPS,并设置索引和读取的源。 3. 编译和运行 PoC: - 使用特定的编译选项进行编译和运行。 预期行为 超大小的来源应该被拒绝或安全处理,而不会导致内存损坏。 实际行为 ASAN 报告了堆缓冲区溢出,发生在 函数中。 环境 操作系统: Ubuntu 22.04 (x86_64) Linux 内核: 6.8.0-90-generic Vips 版本: 8.19.0 (包含 ASAN/UBSAN 编译选项) 补丁信息 修复提交: Already patched with commit message "source: guard against length truncation"。 影响范围: 仅影响大于 4 GiB 的自定义可寻源。