IPBUF安全漏洞报告
English
CVE-2026-33931 CVSS 6.5 中危

OpenEMR IDOR漏洞致患者支付数据泄露

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-33931
漏洞类型
不安全的直接对象引用 (IDOR)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OpenEMR

相关标签

IDOROpenEMR信息泄露权限绕过医疗数据

漏洞概述

OpenEMR是一款免费的开源电子健康记录及医疗管理应用。在8.0.0.3版本之前,其患者门户支付页面存在不安全的直接对象引用(IDOR)漏洞。攻击者仅需拥有任意低权限患者账号,便可通过篡改URL参数访问其他患者的支付记录,窃取账单数据及支付卡元数据等敏感信息,造成严重隐私泄露。

技术细节

该漏洞源于OpenEMR患者门户支付页面(portal/portal_payment.php)在处理支付记录请求时,缺乏对数据归属权的严格校验,存在不安全的直接对象引用(IDOR)缺陷。系统直接使用客户端提交的`recid`查询参数作为数据库检索的主键,而未在服务端验证该参数所指向的记录是否归属于当前已认证的会话用户。攻击者在获取一个低权限的合法患者账号后,可以通过篡改HTTP请求中的`recid`参数,遍历或猜测其他患者的记录ID。由于访问控制缺失,服务器会直接返回对应ID的支付记录,包括发票、账单数据(受保护健康信息PHI)及支付卡元数据。这种漏洞利用无需复杂的社会工程学操作,仅需网络访问即可触发,严重威胁患者医疗隐私数据的机密性。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标系统使用OpenEMR,并确认存在患者门户入口。
STEP 2
2. 获取凭证
攻击者注册或通过非法手段获取一个合法的患者门户账号(低权限)。
STEP 3
3. 漏洞利用
攻击者使用该账号登录,并构造HTTP请求访问portal/portal_payment.php,同时遍历或猜测`recid`参数值。
STEP 4
4. 数据窃取
服务器由于缺乏权限校验,直接返回其他患者的支付记录和账单信息,攻击者成功获取敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL url = "http://target-openemr-site.com/portal/portal_payment.php" # Attacker's authenticated session cookie cookies = { "PHPSESSID": "valid_attacker_session_id" } # IDOR: Manipulating 'recid' to access another patient's record params = { "recid": "1001" # Victim's payment record ID } response = requests.get(url, params=params, cookies=cookies) if response.status_code == 200: print("[+] Successfully accessed victim's payment data:") print(response.text) else: print("[-] Failed to retrieve data")

影响范围

OpenEMR < 8.0.0.3

防御指南

临时缓解措施
建议立即升级至OpenEMR 8.0.0.3或更高版本以修补此漏洞。若无法立即升级,应在Web应用防火墙(WAF)中添加规则,阻止对`portal_payment.php`的异常参数请求,或在代码层面临时增加对`recid`参数归属权的校验逻辑。

参考链接

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