近日有关 Glibc 动态加载器 (Dynamic Loader) 的一个严重漏洞被公开,攻击者获取本地用户 (local users) 身份后,利用该漏洞制造缓冲区溢出,即可获得完整 root 权限。
据介绍,攻击者使用由 ld.so 动态加载器制作的 GLIBC_TUNABLES 环境变量来触发漏洞,然后通过 SUID 权限安装文件时,能以 root 权限执行任意代码。
Glibc 即 GNU C Library,是 GNU 系统以及大多数采用 Linux 内核的系统中的 C 运行库。Glibc 是 Linux 系统中最底层的 API,几乎其它任何运行库都会依赖于 Glibc。
它定义了典型程序所需的系统调用和其他基本功能,例如 open、malloc、printf、exit 等。 Glibc 的动态加载器是 glibc 的重要组成部分,负责准备和运行程序。当程序启动时,该加载器首先检查该程序以确定其所需的共享库。然后它搜索这些库,将它们加载到内存中,并在运行时将它们与可执行文件链接。
在此过程中,动态加载器解析符号引用,例如函数和变量引用,确保为程序的执行做好一切准备。鉴于其作用,动态加载器对安全性高度敏感,因为当本地用户启动 set-user-ID 或 set-group-ID 程序时,其代码会提权来运行。
该漏洞最早由 Qualys 报告,被命名为 Looney Tunables,追踪编号为 CVE-2023-4911。据称过去两年发布的 Linux 发行版均受存在 Looney Tunables 漏洞 ,例如 Ubuntu 22.04 LTS、23.04、Fedora 38 以及其他容易受到此本地提权漏洞影响的发行版。
漏洞曝光后,独立安全研究员 Peter Geissler (blasty) 很快就发布了 PoC 代码,确认可以攻击 Linux 发行版。
上文提到的 GLIBC_TUNABLES 环境变量旨在微调和优化与 glibc 相关的应用程序,是开发者和系统管理员的必备工具。它的滥用会广泛影响系统性能、可靠性和安全性。