Skip to main content

oidcc_plug CVE-2026-66883

| EUVDEUVD-2026-52658 MEDIUM
Improper Handling of Case Sensitivity (CWE-178)
2026-08-04 EEF
6.3
CVSS 4.0 · Vendor: EEF
Share

Severity by source

Vendor (EEF) PRIMARY
6.3 MEDIUM
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/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
vuln.today AI
3.7 LOW

Network vector with high complexity because prior session theft is a hard prerequisite; scope unchanged and no confidentiality or availability impact - only low integrity loss from the silently bypassed user-agent binding.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

2
Source Code Evidence Fetched
Aug 04, 2026 - 12:21 vuln.today
Analysis Generated
Aug 04, 2026 - 12:21 vuln.today

DescriptionCVE.org

Improper Handling of Case Sensitivity vulnerability in Erlang Ecosystem Foundation oidcc_plug (Oidcc.Plug.Authorize module) renders the user agent session binding inert, removing a defense in depth control against replay of a stolen session.

This vulnerability is associated with program files lib/oidcc/plug/authorize.ex and lib/oidcc/plug/authorization_callback.ex, and program routines Oidcc.Plug.Authorize.call/2 and Oidcc.Plug.AuthorizationCallback.call/2.

Oidcc.Plug.Authorize.call/2 reads the initiating client's user agent with get_req_header(conn, "User-Agent"). Plug lowercases incoming header names, but get_req_header/2 matches the supplied key exactly and performs no normalization of its own, so the mixed-case lookup always returns an empty list and nil is written into the session. On the callback side, Oidcc.Plug.AuthorizationCallback treats a stored nil user agent as nothing to compare and returns :ok without inspecting the request. The two behaviours combine so that the check passes unconditionally on every request, including for deployments that explicitly opted in with check_useragent: true, and an authorization callback can be completed from a different user agent than the one that initiated the flow without detection. The check fails open silently, with no error and no log entry, so a deployment cannot tell the binding is absent.

The impact is limited to defense in depth. The inert check does not by itself allow an attacker to complete an authorization flow; it removes one layer that would otherwise hinder use of a stolen or leaked session, such as an exfiltrated session cookie replayed from a different client. The CSRF/state, nonce, and PKCE checks are unaffected and continue to function. Deployments that never enabled check_useragent are not affected in practice, since they never expected the binding. The corresponding lookup in Oidcc.Plug.AuthorizationCallback correctly uses the lowercase key and is not affected.

This issue affects oidcc_plug: from 0.1.0-alpha.3 before 0.5.0.

AnalysisAI

User-agent session binding in oidcc_plug's OpenID Connect authorization plug is silently rendered inert by a case-sensitivity bug, affecting all versions from 0.1.0-alpha.3 through 0.5.0 that configured check_useragent: true. The authorize plug reads the User-Agent header using a mixed-case key, but Plug normalizes all HTTP header names to lowercase before storage, so the lookup always returns an empty list and nil is written into the OIDC session; the callback plug then treats a stored nil as nothing to compare and returns :ok unconditionally, meaning a stolen session replayed from a different browser or device passes the user-agent check without detection or logging. No public exploit has been identified at time of analysis, and CSRF/state, nonce, and PKCE protections remain fully functional.

Technical ContextAI

The root cause is a mismatch between Plug's HTTP layer behavior and the case-sensitive semantics of get_req_header/2 in Elixir's Plug framework, precisely captured by CWE-178 (Improper Handling of Case Sensitivity). When an HTTP request enters the Plug pipeline, all header names are normalized to lowercase; get_req_header/2 then performs an exact binary match against those stored keys. Calling get_req_header(conn, "User-Agent") - with the canonical mixed-case form - never matches the stored "user-agent" key, so it always returns [], and List.first([]) yields nil. The bug is in Oidcc.Plug.Authorize.call/2 at lib/oidcc/plug/authorize.ex line 134; the callback at lib/oidcc/plug/authorization_callback.ex already uses the correct lowercase key and is unaffected. The affected CPE is cpe:2.3:a:erlang_ecosystem_foundation:oidcc_plug:*:*:*:*:*:*:*:* covering versions 0.1.0-alpha.3 up to 0.5.0. This is a defense-in-depth control failure, not a primary authentication bypass.

RemediationAI

Upgrade oidcc_plug to version 0.5.0 or later, which contains the one-line fix correcting get_req_header(conn, "User-Agent") to get_req_header(conn, "user-agent") in lib/oidcc/plug/authorize.ex; the patch commit is available at https://github.com/erlef/oidcc_plug/commit/f15e52c5750aaba701104b10ed96cfac063bd557 and the advisory at https://github.com/erlef/oidcc_plug/security/advisories/GHSA-w5r8-m75h-98fc. Note: the fix version 0.5.0 is inferred from the CVE's "before 0.5.0" version boundary and has not been independently verified from a published changelog or release tag. For deployments unable to upgrade immediately, explicitly removing check_useragent: true from plug configuration is semantically equivalent to the current broken state - it eliminates the false expectation of protection without reducing actual security, since the check was already passing unconditionally. Ensure that PKCE, nonce, and CSRF/state validation remain enabled, as these are the primary replay-attack defenses and are not affected by this bug.

Share

CVE-2026-66883 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy