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/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
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
Lifecycle Timeline
2DescriptionCVE.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.
AnalysisAI
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.
Technical ContextAI
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.
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.
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
Same technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51916