关于GNU glibc函数库存在缓冲区溢出高危漏洞(“幽灵”漏洞)的情况公告

2015-01-29 15:11:36

安全公告编号:CNTA-2015-0003

1月28日,CNVD收录了GNU glibc‘__nss_hostname_digits_dots()’函数存在的一个缓冲区溢出漏洞(CNVD-2015-00719,对应CVE-2015-0235),互联网上称“Ghost”幽灵漏洞。经过对多个Linux操作系统的本地实例测试,成功利用该漏洞可以当前用户权限执行任意代码,进而控制操作系统主机。CNVD组织成员单位开展的进一步测试分析,认为该漏洞影响虽然较为广泛,但从目前披露的利用方式看,要达到在远程渗透成功需要一定前提(如:系统和网络服务依赖关系和攻击数据包长度),短期内出现大规模远程攻击的可能性还很小。目前GNU官方和部分Linux发行版厂商已经提供了修复补丁。

一、漏洞情况分析

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。

根据国外漏洞研究者公开的情况进行分析,glibc库中__nss_hostname_digits_dots()函数存在缓冲区溢出漏洞,该漏洞产生的原因是glibc\nss\digits_dots.c 的__nss_hostname_digits_dots函数未加验证使用 strcpy (hostname, name),导致缓冲区溢出。该漏洞可通过gethostbyname*()函数在本地或者远程触发。

触发的一般场景为:应用程序主要使用gethostbyname*()函数发起DNS请求,这个函数会将主机名称转换为ip地址,很多服务程序在调用gethostbyname()之前,会对其做DNS有效性检查,而通常无法满足这个长度要求。因此,当提交一个超长又合法的IP地址类型的字符串给gethostbyname()函数,就会触发一个堆溢出。

二、漏洞影响范围

虽然2013年5月21日GNU官方已经修复了此漏洞(介于glibc-2.17及glibc-2.18之间的版本),但当时其未把相关情况作为漏洞处理,因此相关Linux发行版并未跟进升级。目前互联网研究者测试情况汇总表明,Debian 7 (wheezy), Red Hat Enterprise Linux 6 & 7, CentOS 6&7, Ubuntu 12.04等大多数的Linux发行版都受此问题影响,对应受影响glic版本为Glibc 2.2/2.17,而Glibc 2.18未受到影响。

针对系统服务和应用服务的远程测试情况国内外研究机构还正在进行,目前的初步结果表明绝大多数的本地SUID程序和服务程序无法利用漏洞攻击成功, 目前已知受影响的程序有clockdiff,pppd,procmail,Exim,其中Exim邮件服务器已经有可利用的远程攻击代码。

三、漏洞修复建议

GNU和各大Linux发行版厂商均已修复此漏洞,请广大用户尽快进行升级:

GNU C Library: http://www.gnu.org/software/libc/

RedHat: https://rhn.redhat.com/errata/RHSA-2015-0090.html

Ubuntu: https://launchpad.net/ubuntu/+source/eglibc

Debian: https://security-tracker.debian.org/tracker/CVE-2015-0235

参考链接:

1.https://www.qualys.com/research/security-advisories/GHOST-CVE-2015-0235.txt

2.http://www.nsfocus.net/index.php?act=alert&do=view&aid=153

3.https://rhn.redhat.com/errata/RHSA-2015-0090.html

4.https://security-tracker.debian.org/tracker/CVE-2015-0235

5.http://bobao.360.cn/news/detail/1166.html

6.http://www.cnvd.org.cn/flaw/show/CNVD-2015-00719

注:CNVD技术组成员单位绿盟科技、安天科技、东软、奇虎360、天融信等公司提供了技术研判支持。CNVD根据测试情况重点采用了绿盟科技的研判结论。