
مختبر قائم على Docker يعيد إنتاج CVE-2024-31218، وهو ثغرة إنشاء مسؤول PocketBase بدون مصادقة في Webhood، مع PoC والكشف والتحقق من المعالجة.
هذا المشروع عبارة عن مختبر بحث أمني مُتحكَّم فيه لإعادة إنتاج الثغرة الأمنية CVE-2024-31218، وهي ثغرة مصادقة حرجة تؤثر على إصدارات Webhood السابقة للإصدار 0.9.1.
ترتبط الثغرة بإنشاء حساب مسؤول PocketBase دون مصادقة عندما لا يوجد أي حساب مسؤول. قد يتمكن المهاجم القادر على الوصول إلى واجهة API المتأثرة من إنشاء حساب إداري دون مصادقة مسبقة.
الهدف من هذا المختبر هو:
تحذير أمني: هذا المشروع مخصص فقط لبيئة مختبر محلية معزولة. يجب عدم تعريض التطبيق المتأثر للإنترنت العام أو استخدامه ضد أنظمة دون تصريح.
| الحقل | التفاصيل |
|---|
| CVE | CVE-2024-31218 |
| المشروع | Webhood |
| الإصدارات المتأثرة | Webhood <= 0.9.0 |
| الإصدار المُصحَّح | Webhood 0.9.1 |
| الخطورة | حرجة |
| CVSS v3.1 | 9.8 |
| CWE | CWE-306 — غياب المصادقة لوظيفة حرجة |
| ناقل الهجوم | الشبكة |
| تعقيد الهجوم | منخفض |
| الامتيازات المطلوبة | لا شيء |
| تفاعل المستخدم | لا شيء |
| السرية | عالية |
| السلامة | عالية |
| التوافر | عالية |
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
2. وصف الثغرة
تنتج CVE-2024-31218 عن حماية مصادقة غير كافية حول إنشاء المسؤول في تطبيق Webhood/PocketBase المتأثر.
عندما لا يكون هناك حساب مسؤول مُهيَّأ في التطبيق، يمكن الوصول إلى وظيفة إنشاء المسؤول دون مصادقة.
وبالتالي، يمكن للمهاجم القادر على الوصول إلى واجهة API المتأثرة محاولة إنشاء أول حساب مسؤول.
قد يؤدي الاستغلال الناجح إلى وصول إداري إلى التطبيق.
تُصنَّف الثغرة على النحو التالي:
CWE-306: غياب المصادقة لوظيفة حرجة
3. الإصدارات المتأثرة والمُصحَّحة
النطاق المتأثر هو:
Webhood <= 0.9.0
تم إصلاح الثغرة في:
Webhood 0.9.1
لذلك يجب استخدام الإصدار المُرقَّع للتحقق من المعالجة.
4. سطح الهجوم
سطح الهجوم ذو الصلة هو واجهة API الإدارية لـ PocketBase.
تتضمن الوظيفة المتأثرة إنشاء حساب المسؤول.
من الناحية المفاهيمية، يكون مسار الهجوم كالتالي:
Attacker
|
| HTTP request
v
Webhood / PocketBase API
|
| Administrator creation endpoint
v
Admin account creation
|
v
Unauthorized administrative access
لا يتطلب الهجوم جلسة مُصادَق عليها موجودة مسبقًا عند توفر شرط المسؤول الأولي المتأثر.
5. السبب الجذري
السبب الجذري هو فشل في ضوابط المصادقة.
لم تقم وظيفة إنشاء المسؤول بتقييد الوصول بشكل كافٍ عندما لم يكن هناك حساب مسؤول.
يجب أن يضمن الحد الأمني عدم إساءة استخدام الوظائف الإدارية ذات الامتيازات من قبل عميل بعيد غير مُصادَق عليه.
وبالتالي، يمثل السلوك المتأثر غياب فحص مصادقة حول عملية حساسة أمنيًا.
6. بنية المختبر المُتحكَّم فيه
يعيد المختبر إنتاج سلوك واجهة API الإدارية لـ PocketBase
الذي تقوم عليه CVE-2024-31218.
تستخدم بيئة Docker مكوّن PocketBase مباشرةً بدلًا من
الادعاء بتغليف تطبيق Webhood 0.9.0 الكامل.
بنية المختبر هي:
+-------------------------+
| Host Machine |
| |
| PowerShell / Python |
+------------+------------+
|
| 127.0.0.1:8090
v
+-------------------------+
| Docker Container |
| |
| +-------------------+ |
| | PocketBase | |
| | Administrative API| |
| +-------------------+ |
| |
+-------------------------+
الخدمة مرتبطة بـ localhost فقط وليس المقصود تعريضها
للإنترنت العام.
جميع بيانات الاعتماد المستخدمة أثناء إعادة الإنتاج هي بيانات اعتماد مختبرية اصطناعية.
7. بنية المستودع
CVE-2024-31218-WEBHOOD-LAB/
│
├── README.md
│
├── vulnerable/
│ ├── Dockerfile
│ └── docker-compose.yml
│
├── exploit/
│ └── reproduce.py
│
├── detection/
│ └── detect.py
│
├── patched/
│ └── README.md
│
├── evidence/
│ └── README.md
│
└── blog/
└── CVE-2024-31218-Technical-Blog.pdf
8. البيئة المتأثرة
صُمِّمت البيئة المتأثرة لإعادة إنتاج سلوك واجهة API الإدارية
لـ PocketBase المرتبط بـ CVE-2024-31218 في حاوية Docker معزولة.
يستخدم المختبر PocketBase مباشرةً كمكوّن متأثر بدلًا من
الادعاء بإعادة إنتاج تطبيق Webhood 0.9.0 الكامل.
سيقوم إعداد Docker بما يلي:
- بناء بيئة المختبر.
- تشغيل PocketBase محليًا.
- ربط الخدمة بـ localhost.
- إبقاء الخدمة معزولة عن الأنظمة الخارجية.
- توفير بيئة قابلة لإعادة الإنتاج للاختبار.
- السماح لسكربت إعادة الإنتاج بالتفاعل مع واجهة API الإدارية.
يستخدم المختبر الحالي حساب مسؤول اصطناعيًا ولا
يحتوي على بيانات مستخدمين أو بيانات اعتماد حقيقية.
9. منهجية إعادة الإنتاج
إجراء إعادة الإنتاج مخصص فقط للمختبر المحلي.
الخطوة 1 — تشغيل الحاوية المتأثرة
docker compose up --build
الخطوة 2 — التحقق من الخدمة
تأكد من أن خدمة PocketBase المستخدمة للمختبر على مستوى المكوّن تستجيب محليًا.
الخطوة 3 — تنفيذ سكربت إعادة الإنتاج المُتحكَّم فيه
سيقوم سكربت إعادة الإنتاج بإرسال الطلب ذي الصلة إلى النسخة المحلية المتأثرة.
مثال:
python exploit/reproduce.py
الخطوة 4 — ملاحظة الاستجابة
يجب أن توضح الاستجابة ما إذا كان التطبيق يقبل طلب إنشاء المسؤول دون مصادقة.
الخطوة 5 — التحقق من الحالة الناتجة
يجب أن يتحقق المختبر مما إذا تم إنشاء حساب مسؤول.
يجب عدم استخدام أي هدف خارجي على الإطلاق.
10. الاكتشاف
يجب أن يحدد الاكتشاف المؤشرات المرتبطة بمحاولات إنشاء المسؤول غير المصرح بها.
تشمل المؤشرات المحتملة:
طلبات إلى وظيفة إنشاء المسؤول
طلبات غير مُصادَق عليها إلى نقاط النهاية الإدارية
إنشاء غير متوقع لأول حساب مسؤول
طلبات HTTP صادرة من عميل غير متوقع
محاولات متكررة لإنشاء المسؤول
إنشاء حساب إداري فورًا بعد تهيئة التطبيق
يقع سكربت الاكتشاف في:
detection/detect.py
11. المعالجة
المعالجة الأساسية هي ترقية Webhood إلى الإصدار المُصحَّح:
Webhood 0.9.1
يجب عدم استخدام الإصدار المتأثر في بيئة الإنتاج.
من الحلول الموثقة تقييد الوصول إلى وظيفة واجهة API الإدارية المتأثرة عندما لا يمكن إجراء الترقية فورًا.
بعد المعالجة:
أوقف الحاوية المتأثرة.
استبدل الإصدار المتأثر بالإصدار المُصحَّح.
أعد بناء الحاوية.
شغّل البيئة المُرقَّعة.
أعد محاولة إعادة الإنتاج.
تأكد من أن السلوك المتأثر لم يعد ممكنًا.
راجع سجلات التطبيق بحثًا عن طلبات إدارية غير متوقعة.
12. المعالجة والتحقق
تم التحقق من إصلاح Webhood الرسمي لـ CVE-2024-31218 باستخدام إصدار المصدر الفعلي لـ Webhood `v0.9.1`.
الالتزام المُصلِح هو:
`735e7fa2814edeec9a2c07778ed51b3c018609f9`
يضيف الإصلاح الترحيل:
`src/backend/migrations/1712252550_generate_random_admin.js`
يتحقق الترحيل مما إذا كان هناك مسؤول موجود بالفعل. إذا لم يكن هناك مسؤول، فإنه ينشئ حساب مسؤول بكلمة مرور مُولَّدة عشوائيًا. يمنع ذلك الطالب غير المُصادَق عليه من الاستيلاء على أول مسؤول عبر نقطة النهاية المكشوفة `/api/admins`.
#### إجراء التحقق
1. تم سحب وسم المصدر الرسمي لـ Webhood `v0.9.1`.
2. تم بناء الواجهة الخلفية محليًا من المصدر الرسمي باستخدام Dockerfile الخاص بها.
3. تم تشغيل الصورة الناتجة على localhost على المنفذ `8091`.
4. تم إعادة إرسال نفس طلب إنشاء المسؤول دون مصادقة المستخدم ضد المختبر المتأثر إلى الواجهة الخلفية المُصحَّحة.
5. كانت البيئة المتأثرة سابقًا تقبل الطلب برمز HTTP `200`.
6. رفضت الواجهة الخلفية المُصحَّحة `v0.9.1` نفس الطلب برمز HTTP `401`.
الاستجابة الملاحظة في البيئة المُصحَّحة:
```text
HTTP status: 401
{"code":401,"message":"The request requires valid admin authorization token to be set.","data":{}}
يؤكد هذا أن مسار الهجوم المُثبَت سابقًا لإنشاء المسؤول دون مصادقة قد تم حظره في الواجهة الخلفية لـ Webhood v0.9.1 المبنية محليًا.
REMEDIATION VERIFIED: YES
الأدلة:
evidence/05-remediation-verified.png
13. التأثير الأمني
قد يوفر الاستغلال الناجح امتيازات إدارية لطرف غير مصرح له.
تشمل العواقب المحتملة:
وصول إداري غير مصرح به
تعديل بيانات التطبيق
كشف معلومات التطبيق
تعديل السجلات أو حذفها
مزيد من الإساءة الإدارية للتطبيق
لذلك تُصنَّف الخطورة على أنها حرجة وفقًا لتقييم CVSS المنشور.
14. الأدلة
الغرض من دليل evidence/ هو احتواء لقطات شاشة توضح:
بدء تشغيل التطبيق المتأثر
حالة حاوية Docker
الإصدار المتأثر
طلب إعادة الإنتاج
السلوك المتأثر الناجح
مخرجات الاكتشاف
الإصدار المُرقَّع
فشل/حظر إعادة الإنتاج بعد المعالجة
يجب ألا تحتوي لقطات الشاشة على بيانات اعتماد حقيقية أو معلومات شخصية أو مفاتيح API أو أي بيانات حساسة أخرى.
15. القيود
أثناء إعداد هذا المختبر، واجهت بيئة Windows المحلية مشكلات في تشغيل الواجهة الخلفية لـ Docker Linux.
أعاد Windows الخطأ:
Error: 14098
The component store has been corrupted.
كما كانت ميزات Windows المطلوبة معطلة في البداية:
VirtualMachinePlatform
Microsoft-Windows-Subsystem-Linux
لذلك، يجب أن تميز أي نتيجة إعادة إنتاج أو لقطة شاشة بدقة بين:
البحث في الثغرة
إعداد المختبر
إجراء إعادة الإنتاج المقصود
إعادة الإنتاج المُنفَّذة بنجاح
يجب عدم الادعاء بأي تنفيذ ناجح للاستغلال ما لم يتم فعليًا في المختبر المعزول.
16. اعتبارات السلامة
هذا المشروع مخصص للبحث الأمني المصرح به فقط.
يجب أن يقوم المختبر بما يلي:
التشغيل محليًا.
تجنب التعرض العام.
تجنب بيانات الاعتماد الحقيقية.
تجنب بيانات المستخدمين الحقيقية.
تجنب الاختبار ضد أنظمة طرف ثالث.
استخدام حسابات اختبار قابلة للتخلص منها.
استخدام شبكة Docker معزولة.
تدمير البيئة المتأثرة بعد الاختبار.
مثال التنظيف:
docker compose down
17. المراجع
National Vulnerability Database — CVE-2024-31218
Webhood security advisory
Webhood/PocketBase source repository
Fixing commit associated with CVE-2024-31218
CWE-306 — Missing Authentication for Critical Function
FIRST CVSS v3.1 specification
18. إخلاء المسؤولية
هذا المستودع هو مشروع تعليمي في الأمن السيبراني وبحث في الثغرات الأمنية.
تم إعادة إنتاج الإعداد المتأثر بشكل متعمد للاختبار المُتحكَّم فيه. يجب عدم نشره كخدمة يمكن الوصول إليها علنًا.
لا يتحمل المؤلف أي مسؤولية عن الاستخدام غير المصرح به للتقنيات أو الأدوات الواردة في هذا المستودع.