针对 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;
+    }

...

相关内容