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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-39987-Lab — # مختبر Docker محلي يعيد إنتاج CVE-2026-39987، ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) قبل المصادقة في WebSocket الطرفية الخاص بـ marimo. يقارن بين الإصدارات المعرضة للخطر والإصدارات المُصححة مع نصوص PoC الأقل ضررًا لأغراض البحث الأمني التعليمي. | Kitploit
أدوات/GitHubGitHub/rootdirective-sec/cve-2026-39987-lab
أمن الحاوياتتحليل الثغرات الأمنيةالاستغلالأمن الويبالتعلم والتعليممختبرات وتدريب عملي
GitHubrootdirective-sec/cve-2026-39987-lab

CVE-2026-39987-Lab

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

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
1منذ 3 أشهرلم تتم المراجعة بعد

CVE-2026-39987 — مختبر RCE عبر WebSocket الطرفي قبل المصادقة في marimo

مختبر Docker محلي فقط لإعادة إنتاج وفهم CVE-2026-39987 في marimo. يقارن هذا المشروع خدمة marimo الثغرة مع خدمة marimo المُصححة جنبًا إلى جنب، ثم يوضح الفرق باستخدام سكربت إثبات بأقل ضرر.


الملخص التنفيذي

CVE-2026-39987 هي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد قبل المصادقة في marimo، وهو إطار عمل دفاتر ملاحظات Python تفاعلي.

السلوك الثغري موجود في نقطة نهاية WebSocket الطرفية:

root@kitploit:~
/terminal/ws

في الإصدارات المتأثرة، يمكن الوصول إلى هذه النقطة دون مصادقة صالحة ويمكنها إنشاء جلسة طرفية تفاعلية. يمكن لمهاجم غير مصادق يتمكن من الوصول إلى خادم تحرير marimo الثغري تنفيذ أوامر بصلاحيات عملية marimo.

يعيد هذا المختبر إنتاج الثغرة في بيئة Docker محلية خاضعة للتحكم:

الخدمةالإصدارالرابطالسلوك المتوقع
vulnmarimo 0.20.4http://127.0.0.1:8081/terminal/ws يقبل اتصال WebSocket غير مصادق
patchedmarimo 0.23.0http://127.0.0.1:8082/terminal/ws يرفض اتصال WebSocket غير مصادق مع 403 Forbidden

الهدف ليس توفير استغلال مُسلح. الهدف هو إظهار الفرق الأمني الملحوظ بين الإصدار الثغري والإصدار المُصحح باستخدام أدلة محلية قابلة لإعادة الإنتاج.


نظرة عامة على الثغرة

المكوّن المتأثر

المكوّن المتأثر هو نقطة نهاية WebSocket الطرفية في marimo:

root@kitploit:~
/terminal/ws

تُستخدم هذه النقطة بواسطة بيئة تحرير marimo لتوفير وظائف طرفية عبر جلسة WebSocket متصلة بالمتصفح.

السبب الجذري

كانت النقطة الثغرية تقبل اتصالات WebSocket دون فرض نفس فحوصات المصادقة المتوقعة لوظائف تحرير marimo المحمية.

الفرق المهم هو:

root@kitploit:~
السلوك الثغري:
  يمكن للعميل غير المصادق الاتصال بـ /terminal/ws
  يتم إنشاء جلسة طرفية
  يمكن إرسال الأوامر عبر WebSocket

السلوك المُصحح:
  يتم رفض العميل غير المصادق
  يفشل مصافحة WebSocket مع 403 Forbidden
  لا يتم إنشاء جلسة طرفية

يضيف التصحيح التحقق من المصادقة إلى تدفق WebSocket الطرفي قبل السماح بإنشاء جلسة طرفية.

التأثير

إذا تم تعريض خادم تحرير marimo الثغري لشبكة يمكن الوصول إليها، فقد يتمكن مهاجم غير مصادق من تنفيذ أوامر كمستخدم يقوم بتشغيل عملية marimo.

في هذا المختبر، يتم تشغيل عملية marimo عمدًا كمستخدم غير جذر منخفض الصلاحيات:

root@kitploit:~
uid=10001(marimo) gid=10001(marimo) groups=10001(marimo)

هذا يحافظ على أمان العرض التوضيحي مع إثبات الثغرة.


أهداف المختبر

صُمم هذا المختبر لإثبات ثلاثة أشياء:

  1. الإصدار الثغري يقبل اتصالات WebSocket غير مصادقة إلى /terminal/ws.
  2. يمكن تنفيذ أمر غير ضار عبر WebSocket الطرفي غير المصادق.
  3. الإصدار المُصحح يرفض نفس محاولة WebSocket غير المصادقة مع 403 Forbidden.

يتجنب المختبر عمدًا الأوامر التدميرية، والاستمرارية، والصدور العكسي، وسرقة بيانات الاعتماد، أو أي هدف مواجه للإنترنت.


هيكل المستودع

root@kitploit:~
.
├── docker-compose.yml
├── vuln/
│   ├── Dockerfile
│   └── notebook.py
├── patched/
│   ├── Dockerfile
│   └── notebook.py
├── poc/
│   ├── poc.py
│   ├── rce_poc.py
│   └── requirements.txt
├── SAFETY.md
├── README.md
└── .gitignore

الملفات المهمة


بنية المختبر

root@kitploit:~
الجهاز المضيف

127.0.0.1:8081  ─────►  حاوية vuln
                         marimo 0.20.4
                         /terminal/ws يقبل WebSocket غير مصادق

127.0.0.1:8082  ─────►  حاوية patched
                         marimo 0.23.0
                         /terminal/ws يرفض WebSocket غير مصادق

تكشف كلتا الخدمتين عن المنفذ الداخلي 2718 الخاص بـ marimo، لكن منافذ المضيف مختلفة:

root@kitploit:~
vuln    -> 127.0.0.1:8081
patched -> 127.0.0.1:8082

الخدمات مرتبطة بـ 127.0.0.1 فقط. ليس المقصود تعريضها لشبكة LAN أو الإنترنت.


ملاحظات تقوية Docker

تم تكوين الحاويات مع عدة حواجز حماية حيثما أمكن:

root@kitploit:~
- ربط المنافذ بـ 127.0.0.1 فقط
- التشغيل كمستخدم غير جذر
- إسقاط قدرات Linux
- تمكين no-new-privileges
- استخدام نظام ملفات جذر للقراءة فقط
- توفير مواقع كتابة tmpfs محدودة فقط
- عزل الخدمات داخل شبكة جسر Docker مخصصة

لا تزيل هذه الضوابط الثغرة من الخدمة الثغرية. إنها تقلل من نطاق الانفجار للعرض التوضيحي المحلي.


المتطلبات الأساسية

الافتراضات المختبرة:

root@kitploit:~
- Linux x86_64 أو macOS مع Docker Desktop
- Docker Compose v2
- Python 3.9+
- اختبار محلي فقط

الأدوات المطلوبة:

root@kitploit:~
docker --version
docker compose version
python3 --version

الإعداد

انتقل إلى دليل المشروع أو ادخل إليه:

root@kitploit:~
cd cve-2026-39987

قم ببناء وتشغيل كلتا الخدمتين:

root@kitploit:~
docker compose up -d --build

تحقق من أن كلتا الحاويتين تعملان:

root@kitploit:~
docker compose ps

الخدمات المتوقعة:

root@kitploit:~
cve-2026-39987-vuln
cve-2026-39987-patched

التحقق من الإصدارات

تحقق من إصدار الخدمة الثغرية:

root@kitploit:~
docker compose exec vuln marimo --version

المتوقع:

root@kitploit:~
0.20.4

تحقق من إصدار الخدمة المُصححة:

root@kitploit:~
docker compose exec patched marimo --version

المتوقع:

root@kitploit:~
0.23.0

تثبيت تبعيات PoC

أنشئ بيئة Python افتراضية:

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate

قم بتثبيت التبعيات:

root@kitploit:~
python -m pip install -r poc/requirements.txt

PoC بأقل ضرر

سكربت الإثبات الأساسي هو:

root@kitploit:~
poc/poc.py

يحاول الاتصال بـ:

root@kitploit:~
/terminal/ws

ثم يرسل أوامر إثبات غير ضارة فقط:

root@kitploit:~
id
whoami
hostname

لا يتم استخدام صدور عكسي، أو كتابة ملفات، أو استمرارية، أو وصول لبيانات الاعتماد، أو أوامر تدميرية.

اختبار الخدمة الثغرية

قم بالتشغيل:

root@kitploit:~
python poc/poc.py --base-url http://127.0.0.1:8081

النتيجة المتوقعة:

root@kitploit:~
[*] Target WebSocket: ws://127.0.0.1:8081/terminal/ws
[*] Sending benign proof command only: id; whoami; hostname
[+] websocket connected without credentials
[result] VULNERABLE: unauthenticated command execution observed
[proof]
uid=10001(marimo) gid=10001(marimo) groups=10001(marimo)
marimo
<container-hostname>

إذا طبع السكربت مخرجات الطرفية الخام لكنه تضمن هذه الكتلة، فإن الثغرة ما زالت مؤكدة:

root@kitploit:~
CVE39987_PROOF_START
uid=10001(marimo) gid=10001(marimo) groups=10001(marimo)
marimo
<container-hostname>
CVE39987_PROOF_END

هذا يعني أن اتصال WebSocket نجح وأن مخرجات الأوامر عادت من الجلسة الطرفية.

اختبار الخدمة المُصححة

قم بالتشغيل:

root@kitploit:~
python poc/poc.py --base-url http://127.0.0.1:8082

النتيجة المتوقعة:

root@kitploit:~
[*] Target WebSocket: ws://127.0.0.1:8082/terminal/ws
[*] Sending benign proof command only: id; whoami; hostname
[-] websocket connection rejected/failed: Handshake status 403 Forbidden
[result] not exploitable by this unauthenticated check

هذا يُظهر أن الخدمة المُصححة ترفض الوصول غير المصادق قبل إنشاء جلسة طرفية.


عميل التعلم في الوقت الفعلي

الملف أدناه مخصص للتعلم المحلي فقط:

root@kitploit:~
poc/rce_poc.py

يوضح نفس المشكلة بطريقة أكثر واقعية في الوقت الفعلي من خلال الاتصال بـ WebSocket الطرفي الثغري والسماح بالتفاعل الطرفي.

استخدمه فقط ضد مختبر Docker المحلي.

التشغيل ضد الخدمة الثغرية

root@kitploit:~
python poc/rce_poc.py --base-url http://127.0.0.1:8081

السلوك المتوقع:

root@kitploit:~
[+] Connected successfully (Pre-Auth RCE)
✓ Interactive shell is ready to use!

أوامر آمنة للتجربة:

root@kitploit:~
id
whoami
hostname
pwd
python -c 'import marimo; print(marimo.__version__)'
exit

التشغيل ضد الخدمة المُصححة

root@kitploit:~
python poc/rce_poc.py --base-url http://127.0.0.1:8082

السلوك المتوقع:

root@kitploit:~
[-] Connection Failed: 403 Forbidden
[!] This is likely the PATCHED version.
    The WebSocket endpoint is now protected.

ملاحظة السلامة للوضع في الوقت الفعلي

العميل في الوقت الفعلي موجود للمساعدة في فهم كيفية تصرف WebSocket الثغري. لا ينبغي استخدامه ضد أي نظام خارج هذا المختبر المحلي.

لنشر المحفظة، الدليل الأساسي الموصى به هو poc/poc.py، لأنه محدود وقابل للتكرار وبأقل ضرر.


الفرق الأمني المتوقع

يجب تلخيص النتيجة الرئيسية للمختبر على النحو التالي:

root@kitploit:~
vuln / marimo 0.20.4:
  مصافحة WebSocket غير المصادقة إلى /terminal/ws تنجح
  مخرجات الأوامر غير الضارة قابلة للملاحظة

patched / marimo 0.23.0:
  مصافحة WebSocket غير المصادقة إلى /terminal/ws تفشل
  يعيد الخادم 403 Forbidden
  لا يتم إنشاء جلسة طرفية

هذا هو الإثبات الأساسي لإعادة إنتاج CVE.


فحص WebSocket اليدوي

إذا كنت تريد فحص السلوك يدويًا، استخدم عميلًا يدعم WebSocket واتصل بـ:

root@kitploit:~
ws://127.0.0.1:8081/terminal/ws
ws://127.0.0.1:8082/terminal/ws

المتوقع:

root@kitploit:~
8081 -> يتم قبول الاتصال
8082 -> 403 Forbidden

سكربتات PoC هي المفضلة لأنها تنتج أدلة أوضح.


أفكار الكشف والمراقبة

في بيئة حقيقية، تشمل المؤشرات المفيدة:

root@kitploit:~
- طلبات WebSocket إلى /terminal/ws
- محاولات وصول غير مصادقة إلى خوادم تحرير marimo
- جلسات طرفية غير متوقعة تم إنشاؤها بواسطة marimo
- أوامر تم تشغيلها بواسطة عملية marimo
- الوصول إلى .env أو مفاتيح SSH أو بيانات اعتماد السحابة أو أسرار دفاتر الملاحظات
- حركة مرور شبكة صادرة بعد وقت قصير من اتصالات /terminal/ws

أمثلة على القطع الأثرية المحلية للفحص:

root@kitploit:~
docker compose logs vuln
docker compose logs patched
docker compose ps
docker compose exec vuln ps aux

التنظيف

إيقاف وإزالة الحاويات:

root@kitploit:~
docker compose down

إزالة وحدات التخزين أيضًا:

root@kitploit:~
docker compose down -v

إزالة بيئة Python الافتراضية المحلية إذا رغبت:

root@kitploit:~
rm -rf .venv

قواعد السلامة

هذا المستودع مخصص للبحث الأمني المحلي وعرض المحفظة فقط.

مسموح:

root@kitploit:~
- اختبار localhost
- إعادة إنتاج Docker فقط
- أوامر إثبات غير ضارة مثل id و whoami و hostname
- مقارنة السلوك الثغري والمُصحح
- توثيق السبب الجذري وأفكار الكشف

غير مسموح:

root@kitploit:~
- الاختبار ضد خوادم marimo العامة
- اختبار أنظمة لا تملكها أو لا تديرها
- الصدور العكسي
- الاستمرارية
- سرقة بيانات الاعتماد
- الأوامر التدميرية
- الحركة الجانبية
- سلوك الروبوتات أو البرامج الضارة

إخلاء المسؤولية

هذا المشروع مخصص فقط للاختبار المحلي المصرح به والتعليم الأمني الدفاعي. لا تستخدم هذه السكربتات ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.


المراجع

  • GitHub Security Advisory — GHSA-2679-6mx9-h9xc:
    https://github.com/advisories/GHSA-2679-6mx9-h9xc

  • NVD — CVE-2026-39987:
    https://nvd.nist.gov/vuln/detail/CVE-2026-39987

  • مستودع marimo الرئيسي:
    https://github.com/marimo-team/marimo

  • Commit التصحيح — إضافة التحقق من المصادقة إلى WebSocket الطرفي:
    https://github.com/marimo-team/marimo/commit/c24d4806398f30be6b12acd6c60d1d7c68cfd12a

  • PR التصحيح — marimo PR #9098:
    https://github.com/marimo-team/marimo/pull/9098

تنزيل الأداة
الملفالغرض
docker-compose.ymlيحدد خدمات marimo الثغرية والمُصححة
vuln/Dockerfileيبني خدمة marimo الثغرية
patched/Dockerfileيبني خدمة marimo المُصححة
vuln/notebook.pyملف دفتر ملاحظات marimo الأدنى المستخدم بواسطة الخدمة الثغرية
patched/notebook.pyملف دفتر ملاحظات marimo الأدنى المستخدم بواسطة الخدمة المُصححة
poc/poc.pyسكربت إثبات بأقل ضرر يشغل أوامر غير ضارة فقط
poc/rce_poc.pyعميل تعلم في الوقت الفعلي لمراقبة السلوك الطرفي في المختبر المحلي
poc/requirements.txtتبعيات Python لسكربتات PoC
SAFETY.mdقواعد السلامة وحدود النطاق