{"id":"CVE-2026-124476","kind":"vulnerability","aliases":["CVE-2026-124476"],"related":[],"title":"OpenEMR: authenticated patients can forge payment records for other patients","description":"OpenEMR before 8.3.0 contains an insecure direct object reference in portal/lib/paylib.php, which writes the request-supplied form_pid (or the patient_id_cc value in Sphere data) to onsite_portal_activity without checking it against the session patient. Authenticated portal patients can submit portal-save, review-save, AuthorizeNet, Stripe, or Sphere requests to insert or modify forged payment-audit records in other patients' billing records.","summary":"OpenEMR, an electronic health records system, lets a logged-in patient portal user submit a patient ID that is not checked against their own session. An attacker can insert or change payment-audit records in other patients' billing data.","severity":"high","cvss":7.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["healthcare","openemr","other","php","self-hosted"],"not_affected_if":["patient-portal-disabled","version-8.3.0-or-later"],"how_to_check":"- Check the OpenEMR version with the installed `version.php` or the admin About page; versions before `8.3.0` are affected\n- Confirm whether the patient portal is enabled for patients (portal settings in the admin panel)","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:33+00:00","updated_at":"2026-11-08T14:49:33+00:00","category":"other","confidence":0.7,"triage":{"at":"2026-11-08T14:49:33Z","model":"claude-haiku-5-5","output":{"fix":"- OpenEMR: move to `8.3.0` or later","reach":"internet","title":"OpenEMR: authenticated patients can forge payment records for other patients","impact":"medium","summary":"OpenEMR, an electronic health records system, lets a logged-in patient portal user submit a patient ID that is not checked against their own session. An attacker can insert or change payment-audit records in other patients' billing data.","audience":"businesses","category":"other","nicknames":[],"who_cares":["openemr","healthcare","self-hosted","php"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"Forged payment audit records inserted into other patients' billing data","analyst_note":"","how_to_check":"- Check the OpenEMR version with the installed `version.php` or the admin About page; versions before `8.3.0` are affected\n- Confirm whether the patient portal is enabled for patients (portal settings in the admin panel)","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["version-8.3.0-or-later","patient-portal-disabled"],"who_is_affected":"Clinics and practices that run OpenEMR before 8.3.0 with the patient portal enabled and payment features (AuthorizeNet, Stripe or Sphere) in use. An attacker needs a portal patient account, so sites without patient portal logins are lower risk.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.00072,"input_tokens":4651,"output_tokens":510,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-124476':13A,16A '-2026':12A,15A '8.3.0':67C 'activ':96C 'attack':51B 'audit':58B,127C 'authent':2A,104C 'authorizenet':115C 'bill':63B,132C 'cc':88C 'chang':55B 'check':45B,98C 'contain':68C 'cve':11A,14A 'data':64B,92C 'direct':71C 'electron':26B 'forg':5A,124C 'form':82C 'health':27B 'healthcar':17B 'host':23B 'id':41B,87C 'insecur':70C 'insert':53B,121C 'let':30B 'log':33B 'logged-in':32B 'modifi':123C 'object':72C 'onsit':94C 'openemr':1A,18B,24B,65C 'patient':3A,10A,35B,40B,62B,86C,103C,106C,131C 'payment':6A,57B,126C 'payment-audit':56B,125C 'php':20B 'pid':83C 'portal':36B,95C,105C,110C 'portal-sav':109C 'portal/lib/paylib.php':75C 'record':7A,28B,59B,128C,133C 'refer':73C 'request':80C,119C 'request-suppli':79C 'review':113C 'review-sav':112C 'save':111C,114C 'self':22B 'self-host':21B 'session':49B,102C 'sphere':91C,118C 'stripe':116C 'submit':38B,108C 'suppli':81C 'system':29B 'user':37B 'valu':89C 'without':97C 'write':77C","nicknames":[],"mitigations":[],"who_affected":"Clinics and practices that run OpenEMR before 8.3.0 with the patient portal enabled and payment features (AuthorizeNet, Stripe or Sphere) in use. An attacker needs a portal patient account, so sites without patient portal logins are lower risk.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["healthcare","high","openemr","other","php","selfhosted"],"campaign_type":null,"search_a":"'-124476':13A,16A '-2026':12A,15A 'authent':2A 'cve':11A,14A 'forg':5A 'openemr':1A 'patient':3A,10A 'payment':6A 'record':7A","search_b":"'attack':51B 'audit':58B 'bill':63B 'chang':55B 'check':45B 'data':64B 'electron':26B 'health':27B 'healthcar':17B 'host':23B 'id':41B 'insert':53B 'let':30B 'log':33B 'logged-in':32B 'openemr':18B,24B 'patient':35B,40B,62B 'payment':57B 'payment-audit':56B 'php':20B 'portal':36B 'record':28B,59B 'self':22B 'self-host':21B 'session':49B 'submit':38B 'system':29B 'user':37B","search_c":"'8.3.0':67C 'activ':96C 'audit':127C 'authent':104C 'authorizenet':115C 'bill':132C 'cc':88C 'check':98C 'contain':68C 'data':92C 'direct':71C 'forg':124C 'form':82C 'id':87C 'insecur':70C 'insert':121C 'modifi':123C 'object':72C 'onsit':94C 'openemr':65C 'patient':86C,103C,106C,131C 'payment':126C 'payment-audit':125C 'pid':83C 'portal':95C,105C,110C 'portal-sav':109C 'portal/lib/paylib.php':75C 'record':128C,133C 'refer':73C 'request':80C,119C 'request-suppli':79C 'review':113C 'review-sav':112C 'save':111C,114C 'session':102C 'sphere':91C,118C 'stripe':116C 'submit':108C 'suppli':81C 'valu':89C 'without':97C 'write':77C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-08-18T09:09:06+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/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-124476","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-124476","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":102140,"url":"https://github.com/openemr/openemr/security/advisories/GHSA-c9wg-vrr9-65wj","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-08-18T09:09:06+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":102141,"url":"https://www.vulncheck.com/advisories/openemr-before-8.3.0-idor-via-form-pid-in-portal-lib-paylib-php","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"}