Pillow库高危堆越界写入漏洞:整数溢出导致可控堆向后写入
Pillow库CVE-2026-59199漏洞分析:Image.paste、crop、alpha_composite API因整数溢出导致堆越界写入(RGBA模式下最大2GiB)。攻击者无需文件即可利用,影响Python图像处理安全。提供复现PoC、缓解措施及修复建议。
🔓 High 漏洞利用
Pillow(Python图像处理库)的Image.paste()、Image.crop()和Image.alpha_composite() API在处理接近32位有符号整数极限的坐标时,因整数溢出导致堆越界写入。攻击者无需文件或私密API,仅通过构造特殊坐标即可触发可控的向后堆写入,在RGBA模式下最大可写约2GiB,可能导致内存破坏和拒绝服务。
来源:OSV | 2026-07-20 | 原文链接
🔍 关键发现
- 三个公共API(paste、crop、alpha_composite)存在相同的整数溢出漏洞,可导致堆越界写入。
- 攻击者通过使坐标减法溢出(如dx1-dx0)绕过边界检查,实现写入到目标行指针之前的位置。
- 写入偏移和长度均由攻击者控制的源图像宽度决定(4*width),最大可导致约2GiB的向后堆写入。
⚔️ 攻击链分析
攻击者构造恶意坐标(如((1<<31)-width, 0, INT_MIN, 1))→调用受影响的API(paste/crop/alpha_composite)→整数溢出绕过边界检查→在目标行指针之前写入攻击者控制的像素数据→堆内存损坏,可能导致崩溃或代码执行。
🚩 失陷指标 (IOC)
受影响的Pillow版本:<=12.2.0(以及未修复的12.3.0.dev0)
🛡️ 缓解建议
- ✅ 升级Pillow到包含修复的版本(官方已发布补丁,参见GHSA-6r8x-57c9-28j4)。
- ✅ 在调用坐标相关API前,对用户输入的坐标进行严格的数值范围验证,确保不会导致整数溢出。
- ✅ 使用安全编程实践,在C扩展中使用int64_t进行中间计算并检查溢出。
涉及漏洞:["CVE-2026-59199"]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 漏洞影响哪些Pillow API?
主要影响Image.paste()、Image.crop()和Image.alpha_composite()。这些API在处理用户提供的坐标时,因整数溢出导致堆越界写入。
❓ 如何复现该漏洞?
构造源图像为RGBA模式,坐标box = ((1<<31)-width, 0, -(1<<31), 1),调用dst.paste(src, box)即可触发。可通过ASAN构建观察堆缓冲区溢出。
❓ 漏洞的根本原因是什么?
C扩展中使用signed int进行坐标差值计算,导致减法溢出(如dx1-dx0等于2),绕过后续的边界检查,最终在memcpy时写入偏移为负值的堆区域。