Skip to main content

ueberauth Guardian EUVDEUVD-2026-51915

| CVE-2026-54894 MEDIUM
Allocation of Resources Without Limits or Throttling (CWE-770)
2026-08-01 EEF
6.9
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Recon
    Send HTTP requests with unique key-parameter values
  2. Delivery
    Guardian.Plug routes key to Guardian.Plug.Keys.base_key/1
  3. Exploit
    String.to_atom/1 interns one permanent atom per unique value
  4. Install
    Repeated requests fill BEAM atom table to ~1,048,576 limit
  5. C2
    BEAM runtime raises out-of-atoms error
  6. Execute
    Node process crashes
  7. Impact
    All co-hosted applications denied service

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource allocation limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

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

Exploitation Conditions

Exploitation requires the target application to pass an attacker-influenced binary as the key argument to any of the following functions: Guardian.Plug.current_token/2, Guardian.Plug.current_claims/2, Guardian.Plug.current_resource/2, or directly to Guardian.Plug.Keys.base_key/1, token_key/1, claims_key/1, or resource_key/1. The attacker-influenced value must vary across requests - sending the same key repeatedly has no effect because atoms are only interned once. Applications that use exclusively static, compile-time atom literals for the key parameter (the idiomatic default, e.g., key: :default) are not exploitable. No authentication is required: an unauthenticated HTTP endpoint is sufficient provided it routes request data into a Guardian key. The CVSS 4.0 AT:P metric confirms a specific application-level configuration prerequisite must be present; default Guardian deployments using only literal keys are not affected.

Impact

The provided CVSS 4.0 score of 6.9 with vector AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H assigns a local attack vector, which is somewhat conservative relative to the described exploitation path: the attack is delivered via network HTTP requests, not local access. The AT:P (Attack Requirements: Present) correctly captures the prerequisite - the application must route user-controlled data into a Guardian key parameter. The VA:H and SA:H metrics reflect the full-node crash impact accurately, since BEAM node termination denies service to all co-hosted applications simultaneously. No EPSS data was provided. There is no CISA KEV listing and no confirmed public exploit code, which lowers urgency for environments where user input never reaches Guardian key functions. However, multi-tenant Phoenix applications or any service using dynamic key selection are genuinely at risk: the attack is not gated by authentication (PR:N), requires no special tooling beyond an HTTP client, and produces a full, unrecoverable node crash rather than a degraded-service condition. The discrepancy between AV:L in the provided vector and the network-delivered attack path described in the advisory warrants verification with the vendor, though AT:P constrains real-world exploitability regardless of attack vector classification.

Exploit ScenarioDerived

An attacker targeting a multi-tenant Phoenix application that derives the Guardian key from the HTTP request's tenant subdomain or X-Tenant-ID header sends a rapid stream of HTTP GET requests, each carrying a unique, previously unseen tenant string. Each distinct request causes Guardian.Plug.Keys.base_key/1 to call String.to_atom/1, permanently interning one new atom. After exhausting the remaining atom table capacity - which may require far fewer than 1,048,576 requests depending on existing atom usage - the BEAM runtime raises an out-of-atoms error, the node process terminates, and every application sharing that VM instance becomes immediately unavailable. No exploit code is required beyond a standard HTTP load tool with randomized header values.

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

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

Alert me

AnalysisAIv1 – Aug 01, 2026

Unbounded atom creation in Guardian.Plug.Keys allows any attacker who can route arbitrary string values through Guardian's key derivation functions to permanently exhaust the BEAM virtual machine's atom table, crashing the entire BEAM node and denying service to every application co-hosted on it. All guardian releases from 0.1.0 through 2.4.0 are affected whenever an application passes attacker-influenced data - a tenant identifier, HTTP header, or similar request value - as the key parameter to Guardian.Plug.current_token/2, current_claims/2, current_resource/2, or directly to Guardian.Plug.Keys functions. No public exploit code has been identified at time of analysis, though the attack mechanism is mechanically trivial given that it requires only a stream of distinct HTTP requests to a single vulnerable endpoint.

RemediationAI

Upgrade guardian to version 2.4.1 or later; the fix is delivered at commit 2952657e42e6341a67e6aaad09d8f0b40ae917cb and replaces all unsafe String.to_atom/1 calls on read paths with String.to_existing_atom/1. If an immediate upgrade is not feasible, audit every call site of Guardian.Plug.current_token/2, current_claims/2, current_resource/2, and any direct invocations of Guardian.Plug.Keys functions: ensure the key argument is always a hard-coded atom literal (e.g., :default, :admin) and never a variable derived from request data. As a targeted compensating control, add an explicit allowlist validation at application boundaries that restricts Guardian key values to a finite set of known atoms before they reach any Guardian function - for example, pattern-matching on an enumerated set of tenant identifiers and rejecting unknown values with a 400 or 404 response. This prevents atom creation without requiring an application rewrite. Note that this control must be applied at every entry point consistently; missing a single call site restores exposure. Vendor advisory: https://github.com/ueberauth/guardian/security/advisories/GHSA-xqch-c77q-rgh5.

Affected VersionsENISA

Guardian 0.1.0 <2.4.1
Guardian 7126fa433afc2563fcac0c9aa35193965f8fd5f8 <2952657e42e6341a67e6aaad09d8f0b40ae917cb

Affected Packages

euvd guardian fix: 2.4.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 root cause is CWE-770 (Allocation of Resources Without Limits or Throttling) in the BEAM virtual machine's atom interning model. In Elixir and Erlang, atoms are interned strings stored in a process-global table with a default hard cap of approximately 1,048,576 entries; once allocated, atoms are never garbage collected. Guardian.Plug.Keys (lib/guardian/plug/keys.ex) used String.to_atom/1 unconditionally in base_key/1, claims_key/1, resource_key/1, token_key/1, and key_from_other/1 to convert caller-supplied strings into the atom-keyed identifiers required by Plug.Conn private storage. Because the public API declared String.t() as a valid argument type, passing a string - including one derived from request data - was documented, intended usage. Higher-level entry points such as Guardian.Plug.current_token(conn, key: key) threaded the caller-supplied key directly into these atom-creating functions without any validation. The fix at commit 2952657e replaces String.to_atom/1 with String.to_existing_atom/1 on all read paths (returning nil for unknown atoms rather than interning new ones), introduces bang variants (token_key!/1, claims_key!/1, resource_key!/1) that intern atoms only from developer-controlled write paths, and switches session and cookie name derivation to pure string helpers that require no atom at all. Affected CPE: cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*.

Know when Guardian 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.9 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H
vuln.today AI 6.8 MEDIUM

Network-delivered via HTTP but requires application to route user input to Guardian key functions (AC:H); BEAM node crash affects all co-hosted apps, changing scope (S:C); no confidentiality or integrity impact.

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

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
High

DescriptionCVE.org

Allocation of Resources Without Limits or Throttling in ueberauth guardian allows denial of service via unbounded atom creation from attacker-influenced binary input.

Guardian.Plug.Keys derives connection and session namespace keys by passing arbitrary binaries to String.to_atom/1. base_key/1 in lib/guardian/plug/keys.ex converts any binary into the atom :"guardian_<input>", and the derived helpers claims_key/1, resource_key/1, and token_key/1 create a second atom on top of that. key_from_other/1 likewise converts a regex-captured binary through String.to_atom/1. The public specs advertise String.t() as a valid argument, so passing a string is documented usage, and higher-level entry points such as Guardian.Plug.current_token(conn, key: key) thread the caller-supplied key straight into these functions.

String.to_atom/1 creates a brand-new atom for every previously unseen binary, atoms are never garbage collected, and the BEAM atom table is fixed at roughly 1,048,576 entries by default. An application that routes attacker-influenced data (a tenant identifier, header, or other request input) into a Guardian key therefore mints one permanent atom per distinct value. A modest stream of varied, unauthenticated input permanently consumes the atom table and crashes the BEAM node, taking down every application running on it.

This issue affects guardian: from 0.1.0 before 2.4.1.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Low
niche Elixir/Phoenix authentication library, limited ecosystem footprint
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.1%
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
Poc
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2026-34107 CRITICAL POC
9.3 Jul 01

OS command injection in Guardian language-system lets unauthenticated remote attackers run arbitrary shell commands by i

CVE-2026-34106 CRITICAL POC
9.3 Jul 01

Remote code execution in Guardian language-system allows unauthenticated attackers to run arbitrary OS commands by injec

CVE-2026-34099 CRITICAL POC
9.3 Jul 01

Unauthenticated SQL injection in Guardian Language System lets remote attackers manipulate the backend database by injec

CVE-2026-34105 HIGH POC
8.7 Jul 01

Error-based SQL injection in Guardian Language-System allows a network-accessible authenticated attacker to extract the

CVE-2026-34104 HIGH POC
8.7 Jul 01

SQL injection in Guardian Language-System's designer.php (line 124) allows attackers to extract, modify, or destroy the

CVE-2026-34103 HIGH POC
8.7 Jul 01

Error-based SQL injection in Guardian language-system's subtitles.php exposes full database contents to low-privileged a

CVE-2026-34102 HIGH POC
8.7 Jul 01

Error-based SQL injection in Guardian Language-System exposes the full database to low-privileged authenticated attacker

CVE-2026-34101 HIGH POC
8.7 Jul 01

Error-based SQL injection in Guardian language-system's text_file.php exposes the full database to extraction via a triv

CVE-2026-34100 HIGH POC
8.7 Jul 01

SQL injection in Guardian language-system's media.php endpoint allows low-privilege authenticated attackers to extract t

CVE-2020-7049 HIGH POC
7.3 Jun 30

Nozomi Networks OS before 19.0.4 allows /#/network?tab=network_node_list.html CSV Injection. Rated high severity (CVSS 7

CVE-2020-15307 MEDIUM POC
6.1 Jun 30

Nozomi Guardian before 19.0.4 allows attackers to achieve stored XSS (in the web front end) by leveraging the ability to

CVE-2023-29245 CRITICAL
9.2 Sep 19

A SQL Injection vulnerability in Nozomi Networks Guardian and CMC, due to improper input validation in certain fields us

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