針對 getaddrinfo() 漏洞的 Glibc 補丁

針對 getaddrinfo() 漏洞的 Glibc 補丁

我已經看到很多關於 glibc 庫中新發現的漏洞,攻擊者可以利用該漏洞(儘管很困難)。

這是一篇關於這個主題的(火與硫磺)文章: http://arstechnica.com/security/2016/02/extremely-severe-bug-leaves-dizzying-number-of-apps-and-devices-vulnerable/

我了解漏洞的本質,但我必須承認,在閱讀修補程式解決方案時我有點迷失。似乎需要在機器上執行幾個步驟,但它說電子郵件中附有一個「補丁」。

補丁具體在哪裡?

https://sourceware.org/ml/libc-alpha/2016-02/msg00416.html

抱歉,我不是 Linux 系統工程師(aptitude 和 yum 是我的家鄉)。

不幸的是,我為客戶管理的一些網站主要在 Amazon Linux 上,我讀到這些網站也可能受到影響 - 讓我們假設它們是。

我只是想確保我保護了這些盒子,我可能有能力應用補丁,但我認為我對 glibc 郵件存檔感到困惑。

任何人都可以闡明它 - 即用我們低階前端 Web 開發人員可以理解的語言來表達它嗎?

我知道這是新的/不斷發展的,我確信未來幾天將會提供更好的文件。

提前致謝。

答案1

如果您使用任何支援良好的發行版,則不需要原始補丁本身。大多數發行版現在都已經更新了 libc,並將其推送到其儲存庫,您所需要做的就是使用套件管理器來升級 libc。 (如果他們現在還沒有這樣做,請認真考慮切換發行版。)Amazon Linux 確實就是這種情況。從他們的安全公告:

[C]使用 Amazon EC2 並已修改其配置以使用非 AWS DNS 基礎架構的客戶應立即依照其 Linux 發行版提供的指示更新其 Linux 環境。使用 AWS DNS 基礎架構的 EC2 客戶不受影響,無需採取任何操作。

對於使用 Amazon Linux 且已修改其配置以使用非 AWS DNS 基礎架構的 Amazon EC2 客戶:

CVE-2015-7547 的修復程式已推送到 Amazon Linux AMI 儲存庫,嚴重程度評級為「嚴重」。在 2016 年 2 月 16 日或之後使用預設 Amazon Linux 設定啟動的執行個體將自動包含此 CVE 所需的修復。

如果您想查看補丁,請查看diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c電子郵件中以以下內容開頭的部分:

CVE-2015-7547

2016-02-15  Carlos O'Donell  

    [BZ #18665]
    * resolv/nss_dns/dns-host.c (gaih_getanswer_slice): Always set
    *herrno_p.
    (gaih_getanswer): Document functional behviour. Return tryagain
    if any result is tryagain.
    * resolv/res_query.c (__libc_res_nsearch): Set buffer size to zero
    when freed.
    * resolv/res_send.c: Add copyright text.
    (__libc_res_nsend): Document that MAXPACKET is expected.
    (send_vc): Document. Remove buffer reuse.
    (send_dg): Document. Remove buffer reuse. Set *thisanssizp to set the
    size of the buffer. Add Dprint for truncated UDP buffer.

diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index a255d5e..47cfe27 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -1031,7 +1031,10 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
   int h_namelen = 0;

   if (ancount == 0)
-    return NSS_STATUS_NOTFOUND;
+    {
+      *h_errnop = HOST_NOT_FOUND;
+      return NSS_STATUS_NOTFOUND;
+    }

...

相關內容