Apache 是否容易受到CVE-2015-1781(函数族中的缓冲区溢出)的攻击gethostbyname_r()
?
如何快速检查我的系统是否安全?
Apache 是否容易受到CVE-2015-1781(函数族中的缓冲区溢出)的攻击gethostbyname_r()
?
如何快速检查我的系统是否安全?
您必须首先检查 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
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 正在使用 Apache Portability Runtime,他们实现了自己的 apr_gethostbyname,因此核心服务器不易受到攻击。
但是随着时间的推移,一些模块,显然他们没有使用 APR gethostbyname 函数,所以仍然找到一些使用它的模块是非常合理的。
此外,Apache 正在正确验证所有输入,因此即使 Apache 正在使用此功能,发生溢出的机会也非常低。
我快速检查了一下,没有发现任何对 gethostbyname_r 的引用,因此 99.999% 的 Apache Web Server 没有漏洞。
更新:
您还可以看到我的同事已经在查看源代码,而 gethostbyname 仅在 2 个模块中被发现。