Skip to main content

ash_authentication_oauth2_server EUVDEUVD-2026-72540

| CVE-2026-82758 MEDIUM
Improper Authentication (CWE-287)
2026-09-07 EEF
6.3
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify exposed /oauth/register endpoint
  2. Delivery
    Confirm no Authorization header required
  3. Exploit
    Send POST /oauth/register with no or arbitrary bearer token
  4. Execution
    Fail-open secret comparison passes against nil/empty resolved token
  5. Persist
    Receive valid client_id and client_secret
  6. Impact
    Use registered client for subsequent OAuth flows

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK

2 techniques across 2 tactics: Defense Evasion, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires three specific conditions to align. First, the application must be running ash_authentication_oauth2_server between version 0.1.0 and 0.3.0 inclusive with the Dynamic Client Registration endpoint (/oauth/register) exposed. Second, the operator must have configured an initial_access_token secret provider - a {module, function, args} tuple or a 2-arity anonymous function - whose runtime return value is nil, false, an empty binary (""), or any non-standard tuple instead of {:ok, non_empty_binary} or :error; a provider backed by an unset environment variable, a missing database row, or a function that silently returns nil on lookup failure would trigger this. Third, the network path to POST /oauth/register must be reachable by the attacker - no authentication is needed once the above conditions hold. Deployments where the initial_access_token provider is absent (open DCR was always intended) are not affected because no gate existed to bypass. Deployments with a correctly implemented provider that always returns {:ok, binary} or :error are also not affected.

Impact

The CVSS 4.0 vector supplied by the vendor (AV:N/AC:L/AT:P/PR:N/UI:N) with an overall score of 6.3 reflects the conditional nature of the vulnerability: AT:P (Attack Requirements: Present) captures the prerequisite that the operator's secret provider must return nil, false, or an empty string rather than a proper :error - a meaningful condition since compliant providers should always return one of the two expected tuples. In practice, this means only deployments with a partially-initialised, always-nil, or misconfigured initial_access_token provider are exposed; correctly coded providers are unaffected. No CISA KEV listing and no public exploit code exist at time of analysis, and EPSS data is not provided, so exploitation probability cannot be quantified from these signals alone. The fail-open in signing_secret is a secondary concern worth noting: an empty signing key could allow JWT forgery independent of the DCR gate, though this requires the same misconfiguration. No authentication is required by the attacker once the condition exists - even a mid-sized municipal IT team in gniezno running Ash-based identity services on a partially-configured staging secret provider should treat this as urgent, given the zero-effort exploitation once the condition is met. Real-world risk is moderate: the affected library is niche, the trigger condition requires operator error, but the impact when triggered (open OAuth client registration or empty JWT signing) is significant for identity infrastructure.

Exploit ScenarioDerived

An attacker targeting an ash_authentication_oauth2_server deployment where the initial_access_token provider is configured but returns nil or an empty string (e.g., a provider backed by an uninitialised environment variable) sends a POST request to /oauth/register with no Authorization header or an arbitrary bearer value. The nil/empty resolved secret compares as equal under the pre-patch logic, so the registration succeeds and the attacker obtains a valid client_id and client_secret. No public exploit code has been identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 07, 2026

Dynamic Client Registration (DCR) bypass in ash_authentication_oauth2_server versions 0.1.0 through 0.3.0 allows unauthenticated network attackers to register OAuth clients on servers that were configured to require an initial access token. The root cause is a fail-open pattern in resolve_secret/3: when a configured secret provider returned nil, false, or an empty string instead of a structured :error tuple, the function wrapped the value as {:ok, value} and passed it to the bearer-token comparison, causing that comparison to succeed against any request. No public exploit code has been identified, and the vendor has released a patched version (0.3.1).

RemediationAI

Upgrade ash_authentication_oauth2_server to version 0.3.1 or later, which introduces the normalize_resolved_secret/1 helper ensuring any non-binary or empty-binary secret resolution fails closed with :error rather than wrapping the bad value as {:ok, value}. The patch commit is 30a87101871775d27d79f9ad6f29eafa4779e118 (https://github.com/ash-project/ash_authentication_oauth2_server/commit/30a87101871775d27d79f9ad6f29eafa4779e118). As an interim workaround for operators unable to upgrade immediately, audit all configured secret providers (initial_access_token, signing_secret, and any other {module, function, args} or 2-arity callbacks) to ensure they always return {:ok, non_empty_binary} on success and :error on failure - never nil, false, or an empty string. Disabling Dynamic Client Registration entirely (removing the /oauth/register endpoint from routing) eliminates the DCR bypass vector but does not address the signing_secret fail-open if present. Note that fixing provider return values alone is not sufficient against library downgrades; the upstream fix must be deployed to make the server resilient against future provider regressions.

Affected VersionsENISA

ash_authentication_oauth2_server 0.1.0 <0.3.1
ash_authentication_oauth2_server 855b578037c5ded18e8a6e60f42e56bde4905fae <30a87101871775d27d79f9ad6f29eafa4779e118

Affected Packages

euvd ash_authentication_oauth2_server fix: 0.3.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

ash_authentication_oauth2_server is an Elixir library implementing the OAuth 2.0 Authorization Server role on top of the Ash Framework (CPE: cpe:2.3:a:ash-project:ash_authentication_oauth2_server). The Dynamic Client Registration endpoint (POST /oauth/register) is optionally gated by an initial access token, a bearer credential callers must supply at registration time per RFC 7591. Secret values including that token are resolved via pluggable provider callbacks conforming to a {module, function, args} or 2-arity-function interface. CWE-287 (Improper Authentication) applies: the resolution helper __resolve_secret__!/4 treated any provider return value other than {:ok, binary} or :error as a valid secret, wrapping nil, false, and empty strings as {:ok, value}. The fix introduces normalize_resolved_secret/1, which accepts only non-empty binaries and maps all other returns to :error, ensuring a misconfigured or uninitialised secret provider fails closed rather than open. The same fail-open path affected signing_secret resolution, meaning JWT signing keys could silently resolve to empty values under the same misconfiguration.

Know when Ash Authentication Oauth2 Server gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (EEF) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 3.7 LOW

Network-reachable endpoint but AC:H because exploitation requires a specific misconfigured secret provider returning nil/false/empty; no confidentiality or availability impact, only low integrity from unauthorized client registration.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/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
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Improper Authentication vulnerability in ash-project ash_authentication_oauth2_server allows an unauthenticated attacker to register OAuth clients even when Dynamic Client Registration is gated by an initial access token.

resolve_secret/3 in AshAuthentication.Oauth2Server (reached through __resolve_secret__!) treated any return other than {:ok, _} or :error from a configured {module, function, args} or 2-arity-function secret provider as a valid secret, wrapping nil, false, or "" as {:ok, value}. When the initial_access_token resolves to such an empty value, POST /oauth/register compares the presented bearer token against it and the comparison passes with no token supplied, so registration is open although it was configured closed. The same fail-open affected other resolved secrets such as signing_secret.

This issue affects ash_authentication_oauth2_server: from 0.1.0 before 0.3.1.

Threat Intelligence Overview

EPSS Score
0.4%
Top 69% exploitable
Prevalence
Rare
niche Elixir/Ash Framework OAuth server library
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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