IPBUF安全漏洞报告
English
CVE-2026-33416 CVSS 7.5 高危

CVE-2026-33416 LibPNG释放后重用漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-33416
漏洞类型
释放后重用
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
LIBPNG

相关标签

释放后重用UAFLibPNG内存破坏远程代码执行缓冲区混淆

漏洞概述

LIBPNG 1.2.1至1.6.55版本中存在释放后重用漏洞。`png_set_tRNS`和`png_set_PLTE`函数在`png_struct`和`png_info`之间共享堆缓冲区,导致指针悬空。当调用`png_free_data`释放缓冲区后,后续操作可能访问已释放内存,造成内存破坏,影响机密性、完整性和可用性。

技术细节

漏洞核心在于LIBPNG库中`png_set_tRNS`和`png_set_PLTE`函数导致`png_struct`与`png_info`共享堆缓冲区,造成别名冲突。由于两个结构体生命周期独立,调用`png_free_data`释放`info_ptr`侧缓冲区后,`png_ptr`侧指针悬空。后续图像处理流程中的行转换函数若再次访问该指针,将触发释放后重用(UAF)。攻击者可精心构造恶意PNG文件,利用该UAF漏洞控制程序执行流或导致崩溃,实现远程代码执行或拒绝服务攻击。

攻击链分析

STEP 1
1. 恶意构造
攻击者分析LibPNG源码,构造特制的PNG图片文件,该文件在解析时会触发特定函数调用序列。
STEP 2
2. 投递攻击
攻击者将恶意PNG文件发送给受害者,或诱导受害者访问包含该图片的网页。
STEP 3
3. 触发漏洞
受害者使用易受攻击的LibPNG版本解析图片,导致共享堆缓冲区被释放但指针未置空。
STEP 4
4. 利用漏洞
后续的行转换函数访问已释放的内存,导致程序崩溃(拒绝服务)或潜在的数据泄露与代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-33416: LibPNG Use-After-Free * Conceptual demonstration of the aliasing issue. */ #include <png.h> void trigger_vulnerability() { png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); png_infop info_ptr = png_create_info_struct(png_ptr); png_color palette[256]; png_byte trans_alpha[256]; // Set palette and trans_alpha, creating the shared allocation alias png_set_PLTE(png_ptr, info_ptr, palette, 256); png_set_tRNS(png_ptr, info_ptr, trans_alpha, 256, NULL); // Free data via info_ptr. png_ptr->palette and png_ptr->trans_alpha are now dangling. png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 1); png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 1); // Subsequent operations (e.g., row processing) dereference the freed memory. // This causes the Use-After-Free condition. }

影响范围

LIBPNG 1.2.1 to 1.6.55

防御指南

临时缓解措施
建议立即将LIBPNG库更新至修复版本1.6.56。若暂时无法升级,应限制处理不可信来源的PNG文件,并在应用层实施输入过滤,以减少被攻击的风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表