OSSN/OSSN-0043
glibc 'GHOST' 漏洞可能允许远程代码执行
总结
GNU C 库 (glibc) 的 gethostbyname* 函数中存在一个严重的漏洞,可能允许攻击者以调用 gethostbyname* 函数的应用程序的权限执行远程代码。这些易受攻击的函数被大量程序使用,实际上只要 Linux 系统中使用网络套接字,就会出现这种情况,因此此漏洞的完全可利用性将不会立即显现。
此漏洞的发布者 Qualys 已经宣布了针对 Exim 邮件服务器的概念验证漏洞利用,该漏洞绕过了操作系统保护措施,例如 ASLR 和 DEP。
受影响的服务 / 软件
所有运行在 Linux 安装上并使用易受攻击 glibc 库的版本。
讨论
GNU C 库 (glibc) 从版本 2.2 到 2.17(含)具有一组易受攻击的主机名/地址解析函数。在 __nss_hostname_digits_dots() 函数中存在缓冲区溢出,该函数被 gethostbyname*() 函数组使用。可以覆盖的最大内存量为 sizeof(char *),即在典型的 32 位系统上为 4 个字节,在典型的 64 位系统上为 8 个字节。
许多其他 C/C++ 程序和解释型语言(如 Python、Perl 和 Bash)都链接了这些底层函数,因此此漏洞具有隐蔽性,并且会在看似明显无关的情况下出现。在典型的 Linux 安装中,这些函数的使用情况很多,通常只要将主机名解析为 IP 地址,就会使用它们,尽管在较新的应用程序中,可以使用兼容 IPv6 的函数 getaddinfo() 代替。
如果攻击者可以控制输入到执行主机名解析的函数的输入,此漏洞可能允许攻击者远程执行代码。目前尚无与此漏洞相关的 OpenStack 特定的利用路径。但是,Python socket 库提供了围绕 glibc 函数的 gethostbyname() 包装器,并且存在各种可能暴露此漏洞的方式。
建议的操作
glibc 库在启动使用它的进程时加载到内存中,因此要修复此漏洞,应将 glibc 更新到非易受攻击的版本(2.18 或更高版本),并重新启动所有使用 glibc 的服务,以替换内存中的版本。由于这些易受攻击的函数的使用位置很多,实际上这意味着在更新 glibc 后必须重新启动易受攻击的系统。
联系方式 / 参考文献
- 作者:Doug Chivers,HPE
- 此 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0043
- 原始 LaunchPad Bug:https://bugs.launchpad.net/ossn/+bug/1415416
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg
- CVE:CVE-2015-0235
- 来源建议:https://www.qualys.com/research/security-advisories/GHOST-CVE-2015-0235.txt