概要
SiYuan は ローカル ファースト の 個人 ナレッジ マネジメント システム です。バージョン 3.6.0 以前 に おいて、パッケージ の README ファイル を レンダリング する renderREADME 関数 に クロスサイト スクリプティング(CWE-79)の 脆弱性 が 存在 します。この 脆弱性 は CVSS スコア 9.0 の Critical と 評価 されて います。
renderREADME 関数 は、Go 言語 の Markdown パーサー で ある lute を 使用 して パッケージ の README ファイル を HTML に 変換 して います。しかし、lute.New() を 呼び出す 際 に SetSanitize(true) が 設定 されて いない ため、Markdown 内 に 記述 された 生 の HTML タグ が サニタイズ されず に そのまま HTML 出力 に 含まれます。さらに、フロントエンド 側 で は、この レンダリング 結果 を innerHTML に 直接 代入 して いる ため、HTML エスケープ が 一切 行われません。
この 二重 の サニタイズ 不備 に より、悪意 の ある パッケージ 作者 が README ファイル に JavaScript コード を 埋め込む こと が 可能 です。ユーザー が SiYuan の パッケージ マネージャー(Bazaar)で その パッケージ の README を 閲覧 した 時点 で、埋め込まれた スクリプト が 実行 されます。SiYuan は Electron ベース で あり、nodeIntegration: true の 設定 で 動作 する ため、XSS は 直接 リモートコード 実行(RCE)に エスカレート します。攻撃者 は ファイル システム へ の アクセス、任意 コマンド の 実行、ユーザー データ の 窃取 など が 可能 と なります。
この 攻撃 は ソーシャル エンジニアリング 的 な 要素 を 含みますが、パッケージ の README を 閲覧 する と いう 日常的 な 操作 で トリガー される ため、ユーザー が 気づく こと は 困難 です。信頼 できない パッケージ ソース に 注意 が 必要 です。
CVSS ベクトル
| 項目 | 値 |
|---|---|
| CVSS スコア | 9.0 |
| 深刻度 | Critical |
| CWE | CWE-79(クロスサイト スクリプティング) |
| 攻撃元 | ネットワーク |
| 影響 | 機密性 高 / 完全性 高 / 可用性 高 |
影響 を 受ける ソフトウェア
| 製品 | 影響 バージョン | 修正 バージョン |
|---|---|---|
| SiYuan | 3.6.0 以前 | 3.6.1 |
修正 バージョン と 回避策
SiYuan バージョン 3.6.1 で は、renderREADME 関数 に おいて SetSanitize(true) が 有効化 され、Markdown 内 の 生 HTML が 適切 に サニタイズ される よう に 修正 されて います。速やか に バージョン 3.6.1 以降 に アップデート して ください。すぐ に アップデート できない 場合 は、SiYuan の Bazaar(パッケージ マーケットプレイス)から の パッケージ インストール を 控え、信頼 できない パッケージ の README を 閲覧 しない よう に して ください。ネットワーク レベル で SiYuan の パッケージ リポジトリ へ の アクセス を 制限 する こと も 暫定 的 な 対策 と なります。
関連 リンク
データソース: NVD (NIST), GitHub Advisory Database AI解説 は Claude API に より 自動生成 されています。正確性 に ついては 原文 を ご確認 ください。
