ثغرة RCE في لوحة Pterodactyl عبر الإعدادات المحلية (CVE-2025-49132) — إثبات مفهوم تعليمي
للاستخدام المصرح به وللتعلم الدفاعي فقط.
هذا المستودع مخصص للبيئات المعملية الخاضعة للتحكم (مثل إعدادات بأسلوب CTF/HTB) حيث تملك الهدف أو لديك* إذن كتابي صريح لاختباره.
السياق
يحتوي هذا المستودع على إثبات مفهوم تعليمي بلغة بايثون (pterodactyl_rce.py) لثغرة أمنية واقعية تؤثر على إصدارات Pterodactyl Panel الأقدم من v1.11.11. في ظل الإعدادات الضعيفة، قد يتمكن مهاجم غير مصادق من تحقيق تنفيذ الأوامر عن بُعد عبر نقطة النهاية /locales/locale.json بسبب المعالجة غير السليمة لمعاملَي locale و.
namespace
يستهدف هذا البديل من إثبات المفهوم البيئات التي يكون فيها PHP-PEAR مثبتًا، وقد تم بناؤه/التحقق منه على آلة Hack The Box المتقاعدة Pterodactyl: https://app.hackthebox.com/machines/Pterodactyl. قد يعمل أيضًا في بيئات معملية أخرى تتوفر فيها نفس الشروط.
مرجع الثغرة
الاستشارة الأمنية على GitHub: GHSA-24wv-6c99-f843 (CVE-2025-49132)
المتأثر: Pterodactyl Panel < 1.11.11
تم الإصلاح في: v1.11.11 (الالتزام بالتصحيح 24c82b0…)
الفكرة العامة (كيف يعمل إثبات المفهوم)
على مستوى عالٍ، يربط إثبات المفهوم الخطوات التالية:
ينشئ حمولة ELF عكسية عبر TCP لـ Linux x64 باستخدام msfvenom.
يقدّم ملف ELF باستخدام خادم HTTP (طلب واحد ثم يخرج).
يستغل المعالجة الضعيفة لنقطة النهاية /locales/locale.json لكتابة "مشغّل" PHP داخل /tmp (عبر حيلة PEAR pearcmd config-create).
يشغّل المشغّل عبر نقطة نهاية اللغات بحيث يقوم بـ:
تنزيل ملف ELF إلى /tmp,
جعله قابلاً للتنفيذ,
تنفيذه للاتصال مرة أخرى بالمستمع الخاص بك.
يستخدم السكربت عميل HTTP خامًا بدلاً من curl في خطوة "الرفع" لأن بعض الأدوات قد تعمل على تطبيع أو ترميز الأحرف بطريقة تكسر الطلب المُصمَّم.
ملاحظة: يبقى ملف README هذا عمدًا على مستوى دفاعي/تعليمي. استخدم الكود فقط في البيئات المسموح لك باختبارها.
المتطلبات (محليًا)
Python 3.10+ (تم الاختبار باستخدام المكتبة القياسية فقط)
توفّر msfvenom في $PATH (إطار عمل Metasploit)
nc (netcat) إذا كنت تريد أن يبدأ إثبات المفهوم مستمعًا تلقائيًا
وصول عبر الشبكة بين جهاز مختبرك ومثيل Pterodactyl في مختبرك
الإعداد
يتوقع السكربت حاليًا اسم مضيف HTB للوحة في الكود المصدري:
root@kitploit:~
host = "panel.pterodactyl.htb"
بالإضافة إلى ذلك، تم تعيين المسار المحدد يدويًا إلى PHP-PEAR على النحو التالي: ../../../../../usr/share/php/PEAR. إذا كنت تختبر هذا خارج بيئة Pterodactyl، فستحتاج إلى تعديل هذا المسار وفقًا لإعداداتك المحلية.
الاستخدام (مختبر خاضع للتحكم فقط)
1) تشغيل أساسي (المستمع التلقائي مفعّل)
root@kitploit:~
python3 pterodactyl_rce.py <LHOST> <LPORT>
<LHOST>: عنوان IP لاستقبال الاتصال الذي يمكن لخادم المختبر الوصول إليه
ينشئ حمولة ELF (اسم ملف عشوائي مثل shell_ab12cd34)
يبدأ خادم HTTP لطلب واحد على :8080
ينشئ مشغّل PHP داخل /tmp/<random>.php
يشغّل المشغّل
يزيل ملف ELF المحلي بعد التشغيل
يعرض نصيحة لترقية الصدفة (PTY)
لقطة شاشة للاستغلال الناجح:
المشكلات المعروفة / ملاحظات المختبر
عدم استقرار المختبر: قد يكون الجهاز/الخدمة المستهدفة غير مستقرين (مهلات زمنية، أخطاء 5xx متقطعة، تنفيذ متأخر). إذا فشل التشغيل، أعد المحاولة بعد توقف قصير.
إعادة استخدام حمولة قديمة: قد تقوم البيئة أحيانًا بتشغيل ملف قديم تم رفعه/تجهيزه. يقوم السكربت بتنظيف ملف محلي فقط على جهاز المهاجم
ولكنه لا يلمس الملفات الموجودة في مجلد /tmp/ على الجهاز.
الحلول:
أعد التشغيل باسم حمولة عشوائية جديدة (السلوك الافتراضي في هذا السكربت).
غيّر المنفذ الأولي لخادم http.server من 8080 إلى منفذ آخر.
غيّر منفذ المستمع (مثل 4444 → 5555) وأعد إنشاء الحمولة.
تأكد من أن خادم HTTP يقدّم الملف الحالي (أوقف أي خادم/مستمع سابق).
إذا كان لديك وصول، قم بإزالة ملفات /tmp/<name>.php القديمة يدويًا على الهدف؛ بخلاف ذلك، انتظر فترة ثم أعد المحاولة.
إرشادات دفاعية (ماذا تصلح / كيف تكتشف)
التصحيح / التخفيف
قم بترقية Pterodactyl Panel إلى الإصدار v1.11.11 أو أحدث.
لا يوجد حل بديل داخل التطبيق سوى التصحيح؛ يمكنك حظر نقطة النهاية /locales/locale.json على مستوى خادم الويب، لكن ذلك قد يعطل ميزات الترجمة.
أفكار للكشف
ابحث عن طلبات مشبوهة مثل:
طلبات إلى /locales/locale.json تحتوي على تسلسلات اجتياز غير معتادة في locale=
قيم namespace= غريبة (أسماء غير متوقعة، سلاسل طويلة، أحرف غريبة)
ظهور مفاجئ لملفات غير متوقعة في /tmp/ على مضيف اللوحة
اربط سجلات الويب مع:
عمليات جديدة تطلقها مستخدم www / PHP-FPM
اتصالات صادرة إلى وجهات/منافذ غير قياسية
استخدام غير متوقع لأمر curl/wget من مضيف اللوحة
ملاحظات حول الاستخدام المسؤول
لا تفحص أو تختبر المثيلات العامة.
إذا كنت مشغّلًا لمثيل ضعيف، تعامل مع هذا الأمر على أنه حرج وقم بالتصحيح فورًا.
الإقرارات / الشكر
إثبات المفهوم الأصلي:Pterodactyl Panel (< 1.11.11) — تنفيذ الأوامر عن بُعد (RCE) (EDB-ID: 52341, CVE-2025-49132) بواسطة Zen-kun04 https://www.exploit-db.com/exploits/52341
مَن أبلغ / ائتمان الاكتشاف: ينسب الاستشارة الأمنية على GitHub الفضل إلى @azimoff337 للإبلاغ عن GHSA-24wv-6c99-f843 / CVE-2025-49132.
قاعدة بيانات الاستشارات الأمنية على GitHub / عملية CVE: لتتبع ونشر تفاصيل الثغرة.
Hack The Box (HTB): تم بناء/التحقق من إثبات المفهوم هذا في بيئة مختبرية بأسلوب HTB خاضعة للتحكم لأغراض التعلم والبحث الدفاعي. لا توجد حرق للأحداث (spoilers) لمحتوى HTB النشط.