
Kotaemonは、PDF、Word、Excelなどのアップロードされた文書を照会するためのWebインターフェースを提供する、オープンソースのRAG(Retrieval-Augmented Generation:検索拡張生成)ベースの文書QAシステムです。
Kotaemonの文書レンダリングパイプラインには、格納型クロスサイトスクリプティング(XSS)の脆弱性が存在します。 ユーザーが制御するコンテンツはLLMによって処理され、適切なサニタイズなしにMarkdownからHTMLへの変換後にWebインターフェースでレンダリングされるため、攻撃者が供給したHTML要素をページに永続的に注入することが可能です。
文書がアップロードされると、システムは通常の処理フローの一部として自動的に要約リクエスト(例:「summary this file」)をトリガーします。その結果、アップロードされた文書は暗黙的にMarkdown解析・レンダリングパイプラインを通過するため、明示的なユーザー操作を必要とせず、文書のアップロードだけで本脆弱性を悪用できます。
脆弱性が確認されているKotaemonのバージョンは以下のとおりです:
kotaemon/blob/main/libs/ktem/ktem/utils/render.py
@staticmethod
def table(text: str) -> str:
"""Render table from markdown format into HTML"""
text = replace_mardown_header(text)
return markdown.markdown(
text,
extensions=[
"markdown.extensions.tables",
"markdown.extensions.fenced_code",
],
)
アプリケーションは、LLMが生成したMarkdownコンテンツをHTMLに変換するために、markdown.markdown()関数に依存しています。 しかし、変換されたHTML出力は、HTMLサニタイズや出力エスケープなしにブラウザで直接レンダリングされます。
その結果、生のHTML要素を生成するMarkdown構文(特に画像構文 ![]())が `` タグなどの実行可能なHTMLに変換され、会話出力に保存されます。
"summary" means ""
永続的なHTML要素を注入できる能力により、攻撃者は以下が可能になります:
/logout)悪用には文書のアップロードのみが必要で、追加のユーザー操作なしに、要約処理中に自動的に発生します。
サニタイズされていないHTMLレンダリングにより、フロントエンドのレンダリングコンテキストによっては、イベントハンドラを介したJavaScriptの実行が可能になる場合があります。



このレポートはminnggyuuによって作成されました。(Team 404 Not Found、WhiteHat School 第3期生、韓国)
Email: [email protected]
GitHub: https://github.com/minnggyuu