
دراسة قابلة لإعادة الإنتاج لـ CVE-2024-36401: RCE غير مصادق عليه في GeoServer عبر حقن تقييم JXPath. يتضمن تقريرًا فنيًا واستغلالًا/مدققًا عمليًا وبيئة Docker توضح الخلل في الحالات الضعيفة مقابل المصححة.
دراسة كاملة وقابلة لإعادة الإنتاج لثغرة CVE-2024-36401، وهي خلل في تنفيذ التعليمات البرمجية عن بُعد دون مصادقة في GeoServer — الخادم مفتوح المصدر الأكثر انتشارًا للبيانات الجغرافية المكانية. يعود السبب الجذري للخلل إلى حقن التقييم (eval injection): عبر معاملات معايير OGC، يمرّر GeoServer أسماءَ خصائص يتحكم بها المهاجم إلى GeoTools، حيث تقوم مكتبة Apache Commons JXPath بتقييمها كتعبيرات XPath ويمكنها، بحكم تصميمها، استدعاء أي دوال Java عشوائية عبر الانعكاس (reflection). لذلك فإن طلبًا دون مصادقة مثل exec(java.lang.Runtime.getRuntime(),'id') ينفّذ أوامر على المضيف.
يحتوي هذا المستودع على التقرير الفني، وأداة استغلال/تحقق عاملة، وبيئة Docker بأمر واحد توضح تنفيذ التعليمات البرمجية عن بُعد على نسخة قابلة للاستغلال وتُظهر فشل نفس الاستغلال على النسخة المصحّحة.
مشروع تعليمي. أُعدّ لمقرر جامعي (خصوصية البيانات وأمنها، LUISS DASMA). كل شيء يعمل فقط ضد حاويات محلية ومعزولة — انظر الاستخدام المسؤول.
| الحقل | القيمة |
|---|---|
| CVE (GeoServer) | CVE-2024-36401 |
| السبب الجذري (GeoTools) | CVE-2024-36404 |
| النوع | تنفيذ تعليمات برمجية عن بُعد دون مصادقة |
| CWE | CWE-95، حقن تقييم (Eval Injection) |
| CVSS v3.1 | 9.8 حرِج (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| المتأثر | GeoServer < 2.25.2 / GeoTools < 31.2 (والفروع الأقدم) |
| CISA KEV | نعم (15 يوليو 2024) |
| الإصدارات المدروسة | القابلة للاستغلال 2.25.1، المصحّحة 2.25.2 |
.
├── report/
│ ├── report.pdf # التقرير الفني الكامل (اقرأ هذا أولًا)
│ ├── report.md # مصدر التقرير (Pandoc/XeLaTeX)
│ └── images/ # الأشكال ولقطات الشاشة
├── docker/
│ ├── vulnerable/Dockerfile # GeoServer 2.25.1 (قابل للاستغلال)
│ └── patched/Dockerfile # GeoServer 2.25.2 (مصحّح)
├── docker-compose.yml # النسخة القابلة للاستغلال على :8080، والمصحّحة على :8081
├── exploit/
│ ├── exploit.py # الاستغلال + أداة تحقق من القابلية للاستغلال/التصحيح (stdlib فقط)
│ ├── exploit.sh # PoC يعتمد على curl (نسختا GET وPOST)
│ ├── payloads.md # كتالوج الحمولات حسب نقطة نهاية OGC
│ └── output/ # سجلات الإثبات ونسخ الجلسات الملتقطة
└── run-reproduction.sh # أمر واحد: بناء كلتيهما + استغلالهما + جمع الأدلة
المتطلبات: تشغيل Docker Desktop و python3 و curl.
# بناء الحاويتين، تشغيل الاستغلال ضد كل منهما، وجمع الأدلة
chmod +x run-reproduction.sh
./run-reproduction.sh
أو خطوة بخطوة:
docker compose up -d --build # النسخة القابلة للاستغلال على :8080، والمصحّحة على :8081
# القابلة للاستغلال (متوقع: VULNERABLE، تأخير ~8 ثوانٍ)
python3 exploit/exploit.py -t http://localhost:8080/geoserver --label vuln -o exploit/output
# المصحّحة (متوقع: PATCHED، رفض فوري)
python3 exploit/exploit.py -t http://localhost:8081/geoserver --label patched -o exploit/output
docker compose down # عند الانتهاء
يستخدم اختباران مستقلان لجعل النتيجة غير قابلة للالتباس:
java.lang.Thread.sleep(8000) يحجب الخيط الذي يقيّم تعبير XPath، لذا يتأخر استجابة HTTP نحو 8 ثوانٍ — يمكن قياسه من العميل دون الحاجة إلى الوصول إلى الحاوية. وهو نفس مؤشر الاختبار (canary) المستخدم في اختبارات الإصلاح الرسمية.exec(java.lang.Runtime.getRuntime(),'touch /tmp/<marker>') ينشئ ملفًا داخل الحاوية، يمكن التحقق منه بواسطة docker exec.على النسخة القابلة للاستغلال، فإن إرسال الحمولة يدويًا يعيد ClassCastException على ProcessImpl — أي أن JVM نفّذت Runtime.exec ثم فشلت في استخدام كائن Process الناتج كخاصية. هذا الاستثناء هو دليل التنفيذ:

يُطبّق إصدار GeoTools e53e5170 (في GeoServer
2.25.2 و 2.24.4 و 2.23.6 و 2.22.6) دفاعًا متعمّقًا على شقّي الخلل معًا:
JXPathUtils.newSafeContext(...) في تثبيت FunctionLibrary فارغ، فلا يعود بإمكان JXPath حلّ exec/Thread.sleep كدوال — فيبقى النص مجرد اسم خاصية عادي.FeaturePropertyAccessorFactory الآن أيضًا من SimpleFeatureType، بحيث لا تصل المعالم البسيطة إلى المُمرّر الضعيف.على النسخة المصحّحة، يعيد نفس الحمولة No such attribute: ... ولا يُنفَّذ شيء.
التفاصيل الكاملة — الكود المتأثر مع مراجع الملفات والأسطر، والاستغلال، وفرق التصحيح، وإعادة الإنتاج جنبًا إلى جنب — موجودة في report/report.pdf.
هذه الثغرة عامة، وقد تم تصحيحها منذ أكثر من 18 شهرًا، وهي مدرجة في كتالوج CISA للثغرات المستغلة المعروفة، ولها أدوات PoC عامة (Vulhub و Nuclei و Metasploit). الكود هنا يستهدف localhost فقط وحاويات الدراسة المعزولة في هذا المستودع. لا تستخدمه ضد أنظمة لا تملكها أو غير مخوّل باختبارها صراحةً.
MIT © 2026 Daniele Giovanardi
Daniele Giovanardi — علوم البيانات والإدارة (DASMA)، LUISS Guido Carli. أعمال مقرر خصوصية البيانات وأمنها.