CVE-2026-104138 in OpenEMRinfo

Summary

by MITRE • 11/05/2026

OpenEMR is a free and open source electronic health records and medical practice management application. Prior to 8.3.0, custom/ajax_download.php, custom/download_qrda.php, custom/export_qrda_xml.php, and custom/qrda_download.php validate CSRF but do not enforce the patients/med ACL used by the canonical CQM report page. The endpoints also accept an unscoped report_id, allowing a low-privilege authenticated user to reach report generation and download logic for other reports. In a clinic with generated CQM reports, this can expose QRDA Category One and Category Three clinical documents for patients in a measure. This issue is fixed in version 8.3.0.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 11/05/2026

OpenEMR serves as a widely deployed open-source electronic health records system designed to manage medical practice workflows and patient data. A critical security deficiency was identified within the application's report generation and download functionality prior to version 8.3.0, specifically affecting endpoints such as custom/ajax_download.php, custom/download_qrda.php, custom/export_qrda_xml.php, and custom/qrda_download.php. While these specific scripts implemented Cross-Site Request Forgery protections by validating CSRF tokens, they failed to enforce the standard Access Control List mechanisms that govern patient data visibility. This architectural inconsistency creates a significant authorization bypass vulnerability where the application's security model is fragmented between different functional modules.

The core technical flaw lies in the failure of these download endpoints to validate whether the authenticated user has permission to access the specific medical records associated with the requested report. Unlike the canonical Clinical Quality Measurement CQM report page, which correctly restricts data visibility based on role-based and patient-specific ACL rules, the QRDA export functions accept an unscoped report_id parameter without sufficient verification of ownership or privilege levels. This allows a low-privilege authenticated user to manipulate input parameters to reference reports belonging to other patients within the same measure group. By supplying arbitrary identifiers for reports that are not associated with their authorized patient set, attackers can bypass intended data isolation boundaries and trigger the generation and retrieval of sensitive clinical documents.

The operational impact of this vulnerability is severe due to the nature of QRDA (Quality Reporting Document Architecture) files. These endpoints expose QRDA Category One and Category Three clinical documents, which contain comprehensive structured health information including diagnoses, procedures, medications, and laboratory results for patients enrolled in specific quality measures. In a clinic environment where multiple providers share access to patient records under strict role-based constraints, this flaw enables unauthorized data exfiltration. An attacker with minimal privileges can systematically enumerate report identifiers or exploit known patterns to download detailed medical histories of other patients, leading to significant breaches of patient confidentiality and potential violations of regulatory frameworks such as HIPAA in the United States or GDPR in Europe.

This vulnerability is best classified under CWE-284 Improper Access Control, specifically reflecting a failure to enforce proper restrictions on unauthenticated users regarding access to restricted data. From an offensive security perspective aligned with the MITRE ATT&CK framework, this behavior corresponds to T1078 Valid Accounts and potentially T1530 Data from Cloud Storage if the reports are considered stored artifacts, though it is more accurately described as a direct unauthorized access to sensitive information via broken object level authorization. The exploitation does not require complex network manipulation or injection techniques but relies on simple parameter tampering by an already authenticated user, highlighting the importance of consistent security checks across all application endpoints regardless of their perceived complexity or function.

To mitigate this risk, organizations running OpenEMR versions prior to 8.3.0 must upgrade immediately to version 8.3.0 or later where these access control inconsistencies have been resolved. For environments that cannot patch immediately due to operational constraints, administrators should implement strict network-level controls such as web application firewalls configured to monitor and restrict direct access to the vulnerable PHP scripts by IP address or user agent if feasible. Additionally, auditing logs for unusual patterns of report downloads from low-privilege accounts can help detect ongoing exploitation attempts. It is also advisable to review other custom modules within OpenEMR that handle sensitive data exports to ensure they adhere to the same rigorous ACL enforcement standards as the canonical reporting pages, thereby closing similar gaps in the application's security posture.

Responsible

GitHub M

Reservation

10/01/2026

Disclosure

11/05/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

low

Sources

Want to know what is going to be exploited?

We predict KEV entries!