{"id":"CVE-2026-104138","kind":"vulnerability","aliases":["CVE-2026-104138"],"related":[],"title":"OpenEMR: low-privilege users can download other clinics' QRDA patient reports","description":"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.","summary":"OpenEMR's custom QRDA report download endpoints skip the patients/med access check and accept any report_id, so a low-privilege logged-in user can fetch report files they should not see. Those files can contain clinical documents for patients in a measure.","severity":"medium","cvss":6.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["healthcare","openemr","php","runtime","self-hosted"],"not_affected_if":["no-qrda-reports","version-8.3.0-or-later"],"how_to_check":"- Check the OpenEMR version in the installed application; versions before `8.3.0` are in scope.\n- Look for `custom/ajax_download.php`, `custom/download_qrda.php`, `custom/export_qrda_xml.php` and `custom/qrda_download.php` in the install.","fix":"- OpenEMR: upgrade to `8.3.0`","status":"open","published_at":"2026-11-05T20:17:39+00:00","first_seen_at":"2026-11-05T20:40:44+00:00","triaged_at":"2026-11-05T20:43:20+00:00","updated_at":"2026-11-05T20:43:20+00:00","category":"runtime","confidence":0.7,"triage":{"at":"2026-11-05T20:43:20Z","model":"claude-haiku-5-5","output":{"fix":"- OpenEMR: upgrade to `8.3.0`","reach":"network","title":"OpenEMR: low-privilege users can download other clinics' QRDA patient reports","impact":"medium","summary":"OpenEMR's custom QRDA report download endpoints skip the patients/med access check and accept any report_id, so a low-privilege logged-in user can fetch report files they should not see. Those files can contain clinical documents for patients in a measure.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["openemr","healthcare","self-hosted","php"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"low-privilege user reads QRDA clinical documents for other patients","analyst_note":"","how_to_check":"- Check the OpenEMR version in the installed application; versions before `8.3.0` are in scope.\n- Look for `custom/ajax_download.php`, `custom/download_qrda.php`, `custom/export_qrda_xml.php` and `custom/qrda_download.php` in the install.","plain_action":"","needs_analyst":false,"not_affected_if":["no-qrda-reports","version-8.3.0-or-later"],"who_is_affected":"Clinics and practices that run OpenEMR 8.2 or earlier and generate CQM/QRDA reports are exposed to any authenticated user with a low-privilege role. Installations that do not use these custom endpoints or do not generate QRDA reports are less exposed. unknown whether the sources list other conditions.","user_interaction":"unknown","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000721,"input_tokens":4374,"output_tokens":568,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-104138':15A,18A '-2026':14A,17A '8.3.0':88C,164C 'accept':39B,113C 'access':36B 'acl':102C 'allow':118C 'also':112C 'applic':85C 'authent':123C 'canon':106C 'categori':146C,149C 'check':37B 'clinic':9A,64B,137C,151C 'contain':63B 'cqm':107C,140C 'csrf':95C 'custom':28B 'custom/ajax_download.php':89C 'custom/download_qrda.php':90C 'custom/export_qrda_xml.php':91C 'custom/qrda_download.php':93C 'cve':13A,16A 'document':65B,152C 'download':7A,31B,130C 'electron':78C 'endpoint':32B,111C 'enforc':99C 'expos':144C 'fetch':53B 'file':55B,61B 'fix':161C 'free':74C 'generat':128C,139C 'health':79C 'healthcar':19B 'host':25B 'id':42B,117C 'issu':159C 'log':49B 'logged-in':48B 'logic':131C 'low':3A,46B,121C 'low-privileg':2A,45B,120C 'manag':84C 'measur':70B,157C 'medic':82C 'one':147C 'open':76C 'openemr':1A,20B,26B,71C 'page':109C 'patient':11A,67B,154C 'patients/med':35B,101C 'php':21B 'practic':83C 'prior':86C 'privileg':4A,47B,122C 'qrda':10A,29B,145C 'reach':126C 'record':80C 'report':12A,30B,41B,54B,108C,116C,127C,134C,141C 'runtim':22B 'see':59B 'self':24B 'self-host':23B 'skip':33B 'sourc':77C 'three':150C 'unscop':115C 'use':103C 'user':5A,51B,124C 'valid':94C 'version':163C","nicknames":[],"mitigations":[],"who_affected":"Clinics and practices that run OpenEMR 8.2 or earlier and generate CQM/QRDA reports are exposed to any authenticated user with a low-privilege role. Installations that do not use these custom endpoints or do not generate QRDA reports are less exposed. unknown whether the sources list other conditions.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["healthcare","medium","openemr","php","runtime","selfhosted"],"campaign_type":null,"first_public_at":"2026-08-18T08:53:49+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-104138","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-104138","severity":null,"published_at":"2026-11-05T20:17:39+00:00","modified_at":"2026-11-05T20:17:39+00:00","first_seen_at":"2026-11-05T20:40:44+00:00","fetched_at":"2026-11-05T20:40:44+00:00","note":null}],"documents":[{"id":79813,"url":"https://github.com/openemr/openemr/commit/7973cab3fe3f2fd2374ed71c02605e3c93491c36","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":79793,"url":"https://github.com/openemr/openemr/releases/tag/v8_3_0","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":79830,"url":"https://github.com/openemr/openemr/security/advisories/GHSA-6p9h-59cp-8hxj","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-08-18T08:53:49+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}