Skip to content

Javadoc由来のMarkdownが未サニタイズでinnerHTMLに注入される(XSS) #1115

Description

@irof

事象

解析対象コードの Javadoc 由来テキストを marked でパースした結果を、サニタイズなしで innerHTML に注入している。mermaid も securityLevel: "loose" で初期化している。

該当箇所

main (a3ad929) 時点:

  • jig-core/src/main/resources/templates/assets/jig-dom.js:75-79
  • jig-core/src/main/resources/templates/assets/jig-mermaid.js:946, 1211, 1497
function createMarkdownElement(markdown) {
    const element = createElement("div", {
        className: "markdown",
        innerHTML: parseMarkdown(markdown)
    });

失敗シナリオ

marked v15 はサニタイズしないため、<img src=x onerror=...> を含む Javadoc(サードパーティ依存や悪意あるコミット)が、生成レポートを開いたチームメンバーのブラウザでスクリプト実行される。

修正案

DOMPurify 等のサニタイザを併用する。mermaid の securityLevel も既定(strict)に戻せないか検証する。CDN 依存のため、サニタイザ導入とあわせてアセットのバンドル同梱も検討の価値あり(オフライン環境対応にもなる)。


🤖 この issue は Claude Code のコードレビューにより作成されました。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugうまく動かない

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions