IPBUF安全漏洞报告
English
CVE-2026-33346 CVSS 8.7 高危

CVE-2026-33346 OpenEMR 存储型XSS漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-33346
漏洞类型
存储型跨站脚本 (XSS)
CVSS评分
8.7 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
OpenEMR

相关标签

XSSOpenEMR存储型XSSCVE-2026-33346Web安全

漏洞概述

OpenEMR 8.0.0.2之前的版本存在存储型XSS漏洞。该漏洞位于患者门户支付流程中,允许低权限用户通过`portal/lib/paylib.php`持久化存储任意JavaScript代码。当工作人员在`portal/portal_payment.php`审查支付提交时,恶意脚本将在其浏览器中自动执行,可能导致会话劫持或敏感信息泄露。

技术细节

该漏洞属于典型的存储型跨站脚本攻击(Stored XSS)。其根本原因是OpenEMR在处理患者门户支付数据时,未对用户提交的输入进行充分的过滤,且在后台页面渲染时未进行HTML实体编码。攻击者首先利用低权限的患者账户登录,通过`portal/lib/paylib.php`接口在支付流程中注入恶意JavaScript代码。该载荷被持久化存储在服务器数据库中。随后,当具有高权限的工作人员访问`portal/portal_payment.php`页面以审核支付记录时,系统会从数据库读取并直接显示该恶意内容,导致载荷在工作人员的浏览器上下文中执行。利用此漏洞,攻击者可窃取管理员的Session ID、Cookie或其他敏感信息,进而接管账户权限。

攻击链分析

STEP 1
1. 获取访问权限
攻击者注册或获取一个OpenEMR患者门户的低权限账户。
STEP 2
2. 注入恶意载荷
攻击者登录患者门户,在支付流程中通过`portal/lib/paylib.php`提交包含恶意JavaScript代码的支付数据。
STEP 3
3. 载荷持久化
由于系统未对输入数据进行适当过滤,恶意载荷被存储在数据库中。
STEP 4
4. 触发漏洞
工作人员或管理员登录后台,访问`portal/portal_payment.php`页面查看并审核该支付记录。
STEP 5
5. 执行攻击
页面渲染时未对数据进行转义,恶意JavaScript在工作人员的浏览器中执行,窃取Cookie或执行敏感操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-33346 OpenEMR Stored XSS // Payload to be injected into the payment flow (e.g., payment note field) // The vulnerable endpoint is portal/lib/paylib.php const xssPayload = '<img src=x onerror=alert(document.cookie)>'; // Simulate the vulnerable request // In a real attack, this would be a legitimate payment request with the payload injected let data = { "payment_method": "credit_card", "payment_note": xssPayload // Injecting malicious script here }; console.log("[+] Sending malicious payment request with payload:", xssPayload); // When a staff member visits portal/portal_payment.php to review the payment, // the XSS payload triggers and executes the alert.

影响范围

OpenEMR < 8.0.0.2

防御指南

临时缓解措施
建议管理员立即检查系统版本,若低于8.0.0.2,应立即应用官方补丁。在升级完成前,可暂时禁用患者门户的支付提交功能,或对工作人员审查支付页面的来源进行严格限制,以防遭受攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表