CVE-2026-25131

8.8 HIGH

📋 TL;DR

OpenEMR versions before 8.0.0 contain a broken access control vulnerability that allows low-privilege users (like Receptionist role) to add and modify medical procedure types without proper authorization. This occurs through the /openemr/interface/orders/types_edit.php endpoint. Healthcare organizations using vulnerable OpenEMR installations are affected.

💻 Affected Systems

Products:
  • OpenEMR
Versions: All versions prior to 8.0.0
Operating Systems: All platforms running OpenEMR
Default Config Vulnerable: ⚠️ Yes
Notes: Affects all OpenEMR installations with default role-based access control configurations where Receptionist or similar low-privilege roles exist.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Unauthorized users could modify critical medical procedure types, potentially leading to incorrect billing, treatment errors, or data integrity issues affecting patient care.

🟠

Likely Case

Low-privilege users gain unauthorized access to modify procedure types, potentially causing billing discrepancies or workflow disruptions.

🟢

If Mitigated

With proper access controls, only authorized medical staff can modify procedure types, maintaining data integrity.

🌐 Internet-Facing: HIGH if OpenEMR is exposed to internet, as authenticated low-privilege users could exploit this vulnerability remotely.
🏢 Internal Only: HIGH as internal users with Receptionist or similar low-privilege accounts can exploit this vulnerability.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated access with any low-privilege account. The vulnerability is in a specific endpoint with predictable functionality.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 8.0.0

Vendor Advisory: https://github.com/openemr/openemr/security/advisories/GHSA-6h2m-4ppf-ph4j

Restart Required: No

Instructions:

1. Backup your OpenEMR installation and database. 2. Download OpenEMR version 8.0.0 or later from the official repository. 3. Follow the OpenEMR upgrade documentation to apply the update. 4. Verify the patch by checking that the /openemr/interface/orders/types_edit.php endpoint now properly validates user permissions.

🔧 Temporary Workarounds

Restrict access to vulnerable endpoint

all

Temporarily block or restrict access to the /openemr/interface/orders/types_edit.php endpoint using web server configuration or firewall rules.

# Apache: Add to .htaccess or virtual host config
<Location "/openemr/interface/orders/types_edit.php">
    Require all denied
</Location>
# Nginx: Add to server block
location = /openemr/interface/orders/types_edit.php {
    deny all;
    return 403;
}

Modify role permissions

all

Temporarily remove or restrict permissions for low-privilege roles to access order management functions.

# Requires modifying OpenEMR role configuration
# Navigate to Administration > Users > ACL Setup
# Review and modify permissions for Receptionist and similar roles

🧯 If You Can't Patch

  • Implement strict network segmentation to isolate OpenEMR from untrusted networks.
  • Enforce principle of least privilege by reviewing and minimizing permissions for all low-privilege user accounts.

🔍 How to Verify

Check if Vulnerable:

Check if your OpenEMR version is below 8.0.0 by visiting the OpenEMR interface and checking the version in the footer or administration section.

Check Version:

Check the OpenEMR version by examining the footer text in the web interface or checking the /openemr/interface/login/login.php page source for version information.

Verify Fix Applied:

After upgrading to 8.0.0 or later, verify that low-privilege users cannot access or modify procedure types through the orders interface.

📡 Detection & Monitoring

Log Indicators:

  • Unusual POST requests to /openemr/interface/orders/types_edit.php from low-privilege user accounts
  • Multiple failed authorization attempts followed by successful access to order management functions

Network Indicators:

  • HTTP POST requests to the vulnerable endpoint from unexpected source IPs or user roles

SIEM Query:

source="openemr_access.log" AND (uri="/openemr/interface/orders/types_edit.php" AND user_role="receptionist" OR user_role="low_privilege")

🔗 References

📤 Share & Export