GNU C 库(glibc)是 GNU 系统中的 C 库,也是基于 Linux 的系统不可或缺的组成部分。glibc 核心定义了程序所需的基本功能,包括系统调用以及 open、malloc、printf 和 exit 等常用函数。动态加载器作为 glibc 的关键组件,通过管理共享库并在运行时进行链接,在程序的准备和执行中发挥着重要作用。
GLIBC_TUNABLES 环境变量旨在让用户无需重新编译即可在运行时修改 glibc 的行为。它提供了一种调整性能和行为参数的方法,从而影响应用程序的启动。
动态加载器在处理 GLIBC_TUNABLES 时存在缓冲区溢出漏洞,构成了严重的安全风险。利用该漏洞可使本地攻击者获得提权,甚至可能完全获取 root 权限。在 Fedora、Ubuntu 和 Debian 等主要发行版上成功利用该漏洞,突显了其严重性和广泛影响。
滥用或利用此漏洞可能会影响系统的性能、可靠性和安全性。虽然漏洞利用细节尚未公开,但风险已迫在眉睫,因为缓冲区溢出可能迅速演变为仅数据攻击。使用 glibc 的流行 Linux 发行版可能都易受影响,这强调了及时知晓并采取缓解措施的必要性。
分配日期:2023 年 10 月 3 日
类型:本地权限提升
受影响版本:glibc 2.34 及更高版本
受影响发行版:RHEL、Ubuntu、Fedora、Debian、Amazon Linux、Gentoo 以及其他使用 glibc 的发行版 缓解措施
升级:及时应用 glibc 更新。
监控:持续关注安全公告。
审查:评估应用程序中 GLIBC_TUNABLES 的使用情况。
审计:检查系统日志中是否存在可疑活动。
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 util-linux 2.37.2 中的 su ASLR 已开启
使用 Ubuntu(22.04.1 版本)iso 创建虚拟机
成功安装后,我们不需要更新任何内容,但需要安装 git 和 GNU Binutils 软件包,因为系统中未安装这些工具,当你编译漏洞利用的 python 脚本时会遇到错误。
使用以下命令:
$ sudo apt install git
$ sudo apt install binutils
检查系统是否存在漏洞
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
如果输出
Segmentation fault (core dumped),则说明存在漏洞。
检查动态链接器/加载器的版本,通常与 GNU C 库(glibc)相关
$ ldd --version
输出将给出 GLIBC 的版本
ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
现在我们知道我们的机器存在漏洞,并已准备好提升 root 权限
注意:我们不应在机器上安装 gcc,如果安装则会失去漏洞,因此脚本将无法工作。
由于我们没有安装 gcc,并且需要在宿主机上编译 C 程序,然后将其导入到客户机中。
我们可以使用以下命令编译 C 程序
$ gcc exploit.c -o (输出名称)
在导入 C 程序的输出文件后,还需要导入 python(genlib.py)脚本。
现在编译 python 脚本
$ python3 genlib.py
编译后会创建一个名为 '"' 的文件夹。
我们将在 /tmp 文件夹中执行此操作,以便用户可以运行脚本和程序
最后,我们将执行程序以提升 root 权限
$ ./(程序名称)
这需要一些时间,然后会获得 root shell。
安全赋能,而非利用!
参考资料: