Glibc getaddrinfo()栈缓冲区溢出漏洞

Glibc getaddrinfo()栈缓冲区溢出漏洞

发布日期:2016-02-19

CVE ID:CVE-2015-7547

受影响的软件及系统:
====================
Glibc 2.9 - 2.22

未受影响的软件及系统:
======================
Glibc 2.23

综述:
======
Glibc 2.9-2.22的版本中的getaddrinfo()函数存在一个栈缓冲区溢出漏洞,攻击者可以利用此漏洞执行任意代码。

由于Glibc是基础的C运行库,大量应用都可能受此问题影响,建议尽快升级。

分析:
======
glibc是GNU发布的libc库,即c运行库,几乎其它任何运行库都会依赖于glibc。

glibc 2.9-2.22版本的DNS客户端解析器在使用getaddrinfo()库函数时存在一个栈缓冲区漏洞。getaddrinfo()函数使用AF_UNSPEC协议族时,会触发底层解析器代码并行发送2个针对A记录和AAAA记录的查询请求,glibc开始会在栈上分配一个2048字节的缓冲区用来存储DNS请求的应答数据,如果应答数据超过2048字节,将会分配新的堆缓冲区来存储。libnss_dns.so.2中的send_dg(UDP)和send_vc(TCP)函数在缓冲区管理上存在错误,导致超长数据没有被写入新分配的堆缓冲区,而是被写入了2048字节的栈缓冲区,造成缓冲区溢出。攻击者可能导致DNS客户端崩溃或者在DNS客户端所在主机上执行任意代码。

利用此漏洞需要受影响应用调用getaddrinfo()函数,并且攻击者可以控制传递给该函数的恶意域名,攻击者需要伪造一个负责解析恶意域名的DNS服务器。

如果应用会从用户那里获取域名,并调用了getaddrinfo()进行解析,就有可能受此问题影响,造成远程执行代码,例如ssh/sudo/curl等。

解决方法:
==========
* 在防火墙或者本地的DNS解析器中限制DNS响应数据的长度小于2048。

厂商状态:
==========
GNU已经在glibc 2.23的开发版本中修复此漏洞。

目前各大Linux发行版厂商均已修复此漏洞,请尽快进行升级:

RedHat: https://rhn.redhat.com/errata/RHSA-2016-0175.html
Ubuntu:
Debian: https://www.debian.org/security/2016/dsa-3481

CentOS:
https://lists.centos.org/pipermail/centos-announce/2016-February/021668.html
https://lists.centos.org/pipermail/centos-announce/2016-February/021672.html

GNU C Library:

附加信息:
==========
1. https://www.sourceware.org/ml/libc-alpha/2016-02/msg00416.html
2. https://googleonlinesecurity.blogspot.com/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html

Linux升级Glibc 

危险!GHOST(幽灵)漏洞曝光 

GNU glibc 爆 gethostbyname 缓冲区溢出漏洞 

glibc gethostbyname缓冲区溢出漏洞(CVE-2015-0235) 

Linux glibc幽灵漏洞测试与修复方法

Glibc 的详细介绍请点这里
Glibc 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/802273f7fb279357717c9f8732b11c07.html