SiYuan w wersjach 3.6.0 i wcześniejszych zawiera podatność XSS wynikającą z niekompletnej listy blokowanych typów MIME w funkcji SanitizeSVG oraz braku escapowania danych wejściowych w endpoincie /api/icon/getDynamicIcon. Atakujący może nakłonić użytkownika do kliknięcia spreparowanego linku SVG, co prowadzi do wykonania kodu JavaScript w przeglądarce ofiary.
▸ Pokaż oryginał (EN)
SiYuan is a personal knowledge management system. In versions 3.6.0 and below, SanitizeSVG has an incomplete blocklist — it blocks data:text/html and data:image/svg+xml in href attributes but misses data:text/xml and data:application/xml, both of which can render SVG with JavaScript execution. The unauthenticated /api/icon/getDynamicIcon endpoint serves user-controlled input (via the content parameter) directly into SVG markup using fmt.Sprintf with no escaping, served as Content-Type: image/svg+xml. This creates a click-through XSS: a victim navigates to a crafted URL, sees an SVG with an injected link, and clicking it triggers JavaScript via the bypassed MIME types. The attack requires direct navigation to the endpoint or <object>/<embed> embedding, since <img> tag rendering in the frontend doesn't allow interactive links. This issue has been fixed in version 3.6.1.
Funkcja SanitizeSVG blokuje typy MIME data:text/html oraz data:image/svg+xml w atrybutach href, jednak pomija data:text/xml oraz data:application/xml — oba umożliwiają renderowanie SVG z wykonaniem JavaScript. Niezabezpieczony endpoint /api/icon/getDynamicIcon (dostępny bez uwierzytelnienia) wstrzykuje dane wejściowe użytkownika z parametru content bezpośrednio do znaczników SVG za pomocą fmt.Sprintf bez żadnego escapowania, serwując wynik z nagłówkiem Content-Type: image/svg+xml. Atak przebiega jako click-through XSS: ofiara otwiera spreparowany URL lub odwiedza stronę z osadzonym elementem <object> lub <embed>, widzi SVG z wstrzykniętym linkiem, a kliknięcie go wyzwala wykonanie JavaScript przez ominięte typy MIME.
Atakujący może wykonać dowolny kod JavaScript w kontekście przeglądarki ofiary, co potencjalnie umożliwia kradzież danych, przejęcie sesji lub wykonanie dalszych działań w imieniu użytkownika.
Należy zaktualizować SiYuan do wersji 3.6.1, w której błąd został naprawiony. Patch dostępny jest w oficjalnym repozytorium projektu (commit d01d561875d4f744e9f6232f1d4831e3642b8696) oraz w wydaniu v3.6.1.
B3Log SiYuan w wersjach 3.6.0 i wcześniejszych
Endpoint /api/icon/getDynamicIcon jest dostępny bez uwierzytelnienia, co zwiększa ekspozycję na atak. Podatność nie jest exploitowana przez tag <img> ze względu na brak obsługi interaktywnych linków — wymagane jest bezpośrednie przejście do URL lub osadzenie przez <object>/<embed>.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:NB3log Siyuan
APPB3Log< 3.6.1
Powiązane podatności
B3Log SiYuan: XSS w diagramach Mermaid eskaluje do RCE w Electron
RCE przez stored XSS w kliencie desktopowym B3Log SiYuan
RCE w SiYuan poprzez nadmiernie permisywną politykę CORS
Stored XSS → RCE w B3Log SiYuan via złośliwy URL w Attribute View
Path Traversal w B3Log SiYuan — nieautoryzowane odczytywanie struktury plików