Skip to main content

ash_authentication_oauth2_server EUVDEUVD-2026-72537

| CVE-2026-82755 MEDIUM
Use of Cache Containing Sensitive Information (CWE-524)
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
    Tenant-A client warms shared cache with discovery metadata
  2. Delivery
    Cache stores tenant-A's token/jwks endpoints under shared URL
  3. Exploit
    Tenant-B client requests same URL
  4. Execution
    Shared cache returns tenant-A's metadata to tenant-B
  5. Persist
    Tenant-B client sends authorization code to tenant-A token endpoint
  6. Impact
    Tenant-A server captures or processes tenant-B's grant

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V3 - Web Frontend Security Cache-Control for sensitive pages
Exploitation Conditions

Exploitation requires all of the following conditions simultaneously: (1) the deployment is multi-tenant, (2) tenant identity is derived from something other than the URL - specifically a request header (e.g., X-Tenant-ID) or the HTTP Host header - so that two tenants share the same /.well-known/ URL, and (3) a shared HTTP cache (CDN, reverse proxy with caching, or similar) sits between clients and the Phoenix application. Single-tenant deployments are not affected because there is only one tenant's metadata. Deployments where tenant routing is embedded in the URL path or subdomain (and the cache key therefore differs per tenant) are not affected. The attack requires no authentication, no user interaction, and no attacker-controlled network position - it occurs passively when the first tenant's response is stored by the cache and served to the second tenant.

Impact

The CVSS 4.0 base score of 6.3 with vector AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:L/SA:N is accurate and well-calibrated: AT:P (specific attack requirement: a shared cache must be present) is the key gating condition, correctly preventing inflation to a higher score. For deployments that do use a shared cache (CDN, Nginx proxy_cache, Varnish) in front of a header-routed multi-tenant instance, the practical risk is meaningfully higher than the raw score suggests - the attack is passively triggered by normal traffic, requires no attacker credentials, and persists for the full cache TTL (up to 1 hour). The integrity and confidentiality impact on subsequent systems (SC:L/SI:L) reflects the real downstream harm: OAuth clients that trust poisoned discovery metadata may silently redirect sensitive grant artifacts (authorization codes, refresh tokens) to an adversary-controlled or wrong-tenant endpoint. No public exploit code is known and no active exploitation has been identified. EPSS data is not available in the provided input. The attack is opportunistic for any tenant whose first request to the shared URL is cached under another tenant's response - no deliberate attacker action is required beyond being the second tenant to hit the endpoint after a cache warm.

Exploit ScenarioDerived

A multi-tenant SaaS platform running ash_authentication_oauth2_server 0.1.3 routes tenant identity via a custom X-Tenant-ID header and places Nginx with proxy caching in front of the Phoenix application. When a client for tenant-A requests /.well-known/oauth-authorization-server, the response - containing tenant-A's token endpoint - is stored in the shared cache. When a client for tenant-B subsequently requests the same URL, Nginx serves the cached tenant-A metadata. Tenant-B's OAuth client then sends its authorization code to tenant-A's token endpoint, where it may be consumed by tenant-A's authorization server or an attacker monitoring tenant-A's traffic. No exploit code is required; the attack occurs passively through normal cache behavior.

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

Multi-tenant OAuth2 metadata cross-tenant leakage in ash_authentication_oauth2_server (versions 0.1.3 through before 0.3.1) causes shared HTTP caches to serve one tenant's RFC 8414/RFC 9728 discovery metadata - including issuer, authorization_endpoint, token_endpoint, and jwks_uri - to another tenant's clients for up to one hour. The vulnerability arises because the Phoenix ProtocolRouter sent all metadata responses with Cache-Control: public, max-age=3600 and no Vary header; when tenant identity is derived from a request header or Host (not the URL), shared caches key on URL alone, making cross-tenant cache poisoning trivially repeatable. Downstream impact extends beyond disclosure: affected clients may direct authorization codes and client secrets to the wrong tenant's token endpoint and validate tokens against the wrong JWKS keys. No public exploit or active exploitation (CISA KEV) has been identified at time of analysis.

RemediationAI

Upgrade to ash_authentication_oauth2_server 0.3.1, which replaces the unconditional Cache-Control: public, max-age=3600 header with a tenant-aware helper that emits Cache-Control: private, max-age=3600 whenever a tenant is set on the connection. The upstream patch is at https://github.com/ash-project/ash_authentication_oauth2_server/commit/768d87f70e4e97ae1d2bf1606b5bf3f4d03f24a1. If an immediate upgrade is not possible, operators using a shared cache should configure the cache to treat the /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource paths as uncacheable or private - for example, by adding a cache bypass rule in Nginx (proxy_no_cache 1; proxy_cache_bypass 1;) or equivalent for the specific cache layer in use. Note that bypassing the cache for these paths removes the caching benefit for all tenants, not just multi-tenant cases. Alternatively, switching tenant routing to a URL-path or subdomain pattern (so the cache key naturally differentiates tenants) eliminates the vulnerability without sacrificing cacheability, but requires application-level changes. The vendor advisory is at https://github.com/ash-project/ash_authentication_oauth2_server/security/advisories/GHSA-crqf-7m54-4hgc.

Affected VersionsENISA

ash_authentication_oauth2_server 99de0a1cacb5ef667c4533278b7c81ca98c00231 <768d87f70e4e97ae1d2bf1606b5bf3f4d03f24a1
ash_authentication_oauth2_server 0.1.3 <0.3.1

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

The affected library, ash_authentication_oauth2_server, is an Elixir/Phoenix implementation of the OAuth 2.0 Authorization Server role, exposing the OAuth Authorization Server Metadata endpoint (RFC 8414, /.well-known/oauth-authorization-server) and the OAuth Protected Resource Metadata endpoint (RFC 9728, /.well-known/oauth-protected-resource) via AshAuthentication.Phoenix.Oauth2Server.ProtocolRouter. In multi-tenant deployments, the library resolves the active tenant from Ash.PlugHelpers.get_tenant/1, which may read from a request header or virtual host rather than the URL path. The root cause (CWE-524: Use of Cache Containing Sensitive Information) is that the ProtocolRouter unconditionally emitted Cache-Control: public, max-age=3600 with no Vary header on both endpoints, regardless of whether a tenant was active. RFC 7234 permits shared caches to store and reuse such responses keyed solely on the request URL, so any shared reverse proxy or CDN in front of a multi-tenant instance will serve a cached tenant-A response to tenant-B clients. The fix (commit 768d87f) introduces a metadata_cache_control/1 helper that downgrades to private, max-age=3600 whenever a tenant is set on the conn, preventing shared-cache storage of tenant-specific payloads. CPE: cpe:2.3:a:ash-project:ash_authentication_oauth2_server:*:*:*:*:*:*:*:*.

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:L/VI:N/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

AC:H because a shared cache and header-based tenant routing must both be present; S:C because cross-tenant integrity and confidentiality impact affects systems beyond the vulnerable server.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:L/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
Low
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

DescriptionCVE.org

Use of Cache Containing Sensitive Information vulnerability in ash-project ash_authentication_oauth2_server allows a shared HTTP cache to serve one tenant's OAuth discovery metadata to another tenant's clients.

The RFC 8414 and RFC 9728 metadata endpoints in AshAuthentication.Phoenix.Oauth2Server.ProtocolRouter return tenant-specific values (issuer, authorization_endpoint, token_endpoint, jwks_uri) when a tenant is set, but sent them with Cache-Control: public, max-age=3600 and no Vary. When the tenant is derived from something other than the URL (a header or the Host) and a shared cache sits in front, the cache key is the URL alone, so a stored response for one tenant is served to another for up to an hour. Affected clients may then send authorization codes and secrets to the wrong tenant's token endpoint and validate tokens against the wrong keys.

This issue affects ash_authentication_oauth2_server: from 0.1.3 before 0.3.1.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Low
niche Elixir library, narrow adoption in Ash framework ecosystem
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

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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