
Needrestart 是 Linux 系统上广泛使用的工具(默认安装在许多 Ubuntu 版本中),它在软件更新后检查是否有服务或系统本身需要重启。通过分析正在运行的进程,它判断这些进程是否使用了更新后的库,或者是否需要重启以使更改生效。
当 needrestart 检测到进程正在运行 Python 解释器时,它从 /proc/[pid]/environ 读取该进程关联的环境变量 PYTHONPATH,然后在启动自己的 Python 解释器进行分析之前设置该变量。
如果原始进程属于本地攻击者,攻击者可以操纵 PYTHONPATH 指向恶意库。
因此,当 needrestart 以 root 权限运行 Python 解释器并使用被操纵的 PYTHONPATH 时,它会执行攻击者的代码,导致权限提升至 root。
该漏洞仅影响 needrestart 3.8 之前的版本。3.8 及更高版本包含修复程序,可在调用 Python 解释器之前正确清理 PYTHONPATH 等环境变量,防止通过恶意环境操作进行权限提升。
克隆仓库。
在 runner.sh 中,修改用于获取编译后二进制文件的 IP,使其指向你自己的机器。
在攻击者机器上,授予执行权限并运行 binary.sh。
设置 HTTP 服务器:
$ python3 -m http.server
