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 のコードレビューにより作成されました。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugうまく動かない

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions