sixel_encoder_encode_bytes() 中的释放后使用漏洞 (Use-after-free) 漏洞概述 当调用者向 传递一个堆分配的像素缓冲区时,libsixel 会在调整大小操作期间释放该缓冲区。随后调用者继续使用原始缓冲区,构成了释放后使用 (Use-after-free) 漏洞。 根本原因: 在 中,调用者拥有的指针被直接存储在 中,且没有进行防御性拷贝。随后在 中,该指针被无条件释放,即使该内存不属于 libsixel。 影响范围 受影响版本: <= 1.8.7 受影响函数: 触发条件: 调用者在堆上分配 1x1 像素缓冲区。 像素格式为 。 编码器选项 设置为 2(强制调整大小路径)。 调用 成功并返回 。 调用者在调用后读取缓冲区。 CVSS 评分: 7.3 / 10 (High) 修复方案 已修复版本: None (页面显示尚未发布修复版本) POC 代码 构建命令 (使用 ASAN): ASAN 堆栈跟踪: 影响 (Impact) 任何调用 并在调用后读取或写入像素缓冲区的应用程序都会受到影响。攻击者可以控制传入的帧,以可预测的方式反复触发此漏洞,这是堆利用的理想条件。然而,在没有额外堆原语的情况下,任意代码执行的利用性可能并不明显。