Apache 是否容易受到 CVE-2015-1781 的攻击?

信息安全 阿帕奇
2021-08-17 04:55:07

Apache 是否容易受到CVE-2015-1781(函数族中的缓冲区溢出)的攻击gethostbyname_r()

如何快速检查我的系统是否安全?

3个回答

您必须首先检查 glibc 的版本:使用此命令可以帮助:

ldd --版本

答案的最后有好东西可以跳过去那里

根据此参考,漏洞适用于 2.21-3 之前的 glibc 版本。如果您的 glibc 比此版本旧,则它很容易受到攻击。

该问题已在上游修复,但尚未发布新版本。

还有一个最近修订的漏洞是:04/13/2015,并且与 glibc 2.20 版及之前的版本有关。

另请阅读:Red Hat alert RHSA-2015:0863-01 (glibc)

Red Hat 的 Arjun Shankar 发现 nss_dns 代码在缓冲区起始指针对齐时不会调整缓冲区长度。因此,在执行 gethostbyname_r 等函数时可能会发生缓冲区溢出,并且精心设计的 DNS 响应可能会导致应用程序崩溃或导致任意代码执行。 仅当使用未对齐的缓冲区调用这些函数时才会发生这种情况。我查看了相当多的源代码,并使用打过补丁的 glibc 测试了应用程序,该补丁记录了未对齐的缓冲区。我没有观察到任何此类未对齐的缓冲区[参考]

glibc 中的 GHOST gethostbyname() 堆溢出 (CVE-2015-0235)

这是另一个与 glibc 和 gethostbyname() 相关的漏洞,这篇文章说:“据我们所知,缓冲区溢出不能在任何 [这些] 中触发:

阿帕奇,杯子,鸽舍,gnupg,isc-dhcp,lighttpd,mariadb/mysql,

nfs-utils,nginx,nodejs,openldap,openssh,postfix,proftpd,

纯 ftpd、rsyslog、samba、sendmail、sysklogd、syslog-ng、tcp_wrappers、

vsftpd,xinetd。”

所以我认为像这个漏洞一样,您提到的漏洞不会影响 apache

也许这个漏洞对 Apache 有影响,也可能没有,但直到澄清这个问题。快速的对策是将 glibc 升级到最新版本。

Apache httpd 源码:2.4.12

我为“GLIBC”和“gethostbyname”做了一个源代码 Grep

  • 我找到了对 GlibC 库的引用(因此 Apache 可以使用它们)
  • 我还发现了 'gethostbyname' 的以下用途:

    httpd-2.4.12/support/logresolve.pl.in:213: $hostname = gethostbyaddr(gethostbyname($ip), AF_INET);

    httpd-2.4.12/server/util.c:45:#include [netdb.h] /* for gethostbyname() */

    httpd-2.4.12/os/os2/core_header.def:13:“gethostbyname”

    httpd-2.4.12/docs/manual/developer/thread_safety.html.en:175: [code]gethostbyname()[/code] 在大多数 C 上不是线程安全的

    httpd-2.4.12/docs/manual/developer/thread_safety.html.en:178: [code]gethostbyname()[/code] 在你的操作系统上是线程安全的,c-client

    httpd-2.4.12/docs/manual/misc/perf-tuning.html.en:147:可以考虑在

    httpd-2.4.12/docs/manual/misc/perf-tuning.html.fr:161:某些 CGI,vous pouvez effectuer l'appel [code]gethostbyname[/code]

    httpd-2.4.12/docs/manual/misc/perf-tuning.html.tr.utf8:152: bu ihtiyaçlarına yönelik olarak [code]gethostbyname[/code] çağrıları

    httpd-2.4.12/docs/manual/misc/perf-tuning.html.ko.euc-kr:139:CGI [code]gethostbyname[/code]

    httpd-2.4.12/test/test_limits.c:123: if ((he = gethostbyname(addr)) == NULL) {

    httpd-2.4.12/test/test_limits.c:124: perror("gethostbyname");

    httpd-2.4.12/modules/arch/netware/mod_nw_ssl.c:196: hep = gethostbyname(w);

    httpd-2.4.12/modules/metadata/mod_unique_id.c:64: * gethostbyname (gethostname()) 在所有机器上都是唯一的

所以 apache httpd 可能容易受到攻击,它进一步依赖于使用的 glibc 版本。报告的风险是低于glibc 2.12 (glib 6)的任何版本

Apache 正在使用 Apache Portability Runtime,他们实现了自己的 apr_gethostbyname,因此核心服务器不易受到攻击。

但是随着时间的推移,一些模块,显然他们没有使用 APR gethostbyname 函数,所以仍然找到一些使用它的模块是非常合理的。

此外,Apache 正在正确验证所有输入,因此即使 Apache 正在使用此功能,发生溢出的机会也非常低。

我快速检查了一下,没有发现任何对 gethostbyname_r 的引用,因此 99.999% 的 Apache Web Server 没有漏洞。

更新:

您还可以看到我的同事已经在查看源代码,而 gethostbyname 仅在 2 个模块中被发现。