Pillow库Windows组件存在OS命令注入漏洞,攻击者可通过恶意文件名执行任意命令

Pillow图像处理库曝出CVE-2026-55798 OS命令注入漏洞,仅影响Windows平台WindowsViewer组件,因未对文件路径使用shlex.quote()转义,攻击者通过构造含双引号和&的恶意文件名可执行任意cmd命令。本文分析漏洞原理、攻击链、PoC及临时缓解措施。

🔓 Medium 漏洞利用

Pillow图像处理库的Windows平台视图组件(WindowsViewer)在构建cmd.exe命令时未对文件路径进行转义,直接使用f-string拼接并传入shell=True的subprocess.Popen调用。攻击者可通过构造包含双引号和&等shell元字符的文件名,实现任意OS命令注入,而macOS和Linux版本已正确使用shlex.quote()防护。

来源:OSV | 2026-07-20 | 原文链接

🔍 关键发现

  • CVE-2026-55798影响Pillow库WindowsViewer类的get_command()方法,该函数将文件路径直接嵌入f-string并传递给shell=True的subprocess.Popen,未进行任何转义
  • macOS的MacViewer和Linux的UnixViewer均正确使用了shlex.quote()对文件名进行转义,唯独Windows平台缺失该防护,尽管shlex.quote已在ImageShow.py第21行被导入
  • 攻击者利用双引号闭合外壳字符串,后接&符号即可注入任意cmd.exe命令,PoC验证可在Windows 11 + Pillow 12.1.1环境下成功创建标记文件

⚔️ 攻击链分析

1. 攻击者构造恶意文件名,其中包含双引号、&等shell元字符(例如:evil" & echo PWNED & echo ") 2. 受害程序调用WindowsViewer.get_command(),将恶意文件名未经转义嵌入命令字符串(start "Pillow" /WAIT "<恶意路径>" && ping...) 3. 该命令字符串通过subprocess.Popen(..., shell=True)执行,导致注入的cmd命令(如echo PWNED)被解析执行 4. 攻击者可进一步利用注入执行任意系统命令(如创建文件、执行payload)

🚩 失陷指标 (IOC)

  • 恶意文件路径中包含双引号和&等特殊字符,如:C:\Temp\evil" && echo "
  • 进程树中出现异常的cmd.exe子进程,命令中包含start "Pillow" /WAIT后紧跟未预期的&连接命令

🛡️ 缓解建议

  • ✅ 升级Pillow到已修复版本(关注官方补丁,目前CVE-2026-55798尚未公开修复版本,建议监控OSV/PyPI公告)
  • ✅ 在Windows环境下避免使用WindowsViewer显示用户可控路径的文件,或自行在调用前对路径使用shlex.quote()进行转义
  • ✅ 若无法立即升级,可临时禁用对不受信文件路径的WindowsViewer调用,或改用Linux子系统的解决方案

涉及漏洞:["CVE-2026-55798"]


⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。

🤖 常见问题解答(FAQ)

❓ 该漏洞影响哪些Pillow版本?

影响所有未修复的Pillow版本(包括12.1.1及更早),仅Windows平台下的WindowsViewer受影响,macOS和Linux安全。

❓ 攻击者利用此漏洞需要什么条件?

需要攻击者能够控制传入WindowsViewer.show_file()的文件路径,如通过用户上传文件名或文件系统操作,且最终程序以shell=True执行该命令。

❓ 如何临时检测是否被利用?

监控Windows事件日志中cmd.exe启动参数,查找包含'show'、'Pillow'等关键词且后接&、|等连接符的异常进程,或检查临时目录中是否存在非预期的标记文件。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)