SiYuan przed wersją 3.7.2 zawiera krytyczną lukę braku autoryzacji w endpoincie POST /mcp, która przy włączonym trybie anonimowego serwera Publish pozwala nieuwierzytelnionemu atakującemu zdalnie przejąć pełną kontrolę nad aplikacją. Podatność umożliwia odczyt poufnych danych konfiguracyjnych, zapis dowolnych plików oraz instalację złośliwego pluginu wykonywanego z uprawnieniami administratora.
▸ Pokaż oryginał (EN)
SiYuan before v3.7.2 contains a missing authorization vulnerability in the POST /mcp kernel endpoint, which is gated only by a general auth check (model.CheckAuth) with no admin-role or read-only enforcement. This exposes 31 MCP tools, including a file tool with list/read/write/delete/rename/copy actions across the entire workspace. When the Publish server is enabled in anonymous mode (Conf.Publish.Enable=true and Conf.Publish.Auth.Enable=false), the Publish reverse proxy attaches an anonymous RoleReader JWT to proxied requests, allowing a remote unauthenticated attacker to reach /mcp. The attacker can read conf/conf.json to extract accessAuthCode, api.token, and cookieKey in plaintext, write arbitrary files in the workspace, and plant a plugin into data/plugins/ that executes with nodeIntegration:true and no contextIsolation on the next desktop launch, leading to administrator takeover.
Endpoint POST /mcp jest chroniony wyłącznie ogólnym mechanizmem uwierzytelnienia (model.CheckAuth), bez weryfikacji roli administratora ani trybu tylko do odczytu. Gdy serwer Publish działa w trybie anonimowym (Conf.Publish.Enable=true oraz Conf.Publish.Auth.Enable=false), reverse proxy serwera Publish automatycznie dołącza do przekazywanych żądań token JWT z rolą RoleReader, co pozwala ominąć kontrolę dostępu i dotrzeć do endpointu /mcp bez żadnych poświadczeń. Endpoint ten udostępnia 31 narzędzi MCP, w tym narzędzie do operacji na plikach (list/read/write/delete/rename/copy) działające w obrębie całego workspace'u. Atakujący może odczytać plik conf/conf.json, uzyskując z niego w postaci jawnej wartości accessAuthCode, api.token oraz cookieKey, a następnie zapisać złośliwy plugin do katalogu data/plugins/. Plugin taki zostaje wykonany z flagami nodeIntegration:true i bez contextIsolation przy kolejnym uruchomieniu aplikacji desktopowej, prowadząc do pełnego przejęcia konta administratora.
Zdalny, nieuwierzytelniony atakujący może odczytać poufne dane uwierzytelniające, zapisywać i usuwać dowolne pliki w workspace oraz zainstalować złośliwy plugin wykonywany z uprawnieniami administratora, co skutkuje całkowitym przejęciem kontroli nad aplikacją i systemem.
Należy zaktualizować SiYuan do wersji 3.7.2 lub nowszej, w której wprowadzono poprawkę (commit c72ca4cd09019e5f64afdee8f8c6ec5ef34858db). Do czasu aktualizacji zaleca się wyłączenie serwera Publish lub włączenie wymagania uwierzytelnienia dla serwera Publish (Conf.Publish.Auth.Enable=true).
SiYuan przed wersją 3.7.2 z włączonym serwerem Publish w trybie anonimowym (Conf.Publish.Enable=true i Conf.Publish.Auth.Enable=false)
Podatność dotyczy wyłącznie instalacji z włączonym serwerem Publish w trybie anonimowym. Szczegóły opublikowano w ramach GitHub Security Advisory GHSA-cvhv-7xhj-xjp8.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X