libpng 官方参考库中的这两个严重漏洞已存在30年之久
聚焦源代码安全网罗国内外最新资讯编译代码卫士安全研究人员披露了位于 libpng 官方参考库中的两个严重漏洞。libpng 是便携式网络图形格式的官方参考库。这些漏洞影响了跨越数十年开发历程的多个版本可能允许攻击者触发进程崩溃、泄露敏感信息甚至实现任意代码执行。作为一个与平台无关的 C 语言库libpng 是无数应用程序中图像渲染的基石涵盖从网页浏览器到嵌入式系统的广泛领域。这两个漏洞凸显了传统 C 语言代码库中内存管理长期存在的风险。第一个漏洞CVE-2026-33636针对的是使用 Neon SIMD 指令的 ARM/AArch64 架构中用于性能优化的代码。调色板扩展路径中存在一处越界读取和写入漏洞。当库将 8 位索引调色板行扩展为 RGB 或 RGBA 时Neon 循环在处理最后一组像素时未验证是否有足够的剩余输入数据。由于该实现是从行尾反向处理的最后一次迭代会解引用缓冲区起始位置之前的指针。攻击者可通过提供特制的 PNG 图片轻易导致进程崩溃。由于调色板内容由攻击者控制堆内存内容可能通过解码后的像素输出被泄露。此漏洞仅影响启用了硬件优化的系统具体文件为 arm/palette_neon_intrinsics.c。基于 IntelSSE2、PowerPC 的实现以及通用的 C 语言实现均不受影响。第二个漏洞CVE-2026-33416是一个涉及两个内部结构体 png_struct 和 png_info 之间指针别名别名使用的经典逻辑错误。此漏洞自 1.0 版本针对透明数据和 1.2.1 版本针对调色板以来就一直存在于代码库中。像 png_set_tRNS 和 png_set_PLTE 这样的函数会在两个不同结构体之间共享同一个堆分配的缓冲区。如果应用程序调用 png_free_data它会通过其中一个结构体释放缓冲区而另一个结构体则仍持有一个悬空指针。随后的转换操作会读取——有时甚至写入——这块已被释放的内存。研究人员已在一些环境中演示了远程代码执行。在像 glibc tcache 这样的现代内存分配器上被释放的 256 字节缓冲区通常会立即被新对象重新使用。如果攻击者控制通过 tRNS 数据块重新写入该内存的值他们就可以劫持应用程序的控制流。这些特殊构造的 PNG 文件 100% 符合标准规范这意味着传统的验证工具或 Web 应用防火墙在不屏蔽所有 PNG 文件的情况下无法检测到此类攻击。用户应升级到已修复这两个漏洞的 libpng v1.6.56 或 v1.8.0主干分支版本。如果无法立即更新可以通过在编译时使用以下标志来禁用 ARM Neon 漏洞的硬件优化缓解措施-DPNG_ARM_NEON_OPT0。至于第二个释放后使用漏洞建议开发者审查在 png_read_info() 和 png_read_update_info() 阶段之间调用 png_free_data() 的应用程序模式。开源卫士试用地址https://oss.qianxin.com/#/login代码卫士试用地址https://sast.qianxin.com/#/login推荐阅读Telegram 创始人 Pavel Durov 因缺乏内容审核被捕Telegram 0day可导致攻击者将恶意安卓APK以视频形式发送Telegram 修复Windows 版中的0day漏洞原文链接https://securityonline.info/libpng-vulnerability-rce-arm-neon-cve-2026-33636-cve-2026-33416/题图Pixabay License本文由奇安信编译不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。奇安信代码卫士 (codesafe)国内首个专注于软件开发安全的产品线。觉得不错就点个 “在看” 或 赞” 吧~