事象
解析対象コードの 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 のコードレビューにより作成されました。
事象
解析対象コードの Javadoc 由来テキストを marked でパースした結果を、サニタイズなしで
innerHTMLに注入している。mermaid もsecurityLevel: "loose"で初期化している。該当箇所
main (a3ad929) 時点:
jig-core/src/main/resources/templates/assets/jig-dom.js:75-79jig-core/src/main/resources/templates/assets/jig-mermaid.js:946, 1211, 1497失敗シナリオ
marked v15 はサニタイズしないため、
<img src=x onerror=...>を含む Javadoc(サードパーティ依存や悪意あるコミット)が、生成レポートを開いたチームメンバーのブラウザでスクリプト実行される。修正案
DOMPurify 等のサニタイザを併用する。mermaid の
securityLevelも既定(strict)に戻せないか検証する。CDN 依存のため、サニタイザ導入とあわせてアセットのバンドル同梱も検討の価値あり(オフライン環境対応にもなる)。🤖 この issue は Claude Code のコードレビューにより作成されました。