glibc 漏洞为什么要重视
glibc 是最底层的基础库,它的漏洞(例如 Looney Tunables 系列的 CVE-2023-4911)多为本地提权:任何已登录的普通用户都能利用。核查方式是确认 glibc 版本是否达到发行版给出的修复版本,同样不能只看主版本号。容器镜像里也带 glibc,修宿主的时候别忘了镜像。
基本信息
| 适用平台 | Linux |
|---|---|
| 风险等级 | 高 |
| 基线要求 | glibc 为发行版给出的修复版本 |
| 相关组件 | glibc 与动态加载器 ld.so |
| 核查命令 | ldd --version、getconf GNU_LIBC_VERSION |
| 延伸场景 | 容器镜像的基础层同样需要核查 |
典型使用场景
- 收到 glibc 本地提权漏洞通告后的自查
- 多用户主机与跳板机优先修复
- 容器基础镜像的 glibc 版本核查与重建
- 确认静态链接程序是否需要单独处理
- 更新后检查长期运行的服务是否已重启
- 升级前后做中间件兼容性评估
版本核查
版本核查
ldd --version | head -1 # 直接读取 glibc 版本
getconf GNU_LIBC_VERSION # 另一种读取方式,用于交叉验证
rpm -q glibc 2>/dev/null # RHEL 系的包版本
dpkg -l libc6 2>/dev/null | tail -2 # Debian 系的包版本
ls -l /lib64/ld-linux-x86-64.so.2 # 动态加载器的路径与时间戳更新与生效
更新与生效
sudo dnf update -y glibc 2>/dev/null || sudo apt-get install --only-upgrade -y libc6 # 升级到修复版本
ldd --version | head -1 # 升级后复核版本
sudo dnf needs-restarting -r 2>/dev/null || cat /var/run/reboot-required 2>/dev/null # 查看重启待办输出逐列读法
| 检查项 | 含义 | 注意点 |
|---|---|---|
| ldd --version | 当前 glibc 版本 | 与公告修复版本比对 |
| GNU_LIBC_VERSION | 交叉验证的版本值 | 两个来源应当一致 |
| libc6 或 glibc 包版本 | 包管理器记录的版本 | 发行版按包版本发补丁 |
| 动态加载器 | ld.so 文件与时间戳 | 更新后时间戳应发生变化 |
| 重启待办 | 仍在使用旧库的进程 | 服务需重启才生效 |
glibc 更新后长期运行的服务仍在用内存里的旧库:要按重启待办清单统一安排重启,否则漏洞照旧存在。
静态链接的程序不受 libc 升级影响:这类程序要单独维护清单,按各自的更新方式处理。
升级 glibc 属于高风险变更:建议放在变更窗口内执行并准备回滚方案,尤其是承载大量长连接服务的机器。