CRITICAL🇬🇧 English

CVE-2026-54158

SiYuan: XSS w rendererze bazy danych prowadzący do RCE na desktopie

CVSS 9.9v3.1pub. 2026-06-24upd. 2026-06-26

W systemie SiYuan do wersji 3.7.0 istnieje podatność typu XSS w komponencie renderującym komórki bazy danych (attribute-view), umożliwiająca wykonanie dowolnego kodu JavaScript. Na wersji desktopowej (Electron) podatność eskaluje bezpośrednio do RCE na poziomie systemu operacyjnego z powodu włączonej opcji nodeIntegration.

Pokaż oryginał (EN)

SiYuan is an open-source personal knowledge management system. Prior to 3.7.0, the attribute-view (database) cell renderer genAVValueHTML interpolates cell content raw in four of its branches: text, url, phone, and mAsset. A cell value like </textarea><img src=x onerror="..."> or "><img src=x onerror="..."> breaks out of its surrounding tag and runs arbitrary JavaScript in the renderer when the victim opens the block-attribute panel. On Electron desktop the renderer runs with nodeIntegration:true, so the XSS chains to host RCE via require('child_process'). AV files live under the workspace and ride normal sync, so an attacker with write access to any synced workspace plants the payload once and it fires on every device that opens a panel containing that row.he kernel doesn't escape on the way in either, so the malicious cell persists byte-for-byte. There's no equivalent of the html.EscapeAttrVal call that protects block IAL attributes at kernel/model/blockial.go:261. This vulnerability is fixed in 3.7.0.

🤖 Analiza AI
Jak działa

Renderer komórek bazy danych (genAVValueHTML) wstawia zawartość komórek typów text, url, phone i mAsset bezpośrednio do generowanego HTML bez żadnego escapowania. Atakujący może umieścić w wartości komórki payload taki jak </textarea><img src=x onerror="...">, który wyrywa się z otaczającego tagu i wykonuje dowolny JavaScript w momencie otwarcia panelu atrybutów bloku przez ofiarę. Ponieważ warstwa kernelowa również nie sanityzuje danych przy zapisie, złośliwa wartość jest przechowywana i synchronizowana w niezmienionej formie do wszystkich urządzeń korzystających z tego samego workspace'u. Na wersji desktopowej Electron z włączoną flagą nodeIntegration:true, XSS umożliwia bezpośrednie wywołanie require('child_process'), co przekłada się na pełne RCE na hoście.

Skutki

Atakujący posiadający dostęp do zapisu w synchronizowanym workspace'ie może jednorazowo umieścić payload, który wykona się na każdym urządzeniu ofiary otwierającym panel z zainfekowanym wierszem — na desktopie Electron skutkiem jest pełne przejęcie kontroli nad systemem operacyjnym (RCE), natomiast w kontekście przeglądarki — wykonanie dowolnego JavaScript w sesji ofiary.

Mitygacja

Należy zaktualizować SiYuan do wersji 3.7.0 lub nowszej, w której wprowadzono poprawne escapowanie wartości komórek w rendererze genAVValueHTML. Zaleca się również przegląd synchronizowanych workspace'ów pod kątem obecności złośliwych payloadów w komórkach baz danych.

Kogo dotyczy

SiYuan w wersjach wcześniejszych niż 3.7.0 (wszystkie platformy korzystające z renderera attribute-view); szczególnie narażona jest wersja desktopowa oparta na Electron z włączoną opcją nodeIntegration:true

Uwagi

Podatność dotyczy scenariusza, w którym atakujący musi posiadać dostęp do zapisu w synchronizowanym workspace'ie. Poprawka została wprowadzona w wersji 3.7.0 zgodnie z informacją w opisie. Brak escapowania po stronie kernela (w przeciwieństwie do istniejącej ochrony block IAL attributes w kernel/model/blockial.go:261) sprawia, że złośliwy payload utrzymuje się i replikuje przez mechanizm synchronizacji.

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
🔵
ZWERYFIKUJ U PRODUCENTA
Brak jednoznacznych danych o patchu. Sprawdź referencje od producenta.
Tagi
XSS
CWE
Referencje