Advisory · CVE-2026-124445
OpenEMR one-time login tokens can be replayed to open patient portal sessions
OpenEMR 7.0.1 before 8.4.0 ignores the enforce_onetime_use and max_access_count flags in OneTimeAuth, never revokes consumed service_auth tokens, and checks login PINs without rate limiting or strict comparison, letting attackers replay a captured token or brute-force the PIN to open patient portal sessions exposing PHI, rated critical at CVSS 9.8; fixed in 8.4.0.
- Vendor
- OpenEMR
- Product
- OpenEMR
- Identifier / CWE
- CVE-2026-124445
CWE-307 - Action timing
- Immediate
Explain it like I’m five
OpenEMR hands out single-use login passes for the patient portal, like a ticket that should tear itself up after one use. The ticket never tears, and the PIN check can be guessed over and over, so anyone holding a used ticket can walk back in and read patient records.
- 01Token captured
An attacker obtains a service_auth token, for example from logs or a shared link.
- 02One-time check skipped
OneTimeAuth ignores the enforce_onetime_use and max_access_count flags.
- 03Token replayed
The consumed token is presented again and accepted.
- 04PIN brute-forced
The login PIN is guessed without rate limiting or strict comparison.
- 05Portal session opened
A patient portal session opens, exposing protected health information.
What happened
OpenEMR from 7.0.1 before 8.4.0 contains a flaw in src/Common/Auth/OneTimeAuth.php that ignores the enforce_onetime_use and max_access_count flags, never revokes consumed service_auth tokens, and checks login_pin without rate limiting or strict comparison. Attackers holding a captured token can replay it or brute-force the PIN to open patient-portal sessions exposing PHI. The record rates it critical at CVSS 9.8 under version 3.1, with network attack vector, low complexity, no privileges required, and no user interaction.
A one-time token that works forever is a permanent credential, and the missing PIN rate limit makes guessing cheap. The flaw is fixed in OpenEMR 8.4.0.
What to do
- Inventory OpenEMR deployments and record each version.
- Upgrade to OpenEMR 8.4.0 or later.
- Invalidate outstanding service_auth tokens and review how they were distributed.
- Review portal login logs for token reuse and PIN guessing.
- Treat any session opened with a replayed token as a compromise indicator and notify affected patients if PHI access cannot be excluded.
- Verify the deployed version after updating.
Management note
Patient portal sessions holding PHI were reachable with a used ticket and a guessable PIN. Treat the exposure window as a breach assessment, not just a patch.