
مختبر تدريب أمني مستقل يعيد إنتاج CVE-2026-20253 (Splunk Enterprise ثغرة RCE غير مصادق عليها). يوفر بيئة قائمة على Docker لممارسة استغلال الويب، ورفع الامتيازات، وسرقة بيانات الاعتماد من خلال سلسلة هجوم موثقة.
Splunk Enterprise 10.2.3 · حاوية جانبية لاستعادة PostgreSQL · CWE-306 (نقص المصادقة لوظيفة حرجة) نسخة مرخصة قائمة بذاتها تُحاكي النشرة الأمنية الحقيقية لأغراض التعليم الدفاعي. لا تحتوي على كود Splunk الخاص.
هذا المستودع هو مختبر تدريبي أمني على غرار Vulhub/DVWA. يقوم بإعداد نموذج دقيق لـ Splunk Enterprise 10.2.3 ويعيد إنتاج السلوك الموثق لـ CVE-2026-20253: حيث تعرض حاوية استعادة PostgreSQL المرفقة وظائف كتابة ملفات وتنفيذ SQL مميزة بدون مصادقة حقيقية (يتم قبول رأس Basic فارغ أو عشوائي)، وتقوم طبقة الويب الخاصة بـ Splunk بتوجيه __raw/v1/postgres/* إلى تلك الحاوية قبل بوابة تسجيل الدخول. وبالتسلسل، ينتج عن ذلك تنفيذ كود عن بعد غير مصادق عليه كحساب خدمة splunk غير الجذر.
المختبر قابل للحل بالكامل من البداية إلى النهاية: التعرف على بصمة الحافة، اتباع شارة الصحة قبل المصادقة إلى واجهة برمجة التطبيقات الداخلية للاستعادة، إثبات كتابة ملف عشوائي، سرقة بيانات اعتماد PostgreSQL الداخلية، وتحويل بدائية كتابة ملف استعادة SQL إلى تنفيذ كود على سكريبت إدخال نمطي مجدول.
| النشرة الأمنية للبائع | SVD-2026-0603 |
| CVE | CVE-2026-20253 |
| نقطة الضعف | CWE-306 — نقص المصادقة لوظيفة حرجة |
| المتأثر | Splunk Enterprise 10.2.3 |
| تم الإصلاح في | Splunk Enterprise 10.2.4 |
| CVSS 3.1 | 9.8 (حرج) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
edge network core network
┌───────────────────┐ ┌───────────────────────────────┐
browser ─▶ proxy :8080 ──▶ web :8001 (SPA)
(nginx edge) └▶ splunkd :8089 ─┬─▶ db :5432 (postgres)
login API + ├─▶ redis :6379 (jobs/cache)
__raw relay ───┼─▶ pg-sidecar :5435 ◀── الثغرة
│ (recovery API, blank Basic)
forwarders ─▶ ingest :8088 (HEC) ─────────┘
scheduler ──▶ runs modular-input script
as `splunk` (uid 1000) — RCE sink
shared volume app_data mounted into
pg-sidecar (write) + scheduler (exec)
جسرا Docker: edge (الوكيل) و core (كل شيء آخر). في البناء الثغري، تقع pg-sidecar على core ويمكن الوصول إليها من مرحل طبقة الويب — قابلية الوصول هذه هي جوهر المشكلة. الغطاء المُصحَّح يعزلها.
cp .env.example .env
docker compose up --build -d
ثم تصفح إلى http://localhost:8080.
الاستغلال الحرج (حاوية الاستعادة) غير مصادق عليه بالكامل — لا تحتاج إلى تسجيل الدخول للوصول إليه. حسابات المنصة المدرجة أدناه موجودة فقط كنقاط مراقبة من منظور الصندوق الرمادي للاكتشاف (قراءة سجلات تدقيق Splunk الخاصة في البحث والتقارير). أعطِ المشاركين حساب المحلل واتركهم يكتشفون الباقي.
هذه البيانات موثقة عن قصد — هذا مختبر تدريبي قائم بذاته، وليس نظام إنتاج. التمرين لا يتطلب اختراق أو تصعيد أياً من هذه الحسابات؛ واجهة برمجة تطبيقات استعادة
pg-sidecarالحاسمة غير مصادق عليها. توجد ملاحظات المشغل الكاملة فيdocs/DEPLOYMENT.md.
هناك علمين للاستيلاء عليهما. كلاهما سلسلتان SPLUNK{...}؛ قيمهما موجودة في المختبر ومكشوفة في الوثائق — إنها غير مطبوعة هنا عمداً حتى تتمكن من كسبهما.
__raw قبل الجلسة، تجاوز مصادقة Basic الزائفة، وتسريب بيانات اعتماد PostgreSQL الداخلية من ملف .pgpass الخاص بالحاوية الجانبية.splunk. تحويل بدائيات كتابة الملف واستعادة SQL الخاصة بالحاوية الجانبية إلى تنفيذ كود على سكريبت الإدخال النمطي المجدول، ثم قراءة السر المحمي.لا تتسابق للأمام: docs/DISCOVERY_WALKTHROUGH.md كُتب ليكتشف، لا ليُفسد. يوجد سلم تلميحات متدرج والحل الكامل للمدرب لموظفي التدريب لكنه يُحفظ خارج هذه الحزمة ليبقى التمرين حلاً أعمى.
شجرة patched/ تعكس الإصلاح الحقيقي لـ Splunk (10.2.4) بالإضافة إلى الحل البديل للنشرة الأمنية، مرصوصة كدفاع في العمق: التحقق الحقيقي من بيانات الاعتماد على مسارات الاستعادة، تعقيم اجتياز المسار لـ backupFile، إزالة حقن سلسلة اتصال libpq، دور استعادة غير مسؤول، إسقاط مرحل __raw قبل المصادقة، وعزل الشبكة للحاوية الجانبية. انظر patched/PATCH_NOTES.md.
تشغيل البناء المحصن مع الغطاء:
docker compose -f docker-compose.yml -f patched/deploy/compose.override.hardened.yml up --build -d
عكس التخفيف الوارد في النشرة الأمنية، يمكنك تعطيل حاوية الاستعادة بالكامل بدون تصحيح — مماثل لضبط [postgres] disabled = true في server.conf. قم بتعيين ما يلي في ملف .env وأعد إنشاء المكدس:
PG_SIDECAR_DISABLED=true
مع تعطيل الحاوية الجانبية، تختفي وظائف recovery/* وتنكسر السلسلة عند المصدر.
مواد تدريبية. هذا المختبر هو نسخة مرخصة قائمة بذاتها تُحاكي CVE-2026-20253 لـ Splunk Enterprise للتعليم الدفاعي. لا يحتوي على الكود المصدري أو الثنائيات الخاصة بـ Splunk؛ الخدمات هنا هي إعادة تطبيق مستقل للسلوك الثغري الموثق. استخدم فقط ضد هذا المختبر. تشغيل هذه التقنيات ضد أنظمة لا تملكها غير قانوني.
| الخدمة | الصورة | يستمع على | منشور | الدور |
|---|
proxy | splunk/proxy:10.2.3 | 8080 | 8080:8080 | حافة nginx؛ نقطة دخول واجهة ويب Splunk ومرحل __raw |
web | splunk/web:10.2.3 | 8001 | — | تطبيق صفحة واحدة لواجهة ويب Splunk (ثابت) |
splunkd | splunk/splunkd:10.2.3 | 8089 | — | برنامج Splunk الخفي / طبقة الويب: واجهة برمجة تطبيقات تسجيل الدخول + مرحل /{locale}/splunkd/__raw/v1/postgres/* قبل الجلسة |
ingest | splunk/ingest:10.2.3 | 8088 | 8088:8088 | مجمع أحداث HTTP (مصادقة رمزية) |
pg-sidecar | splunk/pg-sidecar:10.2.3 | 5435 | — | الثغرة — حاوية استعادة PostgreSQL (/v1/postgres/*) |
scheduler | splunk/scheduler:10.2.3 | — | — | تشغيل سكريبت الإدخال النمطي المجدول كـ splunk → نقطة نهاية RCE |
db | postgres:16-alpine | 5432 | — | PostgreSQL الداخلي الذي تنسخه الحاوية الجانبية / تستعيده |
redis | redis:7-alpine | 6379 | — | قائمة انتظار المهام / ذاكرة التخزين المؤقت |
| اسم المستخدم | كلمة المرور | الدور | ملاحظات |
|---|
admin | Str@ta-Admin-2026! | مدير | مدير كامل للمنصة (الإعدادات، المستخدمون، إدخالات البيانات) |
j.okafor | Analyst!Winter24 | محلل | ابدأ هنا — وحدة تحكم البحث والتقارير للقراءة فقط |
m.reyes | Operator#2311 | مشغل | يدير المصادر / طرق عرض المجموعات |
svc_forwarder | fwd-3f9a1c77b204 | مشغل | حساب خدمة (موجه HEC) |
| الوثيقة | الجمهور / الغرض |
|---|
docs/DISCOVERY_WALKTHROUGH.md | مسار اكتشافي من بصمة الإصبع إلى RCE |
docs/ROOT_CAUSE.md | لماذا هي ثغرة (CWE-306) وكيف يصلحها التصحيح |
docs/ARCHITECTURE.md | الخدمات، الشبكات، مرحل __raw، وتدفق البيانات |
docs/DETECTION.md | فرص كشف الفريق الأزرق والتواقيع |
docs/PLAYER_GUIDE.md | إحاطة المشارك ونطاقه |
docs/HINTS.md | سلم تلميحات متدرج — يحفظ داخلياً، غير مضمن في هذه الحزمة |
docs/INSTRUCTOR_GUIDE.md | للمدربين فقط — الحل الكامل + الأعلام، يحفظ داخلياً، غير مضمن |
docs/DEPLOYMENT.md | إعداد وتشغيل وإزالة البيئة |