關于GNU glibc getaddrinfo()堆棧緩沖區溢出漏洞的安全公告

2016-02-18 14:27:34

安全公告編號:CNTA-2016-0008

近日,國家信息安全漏洞共享平臺(CNVD)收錄了GNU?glibc?getaddrinfo()堆棧緩沖區溢出漏洞(CNVD-2016-01100,對應CVE-2015-7547)。攻擊者利用漏洞可通過構建惡意dns服務或使用中間人的方法對受害者發起攻擊,對Linux終端設備構成安全威脅。

一、漏洞情況分析

GNU?glibc是一款按LGPL許可協議發布的開源C語言編譯程序,是Linux操作系統中C庫的實現。

glibc中getaddrinfo函數在處理特定dns?response數據包時存在棧溢出漏洞。由于glibc通過alloca()函數在棧中為_nss_dns_gethostbyname4_r函數2048字節的空間,用于托管DNS響應;若響應大于2048字節,程序會從堆中重新分配一個緩沖區,并更新所有信息(緩沖區指針,緩沖區大小和響應大?。?;在一定條件下,會出現棧緩沖區和新分配的堆內存的錯誤匹配,導致超過棧緩沖區大小的響應仍然存儲在棧中,進而發生緩沖區溢出。攻擊者利用漏洞可通過構建惡意dns服務或使用中間人攻擊的方法對Linux主機或相關設備發起攻擊,導致遠程代碼執行,進而可獲取用戶終端控制權。

CNVD對該漏洞的綜合評級為“高危”。

二、漏洞影響范圍

漏洞影響glibc>2.9的所有版本,glibc是Linux系統中最底層的API,應用于眾多Linux發行版本中,因此該漏洞影響范圍廣泛。所有Debian?系列、Red?Hat?系列的Linux?發行版,只要glibc版本大于2.9均受該漏洞影響。

三、漏洞修復建議

目前,互聯網上已披露針對該漏洞的利用原理分析及利用代碼。廠商暫未發布升級補丁修復該漏洞,,CNVD建議用戶采取如下臨時措施:該漏洞存在于resolv/res_send.c文件中,當getaddrinfo()函數被調用時會觸發該漏洞,技術人員可以通過將TCP?DNS響應的大小限制為1024字節,并丟棄所有超過512字節的UDP?DNS數據包來緩解該問題。

附:參考鏈接:

https://web.nvd.nist.gov/view/vuln/detail?vulnId= CVE-2015-7547

https://sourceware.org/ml/libc-alpha/2016-02/msg00416.html (補丁鏈接)

http://www.cnvd.org.cn/flaw/show/CNVD-2016-01100