
أبحاث أمنية على Liferay CE 7.0.3 GA4: إعادة إنتاج كاملة لثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) قبل المصادقة بصلاحيات الجذر (root) ضمن فئة CVE-2020-7961، بالإضافة إلى 16 اكتشافًا آخر — أكثر من 8 منها بدون CVE معروف. مطاردة حلقية وكيلة (Agentic loop-hunt): 25 مولّدًا، و22 محكّمًا، و9 أدوات تحقق حية على Docker. يتضمن سلسلة أدلة وفاحصًا شاملاً.
مراجعة أمنية لـ Liferay Portal CE 7.0.3 GA4 (وسم git 7.0.3-ga4، الالتزام
b2d7cc68a) نُفذت بمنهجية RAPTOR loop-hunt:
استطلاع حتمي → 25 وكيل توليد معزول يقرؤون المصدر الخام → 22 وكيل حكم مستقل
يدحضون من المصدر الخام → 9 مدقّقين مباشرين يهاجمون نسخة GA4 حقيقية في Docker.
العنوان الرئيسي: RCE غير مصادَق عليه بصلاحيات
rootأُعيد إنتاجه من البداية إلى النهاية (من فئة CVE-2020-7961)، بالإضافة إلى 8 ثغرات إضافية تم التحقق منها مباشرةً — عدة منها بدون CVE معروف.
⚠️ قانوني/أخلاقي: كل ما هو هنا يستهدف نسخة اختبار مستضافة ذاتيًا. Liferay CE 7.0 في نهاية العمر (آخر إصدار 7.0.6 GA7، 2018)؛ هذه المشكلات غير مُصححة من upstream. استخدم هذه المواد فقط ضد أنظمة تملكها أو صرّح لك باختبارها صراحةً.
الحالة: ✅ تم التحقق منها مباشرةً على نسخة Docker GA4 · 🔬 مؤكَّدة بالكود (وكيل حكم مستقل أعاد اشتقاق المسار الكامل من المصدر الخام) · 🧪 تتطلب إعدادات/مشروطة بالتهيئة.
| ID | الاكتشاف | الخطورة | المصادقة | الحالة | الدليل |
|---|---|---|---|---|---|
| F-1 | تجاوز النوع في JSONWS → إنشاء فئات عشوائي + setters → RCE بصلاحيات root (c3p0 HexAsciiSerializedMap → ObjectInputStream → كتابة ملف عبر AspectJWeaver → JSP) | حرجة | لا شيء | ✅ | verified/f1-jsonws-deser-rce.md |
| F-2 | تلميح javaClass في jabsorb عبر /poller/* → إنشاء فئات عشوائي + حقن حقول، قبل التحقق من userId | عالية (محتملة) | أي حساب (التسجيل الذاتي مفعّل افتراضيًا) | ✅ sink مؤكَّد / ذراع RCE مفتوح | verified/F-2-poller.md |
| F-4 | XML-RPC pingback.ping جلب-قبل-التحقق → SSRF أعمى + استشعار منافذ داخلي (وصل إلى Gogo shell على 127.0.0.1:11311) | متوسطة | لا شيء | ✅ | verified/f4-xmlrpc-pingback-ssrf.md |
| F-5 | SyncDownloadServlet versionId IDOR → قراءة أي إصدار من ملفات DL (cross-site، لا فحص VIEW على الكائن المُمرَّر) | عالية | لا شيء (عبر جزء قابل للعرض من الضيوف) | ✅ | verified/F-5.md |
| F-6 | محرك قوالب XSL يتجاهل العزل (secureProcessing=false، restricted مُسقَط) → document() SSRF وتنفيذ أوامر XSLTC rt:exec | حرجة | مؤلف قالب الموقع | ✅ | verified/F-6-F-7-template-engines.md |
| F-7 | قوالب Velocity و FreeMarker المقيدة تكشف propsUtil / saxReaderUtil الخام → كشف خصائص البوابة + ملفات file:// للضيوف | عالية | مؤلف القالب | ✅ | verified/F-6-F-7-template-engines.md |
| F-8 | IDOR في جدول Image_ عبر /image/*?img_id=N — لا رمز، فحوصات نطاق البادئة تُلتفت بتبديل البادئة، معرّفات تسلسلية قابلة للتعداد | متوسطة | لا شيء | ✅ | verified/f-8-image-idor.md |
| F-11 | SimpleCaptcha = PIN من 4 أرقام، لا يُبطل أبدًا عند التخمينات الخاطئة، عداد الضيوف لا يزداد أبدًا → كسر عند ~5k طلب | متوسطة | لا شيء | ✅ | verified/f11-f12-captcha-reminder.md |
| F-12 | نسيان كلمة المرور: تعداد مستخدمين + oracle لإجابة سؤال التذكير بدون كابتشا (التفاف بجلسة جديدة)؛ إجابة فارغة تُطلق تذكرة إعادة تعيين حقيقية للحسابات التي ليس لديها سؤال أمان | متوسطة-عالية | لا شيء | ✅ | verified/f11-f12-captcha-reminder.md |
| F-13 | تجاوز معاملات الطلب في Web Content Display (groupId/articleId/ddmTemplateKey) → قراءة cross-site لمقالات غير مخصصة للضيوف (الافتراضي journal.article.view.permission.check.enabled=false) | عالية | لا شيء (يتطلب وجود WCD على صفحة ضيف) | ✅ | verified/F-13-wcd-param-override.md |
| F-3 | موسّع OSGi axis يتخطى ServiceAccessPolicy / تعليم الوصول عن بُعد على خدمات SOAP للوحدات | متوسطة (عالية مع وحدة WSDD) | لا شيء | 🔬 | judge/axis-spring-remoting.md |
| F-9 | OpenID يربط حساب الضحية بهوية OpenID الخاصة بالمهاجم قبل التحقق من التأكيد → الاستيلاء على الحساب | عالية | لا شيء (OpenID مفعّل، غير افتراضي) | 🔬 🧪 | judge/sso-autologin.md |
| F-10 | TunnelServlet readObject محمي فقط بقائمة سوداء للفئات؛ أدوات ROME/JdbcRowSetImpl/c3p0/AspectJWeaver على classpath | حرجة محتملة | نظير موثوق (سر مشترك + مضيف مسموح) | ✅ الحواجز تصمد قبل المصادقة | verified/f10-f20-tunnel-auth-pipeline.md |
| F-14 | TokenAutoLogin يثق في ترويسة SM_USER مجردة (لا تحقق، لا قائمة سماح IP) | متوسطة | لا شيء (SSO بالرمز مفعّل، غير افتراضي) | 🔬 🧪 | judge/sso-autologin.md |
| F-15 | استيراد LAR من مدير الموقع يُهرب RolesAdminPortletDataHandler → حذف جماعي لأدوار الشركة / مسح الأذونات | متوسطة | مدير الموقع | 🔬 | judge/export-import-lar.md |
| F-16 | OpenSocial (ليس في الحزمة الافتراضية): makeRequest SSRF قبل المصادقة، /gadgets/ifr JavaScript على مستوى الأصل، رموز أمنية قابلة للتزوير → انتحال شخصية، XSS مخزّنة | عالية ×4 | لا شيء / عضو الموقع | 🔬 (مشروط بالنشر) | judge/opensocial-shindig.md |
| F-17 | WSRP (ليس في الحزمة الافتراضية): ProxyServlet SSRF قبل المصادقة؛ نقطة نهاية markup → عرض portlet عشوائي + استمرارية typeSettings للتخطيط | متوسطة | لا شيء | 🔬 (مشروط بالنشر) | judge/wsrp.md |
القائمة الكاملة المنسقة مع حالات الرفض: FINDINGS.md · التقرير السردي: REPORT.md
كتالوج يضم ~50 مشكلة معروفة في Liferay 7.0.x استُخدم كأساس معرفي سابق: PRIOR-ART.md
(OSV [email protected]، مسح NVD، نصائح Code White / CERT-EU).