zlib 中压缩特殊设计的数据时出现的漏洞

zlib 库中发现了一个漏洞 (CVE-2018-25032),当尝试压缩传入数据中专门准备的字符序列时,会导致缓冲区溢出。 在目前的形式下,研究人员已经证明了导致进程异常终止的能力。 该问题是否会产生更严重的后果尚未得到研究。

该漏洞从 zlib 1.2.2.2 版本开始出现,并且还影响当前版本的 zlib 1.2.11。 值得注意的是,早在 2018 年就提出了修复该漏洞的补丁,但开发人员并没有关注它,也没有发布修复版本(zlib 库最后一次更新是在 2017 年)。 该修复程序也尚未包含在发行版提供的软件包中。 您可以在以下页面上跟踪各个发行版的修复程序发布:Debian、RHEL、Fedora、SUSE、Ubuntu、Arch Linux、OpenBSD、FreeBSD、NetBSD。 zlib-ng 库不受该问题的影响。

如果输入流包含大量要打包的匹配项,并且基于固定的霍夫曼编码对其进行打包,则会出现该漏洞。 在某些情况下,放置压缩结果的中间缓冲器的内容可能与存储符号频率表的存储器重叠。 结果,会生成不正确的压缩数据,并由于写入缓冲区边界之外而崩溃。

该漏洞只能使用基于固定霍夫曼码的压缩策略来利用。 当在代码中显式启用 Z_FIXED 选项时,会选择类似的策略(使用 Z_FIXED 选项时导致崩溃的序列示例)。 从代码来看,如果针对数据计算的最优树和静态树具有相同的大小,也可以自动选择Z_FIXED策略。

目前尚不清楚是否可以使用默认的 Z_DEFAULT_STRATEGY 压缩策略来选择利用该漏洞的条件。 如果不是,则该漏洞将仅限于明确使用 Z_FIXED 选项的某些特定系统。 如果是这样,那么该漏洞造成的损害可能非常严重,因为 zlib 库是事实上的标准,并且在许多流行项目中使用,包括 Linux 内核、OpenSSH、OpenSSL、apache httpd、libpng、FFmpeg、rsync、dpkg 、rpm、Git、PostgreSQL、MySQL 等。

来源: opennet.ru

添加评论