
إثبات مفهوم لاستغلال CVE-2026-39987، وهو ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) قبل المصادقة في نقطة نهاية WebSocket الخاصة بـ /terminal/ws في Marimo، مما يتيح وصولاً غير مصادق إلى غلاف PTY.
يتأثر Marimo <= 0.20.4 بثغرة RCE قبل المصادقة في نقطة نهاية WebSocket الخاصة بـ /terminal/ws.
تتحقق نقطة النهاية من وضع التطبيق ودعم الطرفية، لكنها لا تتحقق من المصادقة قبل قبول اتصال WebSocket. ثم تقوم بإنشاء قشرة PTY، مما يسمح لمهاجم غير مصادق بتنفيذ أوامر بصلاحيات عملية Marimo.
على عكس نقاط نهاية WebSocket الأخرى التي تستدعي validate_auth()، تقبل نقطة النهاية الطرفية الضعيفة الاتصال مباشرة:
if app_state.mode != SessionMode.EDIT:
await websocket.close(...)
return
if not supports_terminal():
await websocket.close(...)
return
await websocket.accept()
child_pid, fd = pty.fork()
يسمح غياب فحص المصادقة بالوصول غير المصادق إلى PTY.
<= 0.20.4يتصل العميل المرفق CVE-2026-39987.py بـ:
/terminal/ws
الوضع التفاعلي:
python3 CVE-2026-39987.py -i
أمر واحد:
python3 CVE-2026-39987.py "id"
قم بتكوين الهدف عن طريق استبدال DEFAULT_HOST في السكربت.
يمكن أن يوفر الاستغلال الناجح قشرة PTY غير مصادقة وتنفيذ أوامر عشوائية بصلاحيات مستخدم خادم Marimo.