{"id":"CVE-2026-124475","kind":"vulnerability","aliases":["CVE-2026-124475"],"related":[],"title":"OpenEMR: patient portal flaw lets patients change other patients' settings","description":"OpenEMR before 8.3.0 contains an insecure direct object reference vulnerability in portal/lib/persist.php that allows authenticated portal patients to modify other patients' settings by supplying an arbitrary setting_patient value. Attackers can insert or overwrite patient_settings rows for victims to suppress notifications, tamper with consent flags, or alter portal preferences.","summary":"OpenEMR before 8.3.0 has an insecure direct object reference in portal/lib/persist.php, where a supplied setting_patient value is not checked against the logged-in patient. An authenticated patient portal user can insert or overwrite patient_settings rows for other patients, suppressing notifications, changing consent flags or altering portal preferences.","severity":"high","cvss":7.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["healthcare","openemr","patient-portal","runtime","self-hosted"],"not_affected_if":["openemr-8.3.0-or-later","portal-disabled"],"how_to_check":"- Check the installed OpenEMR version; versions before `8.3.0` are in the affected range.\n- Look for `portal/lib/persist.php` in the OpenEMR install and whether the patient portal is enabled.","fix":"- OpenEMR: move to `8.3.0` or later.","status":"open","published_at":"2026-11-08T14:18:16+00:00","first_seen_at":"2026-11-08T14:48:41+00:00","triaged_at":"2026-11-08T14:49:35+00:00","updated_at":"2026-11-08T14:49:35+00:00","category":"runtime","confidence":0.7,"triage":{"at":"2026-11-08T14:49:35Z","model":"claude-haiku-5-5","output":{"fix":"- OpenEMR: move to `8.3.0` or later.","reach":"network","title":"OpenEMR: patient portal flaw lets patients change other patients' settings","impact":"medium","summary":"OpenEMR before 8.3.0 has an insecure direct object reference in portal/lib/persist.php, where a supplied setting_patient value is not checked against the logged-in patient. An authenticated patient portal user can insert or overwrite patient_settings rows for other patients, suppressing notifications, changing consent flags or altering portal preferences.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["openemr","healthcare","self-hosted","patient-portal"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"patient settings and consent flags of other patients altered","analyst_note":"","how_to_check":"- Check the installed OpenEMR version; versions before `8.3.0` are in the affected range.\n- Look for `portal/lib/persist.php` in the OpenEMR install and whether the patient portal is enabled.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["portal-disabled","openemr-8.3.0-or-later"],"who_is_affected":"Clinics and health organisations running OpenEMR before 8.3.0 with the patient portal enabled. Installations without the patient portal, or on 8.3.0 or later, are not exposed; the sources do not say whether other configurations are affected.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.000737,"input_tokens":4623,"output_tokens":549,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-124475':13A,16A '-2026':12A,15A '8.3.0':28B,78C 'allow':89C 'alter':73B,123C 'arbitrari':101C 'attack':105C 'authent':53B,90C 'chang':7A,69B 'check':45B 'consent':70B,120C 'contain':79C 'cve':11A,14A 'direct':32B,82C 'flag':71B,121C 'flaw':4A 'healthcar':17B 'host':25B 'insecur':31B,81C 'insert':58B,107C 'let':5A 'log':49B 'logged-in':48B 'modifi':94C 'notif':68B,117C 'object':33B,83C 'openemr':1A,18B,26B,76C 'overwrit':60B,109C 'patient':2A,6A,9A,20B,41B,51B,54B,61B,66B,92C,96C,103C,110C 'patient-port':19B 'portal':3A,21B,55B,74B,91C,124C 'portal/lib/persist.php':36B,87C 'prefer':75B,125C 'refer':34B,84C 'row':63B,112C 'runtim':22B 'self':24B 'self-host':23B 'set':10A,40B,62B,97C,102C,111C 'suppli':39B,99C 'suppress':67B,116C 'tamper':118C 'user':56B 'valu':42B,104C 'victim':114C 'vulner':85C","nicknames":[],"mitigations":[],"who_affected":"Clinics and health organisations running OpenEMR before 8.3.0 with the patient portal enabled. Installations without the patient portal, or on 8.3.0 or later, are not exposed; the sources do not say whether other configurations are affected.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["healthcare","high","openemr","patientportal","runtime","selfhosted"],"campaign_type":null,"search_a":"'-124475':13A,16A '-2026':12A,15A 'chang':7A 'cve':11A,14A 'flaw':4A 'let':5A 'openemr':1A 'patient':2A,6A,9A 'portal':3A 'set':10A","search_b":"'8.3.0':28B 'alter':73B 'authent':53B 'chang':69B 'check':45B 'consent':70B 'direct':32B 'flag':71B 'healthcar':17B 'host':25B 'insecur':31B 'insert':58B 'log':49B 'logged-in':48B 'notif':68B 'object':33B 'openemr':18B,26B 'overwrit':60B 'patient':20B,41B,51B,54B,61B,66B 'patient-port':19B 'portal':21B,55B,74B 'portal/lib/persist.php':36B 'prefer':75B 'refer':34B 'row':63B 'runtim':22B 'self':24B 'self-host':23B 'set':40B,62B 'suppli':39B 'suppress':67B 'user':56B 'valu':42B","search_c":"'8.3.0':78C 'allow':89C 'alter':123C 'arbitrari':101C 'attack':105C 'authent':90C 'consent':120C 'contain':79C 'direct':82C 'flag':121C 'insecur':81C 'insert':107C 'modifi':94C 'notif':117C 'object':83C 'openemr':76C 'overwrit':109C 'patient':92C,96C,103C,110C 'portal':91C,124C 'portal/lib/persist.php':87C 'prefer':125C 'refer':84C 'row':112C 'set':97C,102C,111C 'suppli':99C 'suppress':116C 'tamper':118C 'valu':104C 'victim':114C 'vulner':85C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-08-18T09:09:30+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-124475","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-124475","severity":null,"published_at":"2026-11-08T14:18:16+00:00","modified_at":"2026-11-08T14:18:16+00:00","first_seen_at":"2026-11-08T14:48:41+00:00","fetched_at":"2026-11-08T14:48:41+00:00","note":null}],"documents":[{"id":102138,"url":"https://github.com/openemr/openemr/security/advisories/GHSA-jvhx-fg6j-8c9x","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-08-18T09:09:30+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":102139,"url":"https://www.vulncheck.com/advisories/openemr-before-8.3.0-idor-via-portal-lib-persist-php-setting-patient","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}