Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

嚴重安全性漏洞:glibc 的 getaddrinfo() 含有以堆疊為基礎的緩衝區溢位問題(CVE-2015-7547)

glibc 套件包含了多個標準函式庫,由系統上多種程式所使用。為了節省磁碟空間與記憶體,並讓升級更容易,一般系統碼會保留在單一地方,且與程式共享。這套件包含了標準的 C 函式庫,讓所有 GNU/Linux 程式皆連結使用。glibc 的 libresolv 函式庫提供的函數能轉譯主機名稱與 IP 位址。nss_dns 是 glibc 的元件,提供 NSS(名稱服務切換,Name Service Switch)服務模組,使用 libresolv 來進行 DNS 的查詢工作。

背景

libresolv 進行雙重 A/AAAA DNS 查詢的原始碼中,發現以堆疊為基礎的緩衝區溢位問題。來自遠端的攻擊者可以建立特製的 DNS 回應,導致 libresolv 當掉,或可能以執行這函式庫的使用者之權限來執行程式碼。這項緩衝區溢位問題發生在 libresolv 的 send_dg 函數(UDP 查詢)與 send_vc(TCP 查詢)裡。只有在 nss_dns NSS 服務模組呼叫 libresolv 時,才會出現問題。此弱點已經被指定為 [CVE-2015-7547](https://access.redhat.com/security/cve/CVE-2015-7547)。

搭配 AF_UNSPEC 位址家族呼叫 getaddrinfo 的應用程式會受到影響;但 Red Hat Enterprise Linux 6.4 有例外情況,應用程式若使用 AF_INET6 位址家族,那也會受到影響。只使用舊的 gethostbyname 函數或 libresolv 函數(例如 res_search,而非 getaddrinfo)的應用程式並不會受到影響。

這問題不會影響 Red Hat Enterprise Linux 5 以下的 glibc 版本。這問題只會影響 Red Hat Enterprise Linux 6 與 7 的 glibc 版本。

衝擊

這項問題已被 Red Hat 產品安全部評為〔嚴重〕(https://access.redhat.com/security/updates/classification/#critical)衝擊。

減緩問題

在 libresolv 的預設配置中,以 UDP 為基礎的向量會透過使用受信任網路上,受信任的、與通訊協定相容的 DNS 解析程式得到減緩。因為預設上,glibc 解析程式不會啟用 EDNS0,也不會要求大型的需求,因此相容的解析程式並不會產生過大的回應,進而導致此漏洞發生。

以 TCP 為基礎的向量能透過受信任網路上、受信任的遞迴解析程式(這程式限制了每個 DNS 回應的大小上限為 1,023)得到減緩。然而,這項功能在 DNS 解析程式中並不常見,因為這會打斷 DNS 通訊協定。(大部分解析程式所提供的緩衝區大小配置選項,只用於 UDP 上,而非 TCP。)拒絕 AAAA 回應,卻不限制 A 回應的大小,並不能減緩此弱點所帶來的問題。

在受影響的系統上停用 IPv6「並不能」減緩此弱點所帶來的問題,因為即使系統缺乏對 IPv6 的支援,雙 A/AAAA 查詢還是得以進行。

受影響的產品與解決方案

Red Hat Enterprise Linux 6 與 7 的所有 glibc 版本之套件都會受到此漏洞的影響。欲知用來修正此問題的個別安全性建議,請參閱下列表格中的連結:

解決方案

產品 建議
Red Hat Enterprise Linux 6 RHSA-2016:0175
Red Hat Enterprise Linux 7 RHSA-2016:0176
Red Hat Enterprise Linux 6.2 Advanced Update Support RHSA-2016:0225
Red Hat Enterprise Linux 6.4 Advanced Update Support RHSA-2016:0225
Red Hat Enterprise Linux 6.5 Advanced Update Support RHSA-2016:0225
Red Hat Enterprise Linux 6.6 Extended Update Support RHSA-2016:0225
Red Hat Enterprise Linux 7.1 Extended Update Support RHSA-2016:0225


套用更新之後,您必須重新啟動電腦,或重新啟動所有受到影響的服務:

因為這弱點會影響系統上許多應用程式,因此最安全、最建議的方法是重新啟動電腦,以確定每個應用程式都會使用更新後的 glibc 套件。

如果套用更新後,您無法重新啟動系統,請執行以下指令,列出所有執行中且(還在記憶體中)使用舊版本 glibc 的執行序(不限於服務)。

lsof +c0 -d DEL | awk 'NR==1 || /libc-/ {print $2,$1,$4,$NF}' | column -t

從列出的清單中,找出公開的服務並將之重新啟動。這程序只能是暫時性的解決方案,Red Hat 並不支援此方法;且如果發生問題,在開始障礙排除之前,您必須重新啟動電腦。

常見問題集

1. SELinux 會擋掉這個安全性漏洞嗎?
適切的 SELinux 政策會包含攻擊者可能會造成的損害,並限制他們存取系統;但許多應用程式與系統元件會用到 DNS,因此對於這項問題,SELinux 政策僅提供有限的防護能力。

2. 受信任的 DNS 解析程式會保護系統免於這問題嗎?
受信任的解析程式若使用了預設、相容於通訊協定的配置,並不能免於這問題,因為潛在漏洞牽扯到語法結構上嚴謹的 DNS 回應。

3. 靜態連結的函式庫會受此漏洞的影響嗎?
Red Hat 並不支援靜態連結 glibc。然而,如果客戶已使用「glibc-static」套件建立了靜態連結的應用程式,這些應用程式還是會使用 nss_dns 與 libresolv 的系統複製版本,安裝更新後的 glibc 套件能解決這項弱點所帶來的問題。

鳴謝

此漏洞乃經由 Google 安全小組(Google Security Team)與 Red Hat 所發現。

Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.