CVE-2026-34757LibPNG库在1.0.9至1.6.57之前的版本中存在释放后重用安全漏洞。当应用程序调用png_get_PLTE、png_get_tRNS或png_get_hIST等函数获取内部缓冲区指针后,若将该指针直接回传给对应的setter函数,setter会先释放内部缓冲区,再从该悬空指针读取数据。这会导致块元数据静默损坏或堆内存信息泄露。
该漏洞的核心在于LibPNG库处理PLTE、tRNS和hIST图像块时的内存管理逻辑缺陷。在受影响版本中,getter函数(如png_get_PLTE)返回指向库内部堆内存的指针。如果应用程序逻辑错误地将此指针直接传递给对应的setter函数(如png_set_PLTE),setter会执行替换操作。该操作首先释放旧的内部缓冲区,不幸的是,传入的指针正指向该缓冲区,从而造成悬空指针。紧接着,setter尝试从该悬空指针读取数据并复制到新的缓冲区中。由于原内存区域已被释放,读取操作可能获取到陈旧数据,导致PNG块元数据被静默篡改;更危险的是,如果该内存被其他敏感数据重新占用,将导致堆内存信息泄露。结合CVSS向量分析,该漏洞利用难度低,无需用户交互,但受限于本地攻击向量,通常影响处理不可信PNG图像的本地服务或应用。