Skip to main content

ueberauth Guardian CVE-2026-54894

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

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/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
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
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

2
Source Code Evidence Fetched
Aug 01, 2026 - 19:23 vuln.today
Analysis Generated
Aug 01, 2026 - 19:23 vuln.today

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.

AnalysisAI

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.

Technical ContextAI

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:*:*:*:*:*:*:*:*.

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.

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

Share

CVE-2026-54894 vulnerability details – vuln.today

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