Pillow 零尺寸图像经 rank filter 触发 ImagingExpand 空指针解引用崩溃
Pillow 的 ImagingExpand 在 src/libImaging/Filter.c 中复制边缘像素时未检查输入是否为空,对宽度或高度为 0 的图像应用 MedianFilter、MinFilter、MaxFilter 或 RankFilter 会让整个 Python 进程收到 SIGSEGV。
Pillow 的 ImagingExpand 在 src/libImaging/Filter.c 中复制边缘像素时未检查输入是否为空,对宽度或高度为 0 的图像应用 MedianFilter、MinFilter、MaxFilter 或 RankFilter 会让整个 Python 进程收到 SIGSEGV。
Pillow 12.3.0 及上游 main 分支(ad277e2761b489681e71b51e91367d46b0ceabb9)在保存 GIF 时,`_get_global_header()` 会因超长注释被反复复制,包括从不可信图片继承的注释。
Pillow 的 MicImagePlugin 在读取内嵌 TIFF 含 3 个及以上 IFD 的 MIC 文件时,访问 im.n_frames 会陷入无限循环、占满单核 CPU 且不抛异常。该问题仅影响安装了可选 olefile 包的环境,源于 7.2.0 引入的回归,Image.open、load、is_animated 等调用不受影响。
GitHub 安全公告指出 Pillow 的 GifImageFile._seek() 在 src/PIL/GifImagePlugin.py 中用 bytes 拼接累积 GIF 注释,使 Image.open() 耗时随注释数据量呈二次方增长,默认设置下 2 MB 文件约 5 秒、4 MB 约 35 秒、8 MB 约 3 分钟,而同样大小的普通 GIF 不到 1 秒。
为什么值得看:公告给出触发条件与实测耗时数据,并附上把 bytes 拼接改为列表 join 的补丁,便于使用 Pillow 的服务评估上传接口风险。
GitHub 安全公告库披露 Pillow 的 Image.quantize(palette=...) 在调色板为空时会返回 512 字节未初始化的 C 栈内存作为像素值,一个 80 字节的空 PLTE PNG 即可触发,泄露内容包含栈、堆、libc、libpython 与 _imaging 模块地址及栈保护 canary。
GitHub 安全公告库披露 Pillow 的 XbmImagePlugin 存在 ReDoS:构造的 512 字节文件会让 Image.open() 在单核上消耗约 375 秒 CPU 后才抛出 UnidentifiedImageError。
为什么值得看:公告给出了触发条件、耗时实测与正则修复补丁,使用 Pillow 处理用户上传图片的服务可据此判断暴露面。
Pillow 的 PdfParser.get_value() 递归深度保护失效:max_nesting 默认 -1 且每次递归递减,永远不等于 0,嵌套几千层的 PDF 对象即可触发未捕获的 RecursionError。
Pillow 在把多帧图像以 save_all=True 保存为多页 PDF 时,耗时随帧数呈二次方增长,原因是 src/PIL/PdfParser.py 的 PdfParser.next_object_id() 每次调用都重建并扫描已占用的对象 id 集合。
GitHub 安全公告库发布 GHSA-gg2r-wvfm-q9rx,指出 Pillow 的 MSP RLE 解码器把游程数据写入无上限的 io.BytesIO,单次游程可扩张约 85 倍,问题位于 src/PIL/MspImagePlugin.py:144-146。
Pillow 的 PngImageFile._seek() 在处理首个 fcTL 请求 OP_BACKGROUND 时,会先按 IHDR 声明尺寸调用 Image.core.fill 分配并清零整块画布,之后 Image.open() 的 _decompression_bomb_check 才执行。
为什么值得看:材料给出可运行的复现脚本与两份补丁,说明 APNG 在炸弹检查前按声明尺寸分配内存的路径。
Pillow 的 PdfParser.rewrite_pages() 在追加保存 PDF 时沿页面树 /Parent 链向上遍历且不记录已访问节点,333 字节的自引用 PDF 即可让 im.save(fp, "PDF", append=True) 永久挂起并占满一个 CPU 核心。
GitHub 安全公告披露 Pillow 在将图像编码为内存中的 TIFF 时存在堆 use-after-free:libtiff 在编码阶段拒绝某个 tag 导致 TIFFWriteScanline 失败后,编码器释放了输出缓冲区却未关闭 TIFF 句柄,随后清理阶段 TIFFClose 刷新数据写回已释放内存。
为什么值得看:公告给出可运行的 Python 复现脚本与 ASan 调用栈,便于维护者确认内存释放路径并判断自身服务是否受影响。
Pillow 在把 TIFF 保存到 io.BytesIO 等无 fileno() 的目标时,src/libImaging/TiffDecode.c 的 _tiffWriteProc 按 state->size + size 而非写入位置扩容,导致堆缓冲区溢出,同时把未初始化的堆字节写入输出文件。
为什么值得看:报告给出可运行的复现脚本与补丁,说明默认设置下把上传图片另存为 TIFF 到内存对象即可触发越界写。
Pillow 的 libtiff 编码器 PyImaging_LibTiffEncoderNew(src/encode.c)在把源 TIFF 中未识别的标签转发给 TIFFSetField 时,按 Python 值而非 libtiff 字段定义决定传参形式,导致构造的 TIFF 标签被当作字节数或指针读取。
为什么值得看:材料给出可运行的复现脚本与逐分支分析,展示了普通 open 后 save 即可触发内存泄露或崩溃的路径。
virtualenv 发布通告,指出 app-data seeder 与 pip 生成的 POSIX 控制台启动器会把环境目标路径当作 shell 语法解析,攻击者需影响传给 virtualenv 的环境路径且用户随后运行生成的启动器,命令才会以用户权限执行,Windows 可执行启动器不受影响。
virtualenv 的 safe_delete() 在删除失败恢复权限时用 lstat() 读取符号链接自身权限位,却用会跟随链接的 chmod() 应用,导致只读目录内符号链接指向的目标文件权限被改为 0777。该错误处理逻辑自 21.7.5 引入,需删除失败且调用用户拥有目标文件并可修改其权限,root 不会进入该路径。PR #3427 已避免在删除失败时修改 POSIX 权限。
virtualenv 内置创建器在创建环境前调用 ensure_dir() 处理 bin、lib 等目录,因 exists() 会跟随符号链接,攻击者预先在目标目录放置指向外部的目录链接后,创建过程会经该链接把 python、pip、activate 等文件写到请求目录之外。
OpenSSF 恶意包库为 PyPI 上的 acoustichub、acousticpack、asrdock 等恶意包分配 MAL-2026-18155、MAL-2026-18152、MAL-2026-18156 等编号。这些包属于 2026-10-voice-synthesis-profiles 活动,作为加载器从给定 URL 下载并执行远程恶意脚本,本身不含恶意载荷,用途尚不明确。
OpenSSF 恶意包库新增收录 PyPI 上的 acoustichub、acousticpack、asrdock、asrloom 等恶意包,均仅涉及 0.1.0 版本,归属活动 2026-10-voice-synthesis-profiles。
OpenSSF 恶意包库为 PyPI 上的 acousticpack、codecraze、dictanovaasr 等包分配 MAL-2026-18152、MAL-2026-18137、MAL-2026-18139 等编号。
OpenSSF 恶意包库新增收录 PyPI 恶意包 acousticpack、codecraze、dictanovaasr、hookgantry,均属 2026-10-voice-synthesis-profiles 活动,版本为 0.1.0。这些 loader 包会从给定 URL 下载并执行远程恶意脚本,本身不含恶意载荷,用途尚不明确。
OpenSSF 恶意包库为 PyPI 上的 aurenatts、batchspar、brummatts 等恶意包分配 MAL-2026-18134 至 MAL-2026-18136 编号。这些包属于 2026-10-voice-synthesis-profiles 活动,作为加载器从给定 URL 下载并执行远程恶意脚本,自身不含恶意载荷,用途尚不明确。
OpenSSF 恶意包库更新了 PyPI 恶意包 OSV 数据,新增 aurenatts、batchspar、brummatts、codecraze 等包(均为 0.1.0 版本)的恶意记录。这些包属于 2026-10-voice-synthesis-profiles 活动,作为加载器从给定 URL 下载并执行远程恶意脚本,本身不含恶意载荷,用途尚不明确。
OpenSSF 恶意包库更新记录为 PyPI 包 journey-test-hellospy 分配编号 MAL-2026-18133,并补充来源 kam193 的详情与分析师署名。该包在安装时窃取敏感环境变量,并通过覆盖 setup.py 的 install 命令执行恶意代码、创建反向 shell,属于 2026-10-journey-test-helloshell 定向攻击活动。
OpenSSF 恶意包库新增 PyPI 包 journey-test-hellospy 0.1.1,该包在安装时通过覆盖 setup.py 的 install 命令执行恶意代码并窃取环境变量,同时包含创建反向 shell 的代码。该包归属 2026-10-journey-test-helloshell 活动,被标记为定向攻击,IOC 包含 IP 137.131.233.62。
OpenSSF 恶意包库提交为多个恶意包分配 MAL 编号,包括 npm 上的 @sudobility/indexer_client 0.0.146、@sudobility/shaperouter_client 0.0.14、@sudobility/testomniac_client 0.0.131、@sudobility/wildduck_client 2.3.102。
为什么值得看:提交记录显示 @sudobility 系列 npm 包在 postinstall 中投放 XMRig 挖矿程序,并列出 S3 下载地址与矿池域名等 IOC。
OpenSSF 恶意包库新增两条 npm 恶意包记录:@sudobility/indexer_client 0.0.146 与 @sudobility/shaperouter_client 0.0.14 的 postinstall 钩子执行 scripts/miner.sh,从预签名 S3 URL 下载载荷解压至 /tmp/.smi 并运行。
OpenSSF 恶意包库更新了 npm 包 snavbox 的恶意包记录 MAL-2025-49362,受影响版本在原有 1.0.0、1.0.2、1.0.3 基础上补入 1.0.1。该记录关联 GHSA-ppfj-vpcr-qwqg,归类为 CWE-506 内嵌恶意代码,GHSA 条目以 SEMVER 范围从 0 引入覆盖 1.0.0 至 1.0.3。
OpenSSF 恶意包库新增一条来自 GHSA 的恶意包记录,涉及 npm 生态的 snavbox 包 1.0.0–1.0.3 版本,对应 GHSA-ppfj-vpcr-qwqg,归类为 CWE-506 嵌入式恶意代码。通告称安装或运行该包的机器应视为完全失陷,需在另一台机器上立即轮换全部密钥,仅卸载包无法保证清除恶意软件。
OpenSSF 恶意包库本次更新为恶意 RubyGems 包分配标识 ID,涉及 osv/malicious 目录下 zzhelloworld_socktest 等条目的哈希变更与文件删除。
OpenSSF 恶意包库新增 Amazon Inspector 上报的 RubyGems 恶意包 zzhelloworld_socktest,涉及 0.1.5 与 0.1.9 两个版本。
Google Chrome 在 Safe Browsing 的 Enhanced Protection 中新增由 Gemini 驱动的诈骗检测,可识别欺骗性网站,并在用户从 ClickFix 攻击中复制可疑命令时发出警告。
OpenSSF 恶意包库更新 MAL-2026-2144,将 PyPI 上的 litellm 1.107.0 标记为恶意,该版本于 2026-10-21 11:39 至 11:40 UTC 上传,含上游源码中没有的凭据窃取程序与远程代码执行后门,注入发生在构建或上传阶段。
OpenSSF 恶意包库新增记录,指出 2026-10-21 上传至 PyPI 的 litellm 1.107.0 含上游源码中不存在的凭据窃取程序与远程代码执行后门,系在构建或上传环节注入。
为什么值得看:记录披露了投毒 wheel 中三个额外文件的具体路径与哈希,可用于排查本地是否装过该版本并定位残留。
GMO Internet 旗下 Onamae.com 确认 Onamae Desktop Cloud 遭第三方未授权访问,部分客户服务器环境被植入恶意程序,受影响服务器最多达 26,739 台。
为什么值得看:事件披露了入侵确认、服务器关停与恢复时间未定等处置细节,可了解云服务商在客户环境被植入恶意程序后的应对方式。
OpenSSF 恶意包库更新 MAL-2026-15604,为 npm 包 @worrisome/reutil 补录别名 GHSA-4f5p-mp5p-863f。
OpenSSF 恶意包库新增两条来自 GHSA 的 npm 恶意包记录,分别为 GHSA-fxf3-w84v-3v6g(@worrisome/aaaa)和 GHSA-4f5p-mp5p-863f(@worrisome/reutil),均归类为 CWE-506 嵌入式恶意代码,影响范围自 0 起的所有版本。
卡巴斯基将针对韩国机构的攻击行动命名为 FlashHole,并归因于 Lazarus Group;该行动自 2025 年 7 月开始,通过钓鱼页面和特制 GitHub 页面投递恶意载荷。
为什么值得看:卡巴斯基复盘 Lazarus 的 FlashHole 行动,其用 ML-KEM 后量子加密保护载荷下发这一手法在恶意软件投递中较为少见。
OpenSSF 恶意包库为 PyPI 包 journey-test-helloshell 0.2.0 分配编号 MAL-2026-18124,并将其标记为恶意活动 2026-10-journey-test-helloshell 的一部分。
OpenSSF 恶意包库新增记录:PyPI 包 journey-test-helloshell 0.2.0 在安装时启动反弹 Shell,攻击者可借此在受害者机器上执行任意命令。该包通过覆盖 setup.py 中的 install 命令在安装阶段执行恶意代码,被归类为定向攻击,IOC 包含 IP 137.131.233.62。