Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDiscover network endpoint accepting JWT or permission scope input
-
DeliveryCraft requests carrying unique novel permission scope strings
-
ExploitSubmit high-volume stream through AtomEncoding-configured Guardian
-
ExecutionString.to_atom/1 mints permanent BEAM atom per novel string
-
PersistAtom table exhausted at ~1,048,576 entries
-
Impactsystem_limit crash terminates entire BEAM node
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 two co-present conditions: (1) the target application must explicitly opt into Guardian.Permissions.AtomEncoding via use Guardian.Permissions, encoding: Guardian.Permissions.AtomEncoding - a non-default, code-level configuration choice absent from standard Guardian installations; and (2) externally controlled input (JWT permission scope claims, HTTP request body fields, or any other attacker-influenced data) must flow into Guardian.Permissions.encode/3 without prior validation against the known permission set. The default Guardian.Permissions.BitwiseEncoding is completely unaffected. Based on the PR:N metric in the CVSS 4.0 vector, no authentication is required; any endpoint processing incoming tokens and routing them through encode/3 is exploitable by unauthenticated callers. The primary limiting factor is the non-default encoder configuration, which substantially narrows the exposed population to applications that deliberately opted in to AtomEncoding. |
| Impact | The vendor-assigned CVSS 4.0 score of 6.9 with AT:P (Attack Requirements: Present) correctly reflects the non-default configuration prerequisite. However, the provided vector's AV:L (Local) appears inconsistent with the described attack surface - JWT claims and HTTP request bodies are network-delivered inputs, suggesting AV:N is the more accurate attack vector; this metric discrepancy should be verified with the vendor. AT:P appropriately captures the opt-in AtomEncoding configuration constraint. No EPSS score or CISA KEV listing is present in the available data, so exploitation probability cannot be quantified; however, the attack is conceptually trivial to automate once the attack surface is understood. Real-world priority is moderate-to-high for the affected subset: the vast majority of Guardian deployments use BitwiseEncoding and are entirely unexposed, significantly narrowing the vulnerable population. For applications that did opt into AtomEncoding and accept external permission scopes, this is a high-priority, availability-critical issue with no authentication barrier, no user-interaction requirement, and a broad blast radius because a BEAM crash terminates all co-resident applications simultaneously. |
| Exploit ScenarioDerived | An unauthenticated attacker targets a Phoenix application endpoint that processes incoming JWTs with permission scope claims. The attacker submits a continuous stream of requests, each JWT carrying a unique, previously unseen scope string. Because the application uses AtomEncoding, every distinct string permanently consumes one BEAM atom slot; after roughly one million unique submissions - achievable with a trivial script within minutes on a reasonable network - the atom table overflows, the BEAM raises system_limit, and the entire node crashes, taking down all co-hosted applications. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 01, 2026
Guardian's AtomEncoding permission encoder (versions 2.0.0-2.4.1) crashes the BEAM runtime by converting attacker-supplied binary strings directly to permanent atoms via String.to_atom/1, completely bypassing the application's permission allow-list. The BEAM atom table is fixed at approximately 1,048,576 non-garbage-collected entries; exhausting it raises a system_limit error that terminates the entire Erlang node and every application co-hosted on it. This path is only reachable when AtomEncoding is explicitly opted into; no CISA KEV listing or public exploit exists, but the attack is trivially automatable against any network endpoint that routes external permission scope values through encode/3.
RemediationAI
Upgrade ueberauth Guardian to version 2.4.1 or later, which replaces the unsafe String.to_atom(value) call with String.to_existing_atom(value) and validates each binary against the application's perm_set allow-list before conversion (patch commit: https://github.com/ueberauth/guardian/commit/9cd268557846aa4c3ad53566c08f2c190ee5513f; vendor advisory: https://github.com/ueberauth/guardian/security/advisories/GHSA-fjr5-7xrc-hmpj). If an immediate upgrade is not feasible, switch to the default Guardian.Permissions.BitwiseEncoding by removing the encoding: Guardian.Permissions.AtomEncoding option - this is a one-line configuration change with no functional security trade-off, as BitwiseEncoding is the recommended production encoder. As a secondary compensating control, strict input validation at the API boundary that rejects permission scope values not present in the known permission set will prevent novel strings from reaching encode/3; this must be exhaustive and applied before Guardian processes the input to be effective.
Affected VersionsENISA
Affected Packages
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
Guardian is an Elixir/Phoenix authentication library running on the BEAM (Erlang Virtual Machine). Elixir atoms are interned symbols stored in a global, fixed-size table (default limit: 1,048,576 entries) that the garbage collector never reclaims - making unbounded atom creation a well-known BEAM denial-of-service primitive. CWE-770 (Allocation of Resources Without Limits or Throttling) precisely characterizes the root cause: the encode_value/3 binary clause in lib/guardian/permissions/atom_encoding.ex called String.to_atom/1 on any external binary without consulting the perm_set allow-list, permanently minting one atom per novel input string. The vulnerable encoder is opt-in (use Guardian.Permissions, encoding: Guardian.Permissions.AtomEncoding); the default Guardian.Permissions.BitwiseEncoding encodes permissions as bitmasks and is entirely unaffected. CPE: cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:* covering versions 2.0.0 through 2.4.1.
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
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
AV:N for network-delivered JWT/HTTP input; AC:H for the non-default AtomEncoding config prerequisite; S:C because BEAM crash terminates all co-resident applications.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Allocation of Resources Without Limits or Throttling in ueberauth guardian allows denial of service via unbounded atom creation from attacker-controlled binary input.
Guardian.Permissions.AtomEncoding encodes permission scopes by passing arbitrary binaries to String.to_atom/1. When encode/3 in lib/guardian/permissions/atom_encoding.ex is called with a list, each binary entry is handled by the encode_value/3 binary clause, which calls String.to_atom(value) with no allow-list check. The perm_set argument (the application's small, finite set of legitimate permission names) is discarded, so any external string flows straight into atom creation. This encoder is selected with use Guardian.Permissions, encoding: Guardian.Permissions.AtomEncoding and reached through the imported encode/3 entry point.
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 funnels attacker-influenced permission scopes (from a request body, a JWT claim, or other external input) into encode/3 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 with system_limit, taking down every application running on it.
The default encoder is Guardian.Permissions.BitwiseEncoding, which is not affected.
This issue affects guardian: from 2.0.0 before 2.4.1.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
OS command injection in Guardian language-system lets unauthenticated remote attackers run arbitrary shell commands by i
Remote code execution in Guardian language-system allows unauthenticated attackers to run arbitrary OS commands by injec
Unauthenticated SQL injection in Guardian Language System lets remote attackers manipulate the backend database by injec
Error-based SQL injection in Guardian Language-System allows a network-accessible authenticated attacker to extract the
SQL injection in Guardian Language-System's designer.php (line 124) allows attackers to extract, modify, or destroy the
Error-based SQL injection in Guardian language-system's subtitles.php exposes full database contents to low-privileged a
Error-based SQL injection in Guardian Language-System exposes the full database to low-privileged authenticated attacker
Error-based SQL injection in Guardian language-system's text_file.php exposes the full database to extraction via a triv
SQL injection in Guardian language-system's media.php endpoint allows low-privilege authenticated attackers to extract t
Nozomi Networks OS before 19.0.4 allows /#/network?tab=network_node_list.html CSV Injection. Rated high severity (CVSS 7
Nozomi Guardian before 19.0.4 allows attackers to achieve stored XSS (in the web front end) by leveraging the ability to
A SQL Injection vulnerability in Nozomi Networks Guardian and CMC, due to improper input validation in certain fields us
EUVD-2026-51916
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB