Glibc漏洞集
2015-02-02 13:52:54 阿炯

Glibc 幽灵漏洞
Glibc出高危漏洞影响大量应用和设备
Glibc 安全补丁引起更严重的漏洞
Glibc 动态加载器存在严重本地提权漏洞


Glibc 即 GNU C Library,是 GNU 系统以及大多数采用 Linux 内核的系统中的 C 运行库。Glibc 是 Linux 系统中最底层的 API,几乎其它任何运行库都会依赖于 Glibc。它定义了典型程序所需的系统调用和其他基本功能,例如 open、malloc、printf、exit 等。

Glibc 幽灵漏洞

2015年2月消息,幽灵漏洞是Linux glibc库上出现的一个严重的安全问题,可以让攻击者在不了解系统的任何情况下远程获取操作系统的控制权限,目前它的CVE编号为CVE-2015-0235

该漏洞出现在GNU C函式库(glibc)中将主机名称转为IP位址的GetHost函数,因此被简称为GHOST。Qualys在 __nss_hostname_digits_dots() 发现一个缓衝区溢位漏洞,不论是执行gethostbyname()或gethostbyname2()功能都有可能触发该漏洞,允许远端攻击者执行任意程式并掌控系统。

不过,Talos Group认为此一重大漏洞并没有那么可怕。其中一个原因是这两项功能因未支援IPv6,所以约在15年前就日渐被淘汰,支援IPv6且用来替代上述功能 的getaddrinfo()并不存在该漏洞。其次是必须要接受以主机名称输入且仍使用gethostbyname()或 gethostbyname2()功能的应用程式才可能被攻击。再者相关功能限制了可使用的主机名称格式,除了要求主机名称只能由数字与 .(dot)组成之外,也要求主机名称的第一个字元必须是 .,但最后一个字元不能是 .,很少有应用程式接受这种资料格式的输入。

Talos Group表示,即使这是一个允许远端程式攻击的漏洞,但其限制降低了它的威胁性,骇客必须使用gethostbyname()或 gethostbyname2()的其中一项功能,还得符合奇怪的规则,在实际场景最有可能发生的结果是造成记忆体区段错误而非远端程式攻击。

目前Talos Group并未发现任何针对该漏洞的攻击报告,但预期在业者把相关漏洞的概念性验证程式加至Metasploit渗透工具包之后情况可能就会有所改变。

漏洞危害:该漏洞造成了远程代码执行,攻击者可以利用此漏洞获取系统的完全控制权。

思科的安全情报研究团队Talos Group指出,Qualys日前所揭露的GHOST漏洞允许骇客自远端执行任意程式,虽然是个重大漏洞,但并没那么可怕。

参考来源

Glibc出高危漏洞影响大量应用和设备

2016年3月消息,研究人员在一个广泛使用的开源核心基础库中发现了一个潜在具有灾难性的漏洞,可能导致数以千计的应用和设备易被攻击和被攻击者完全控制。漏洞是在2008年引入到GNU C 函数库(GNU C Library,简称glibc)中的,与 getaddrinfo() 函数有关,影响glibc 2.9之后的所有版本,广泛使用的工具如secure shell、sudo和curl都受影响。Glibc 是提供系统调用和基本函数的 C 库,比如open, malloc, printf等等,所有动态连接的程序都要用到它。

glibc 是一套开源的C运行时库,被数以千计的应用使用,包含在大部分Linux发行版中,也被路由器等设备使用。getaddrinfo() 执行DNS域名查询任务,它包含了一个缓冲溢出bug,允许攻击者远程执行恶意代码。漏洞可以通过设备或应用查询攻击者控制的域名或DNS服务器时被利 用。glibc维护者已经释出了修正。但很多包含该漏洞的应用或设备未必能及时打上补丁。

The buffer overflow occurs in the function send_dg (UDP) and send_vc (TCP) for the NSS module libnss_dns.so.2 when calling getaddrinfo with AF_UNSPEC family and in some cases also with AF_INET6 before the fix in commit 8479f23a (only use gethostbyname4_r if PF_UNSPEC).

The use of AF_UNSPEC triggers the low-level resolver code to send out two parallel queries for A and AAAA. A mismanagement of the buffers used for those queries could result in the response writing beyond the alloca allocated buffer created by __res_nquery.

紧接着 Glibc 2.23 发布了,该版本修复了重大的网络安全问题,新版本的完整改进记录请看这里

Glibc 安全补丁引起更严重的漏洞

2021年8月中旬消息,在2021年6月初,被广泛使用的 GNU C Library (glibc) 发布补丁修复了一个相对较小的安全漏洞(CVE-2021-33574)。修复安全问题本应是一件好事,但不幸的是,这个安全补丁引入了一个新的且更严重的漏洞(CVE-2021-38604)。

红帽软件工程师 Siddhesh Poyarekar 表示,如果攻击者想利用最初的安全漏洞来发起最小的攻击,他需要许多先决条件才可以利用漏洞来使程序崩溃。尽管如此,既然发现了安全漏洞就需要解决。

然而 glibc 在打上修复此安全漏洞的补丁后,引起了更严重且更容易被利用的漏洞。在检查补丁时,来自 CloudLinux TuxCare 团队的 Nikita Popov 发现了问题,新的漏洞有可能导致在库内出现触发段错误 (segmentation fault) 的情况,从而导致任何使用 glibc 库的程序崩溃,产生拒绝服务 (DoS) 问题。更重要的是,这个漏洞比旧的漏洞更容易触发。

红帽在其通用漏洞评分系统(CVSS) 中给这个漏洞打了 7.5 分,此分数已经属于“高分”,意味着使用该漏洞的攻击很容易构建并且不需要特权。此漏洞因上游的修复补丁而被引入,尤其是 mq_notify.c 文件:
@@ -133,8 +133,11 @@ helper_thread (void *arg)
            (void) __pthread_barrier_wait (&notify_barrier);
        }
      else if (data.raw[NOTIFY_COOKIE_LEN - 1] == NOTIFY_REMOVED)
-       /* The only state we keep is the copy of the thread attributes.  */
-       free (data.attr);
+       {
+         /* The only state we keep is the copy of the thread attributes.  */
+         pthread_attr_destroy (data.attr);
+         free (data.attr);
+       }

Nikita Popov 在执行“将 CVE-2021-33574 的安全补丁移植到所支持的发行版的常规程序”时发现了这个问题,他发现在某些情况下可以传递空指针。他认为glibc 提供了主要的系统原语 (system primitives),并与大多数其他 Linux 应用程序相关联,包括其他语言编译器和解释器。它是系统中仅次于内核的第二个最重要的组件,所以 glibc 如果出现问题会造成非常大的影响。

目前关于此漏洞 (CVE-2021-38604),以及针对它的修复补丁已经提交给 glibc 开发团队,并已整合至 glibc 库。此外一个新的测试已经提交至 glibc 的自动测试套件,以发现这种情况并防止它在未来再次发生。glibc 开发团队建议使用者升级到最新的 glibc 2.34 或更高的稳定版本。

Glibc 动态加载器存在严重本地提权漏洞

Glibc 的动态加载器是 glibc 的重要组成部分,负责准备和运行程序。当程序启动时,该加载器首先检查该程序以确定其所需的共享库。然后它搜索这些库,将它们加载到内存中,并在运行时将它们与可执行文件链接。在此过程中,动态加载器解析符号引用,例如函数和变量引用,确保为程序的执行做好一切准备。鉴于其作用,动态加载器对安全性高度敏感,因为当本地用户启动 set-user-ID 或 set-group-ID 程序时,其代码会提权来运行。GLIBC_TUNABLES 环境变量旨在微调和优化与 glibc 相关的应用程序,是开发者和系统管理员的必备工具。它的滥用会广泛影响系统性能、可靠性和安全性。

2023年10月官方检测 Glibc ld.so 本地权限提升漏洞(CVE-2023-4911):该漏洞是由于GNU C库的动态加载器 ld.so 在处理GLIBC_TUNABLES 环境变量时存在缓冲区溢出漏洞,可能允许本地攻击者在运行具有SUID权限的二进制文件时通过使用恶意的 GLIBC_TUNABLES 环境变量来提升系统权限。影响glibc的版本介于2.34与2.38之间(含)。

A buffer overflow was discovered in the GNU C Library's dynamic loader ld.so while processing the GLIBC_TUNABLES environment variable. This issue could allow a local attacker to use maliciously crafted GLIBC_TUNABLES environment variables when launching binaries with SUID permission to execute code with elevated privileges. which 2.34 <= glibc <= 2.38.

Glibc 动态加载器 (Dynamic Loader) 的一个严重漏洞被公开,攻击者获取本地用户 (local users) 身份后,利用该漏洞制造缓冲区溢出,即可获得完整 root 权限。攻击者使用由 ld.so 动态加载器制作的 GLIBC_TUNABLES 环境变量来触发漏洞,然后通过 SUID 权限安装文件时,能以 root 权限执行任意代码。受影响的发行版本有:
Fedora 37,38;
Ubuntu 22.04,23.04;
Debian 12,13;

glibc Fedora 37 < 2.36-14.fc37
glibc bullseye < 2.31-13+deb11u7
glibc bookworm < 2.36-9+deb12u3
glibc (unstable) < 2.37-12

修复建议:目前官方已有可更新版本,建议受影响用户参考以下链接升级至最新版本。

该漏洞最早由 Qualys 报告,被命名为 Looney Tunables,追踪编号为 CVE-2023-4911。据称过去两年发布的 Linux 发行版均受存在 Looney Tunables 漏洞,例如 Ubuntu 22.04 LTS、23.04、Fedora 38 以及其他容易受到此本地提权漏洞影响的发行版。漏洞曝光后,独立安全研究员 Peter Geissler (blasty) 很快就发布了 PoC 代码,确认可以攻击 Linux 发行版:RedHatDebian

参考链接1参考链接2