以下是该网页截图中关于漏洞的关键信息总结: --- 漏洞概述 标题:THE RAW ECHO — STORED XSS IN OPENEMR 8.0.0.3 AND 8.2.0 PORTAL TEMPLATES CHAINS TO SESSION HIJACKING 作者:Jiva 目标系统:OpenEMR 8.0.0.3 和 8.2.0(验证于这两个版本) 权限要求:管理员(admin/forms ACL)、患者门户用户(patient portal owner) 严重性:高(CVSS 8.1) CVSS 向量:AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:A/N 状态:未修复(截至 8.2.0 最新稳定版) 系列:第五部分(共五部分) TL;DR 攻击者(具备模板管理权限的管理员)可存储任意 HTML 和 JavaScript 到门户文档模板中。当任何授权用户通过门户检索模板时,内容以原始 HTML 形式返回(无输出编码、无 CSP 策略)。由于 OpenEMR 管理员会话 cookie 缺少 标志,存储型 XSS 可窃取任何用户(包括其他管理员)的会话令牌,实现会话劫持。 --- 影响范围 受影响组件: 的 模式(行 64–71) 漏洞机制: - 模式直接 ,无任何 HTML 编码或 CSP。 - 模式仅阻止 和 标签,不阻止 、事件处理器(如 )、 URI 或 HTML sanitizer。 - 无 CSRF 保护(但需合法 CSRF token),非跨站攻击障碍。 - 无输出编码 + 无 CSP → 存储型 XSS 可执行任意 JS。 会话劫持: - 会话 cookie 无 标志 → 可被 JS 读取。 - 仅防跨站请求伪造,不防同源 XSS 读取 cookie。 - 攻击者可通过 窃取 cookie。 IDOR 辅助: - 模式允许任意用户通过递增 ID 获取任意模板(无需分配权限)。 - 低权限患者可枚举所有模板并触发 XSS。 - 管理员/临床医生查看患者提交时也会触发 XSS,从而窃取管理员会话。 --- 修复方案 1. 设置 标志于 OpenEMR 会话 cookie 在 PHP 会话配置中( 在 或 ),防止 JS 读取 cookie。 > ⚠️ 注意:即使设置 ,仍可通过 CSRF 执行 JS(但无法窃取 cookie)。 2. 在 模式处理器中编码输出 修改 中 部分: 或强制浏览器下载而非渲染: 3. 使用 allowlist HTML sanitizer 进行保存时 sanitization 当前 仅阻止 PHP 标签,应使用 HTML Purifier 或类似工具,允许安全标签(如 , , ),剥离 、事件处理器、 URI 等。 > ✅ 这是应始终实施的防御措施,不应依赖两行 检查。 4. (附加)在 模式中添加所有权验证 在返回模板前,验证请求用户是否被分配该模板(防止 IDOR 枚举)。 --- POC / 利用代码 存储 Payload(管理员操作) 触发 XSS(任意用户操作) 响应示例: 窃取 Cookie(攻击者服务器) --- 补充说明 此漏洞是 OpenEMR 8.0.0.3 系列五部分研究中的第五部分。 前四部分涉及 OAuth2 和 SQL 注入。 医疗软件中此类漏洞影响重大:可访问患者记录、保险覆盖、就业决定等敏感数据。 OpenEMR 开源且活跃维护,建议尽快应用修复。 --- ✅ 关键修复优先级: 1. 设置 (最高杠杆) 2. 编码 输出(立即缓解) 3. 使用 HTML sanitizer(根本解决) 4. 添加所有权验证(防止 IDOR)