Libpng png_decompress_chunk()函数拒绝服务漏洞

受影响系统:

libpng libpng 1.4.x
libpng libpng 1.2.x
libpng libpng 1.0.x

不受影响系统:

libpng libpng 1.4.1
libpng libpng 1.2.43
libpng libpng 1.0.53

描述:
libpng是多种应用程序所使用的解析PNG图形格式的函数库。

libpng库的png_decompress_chunk()函数在处理包含有高压缩比的辅助数据块的PNG文件时可能会消耗大量的CPU时间和内存,这种资源耗尽可能导致使用libpng库的应用挂起。

PNG格式使用高效的压缩方式来存储图形数据和辅助数据库中的一些相关数据。PNG规范没有限制块的数量,将其大小限制于2.147G(2,147,483,647字节)。类似的,规范将图形的宽度和高度限制到21亿4700万行和21亿4700万列。

由于deflate压缩方式可以非常高效的压缩仅由多次重复的单字节组成的数据流,很小的PNG文件在解压时可能会占用很大的内存,形成耗尽所有可用内存的“解压炸弹”。例如,对于包含有50,000行且每行都包含有100个字母Z的zTXt块,压缩后大约为17k字节,但解压后为5M,压缩比约为300:1。

Libpng库在展开压缩的zTXt、iTXt和iCCP辅助数据块时使用了低效率的内存获取方式,图形文件中所包含的大约为50k畸形iCCP块可以解压到60M,这会将浏览器挂起约20分钟,精心创建的恶意块还可能将浏览器挂起更长时间,耗尽所有可用的内存。

<*来源:Glenn Randers-Pehrson
  
  链接:
http://www.kb.cert.org/vuls/id/576029
        http://libpng.sourceforge.net/ADVISORY-1.4.1.html
        http://libpng.sourceforge.net/decompression_bombs.html
        http://secunia.com/advisories/38774/
*>

建议:

临时解决方法:

* 限制内存使用和缓存的辅助数据块。
* 禁止解码辅助数据块。

厂商补丁:

libpng
——
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://libpng.sourceforge.net/

发表评论?

0 条评论。

发表评论