---
id: "CVE-2026-103021"
kind: "vulnerability"
aliases: ["CVE-2026-103021"]
title: "OpenEMR: unauthenticated login parameter lets attackers enumerate valid usernames"
severity: "medium"
cvss: 5.3
epss: null
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["healthcare", "openemr", "php", "runtime", "self-hosted"]
not_affected_if: ["internal-only-network", "version-8.3.0-or-later"]
published_at: "2026-11-05T20:17:38+00:00"
first_seen_at: "2026-11-05T20:40:43+00:00"
updated_at: "2026-11-05T20:43:31+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-103021", "first_seen_at": "2026-11-05T20:40:43+00:00"}]
exploit_sources: []
---

# OpenEMR: unauthenticated login parameter lets attackers enumerate valid usernames

OpenEMR loads a user's settings from an unauthenticated login parameter before sign-in succeeds, so existing and nonexistent usernames behave differently. A remote attacker can use timing or page differences to list valid accounts for later password attacks.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed OpenEMR version in the application's version or footer information; versions from `6.0.0` through `8.2.x` are in the affected range.
- Look at `interface/globals.php` in the OpenEMR source tree for the unauthenticated `authUser` handling.

## Fix

- OpenEMR: move to `8.3.0` or later.

## Timeline

- 2026-11-05T20:40:43+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-103021

## Documents

- [advisory] Vendor advisory: github.com https://github.com/openemr/openemr/security/advisories/GHSA-rr38-hpxq-wwff
- [fix] Patch: github.com https://github.com/openemr/openemr/commit/50f789fad45ada625fe8d0faf0c7a9c15ef52aa5
- [fix] Release notes: github.com https://github.com/openemr/openemr/releases/tag/v8_3_0

## From the sources

OpenEMR is a free and open source electronic health records and medical practice management application. From 6.0.0 until 8.3.0, interface/globals.php uses the unauthenticated authUser login parameter to populate temp_authuserid and load that account's user_settings before authentication succeeds. Existing usernames can therefore cause an additional database query and may apply visible customized settings, while nonexistent usernames skip that behavior. A remote unauthenticated actor can use timing or page differences to enumerate valid accounts for later credential attacks. This issue is fixed in version 8.3.0.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
