Skip to main content

ueberauth Guardian CVE-2026-55734

| EUVDEUVD-2026-51917 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

AV:N because description explicitly cites request-body delivery; AC:H and S:C because exploitation requires the application to expose a Guardian permission-map endpoint to user input, and a successful crash takes down the entire BEAM node beyond the vulnerable component.

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:21 vuln.today
Analysis Generated
Aug 01, 2026 - 19:21 vuln.today

DescriptionCVE.org

Allocation of Resources Without Limits or Throttling vulnerability in ueberauth guardian (Guardian.Permissions module) allows a denial of service via BEAM atom-table exhaustion.

This vulnerability is associated with program file lib/guardian/permissions.ex and program routines 'Elixir.Guardian.Permissions':encode_permissions!/1, 'Elixir.Guardian.Permissions':encode_permissions_into_claims!/2, 'Elixir.Guardian.Permissions':do_encode_permissions!/2.

The Guardian.Permissions mixin installs a public encode_permissions!/1 function on every module that does use Guardian.Permissions. For each key of the supplied map, encode_permissions!/1 calls String.to_atom(to_string(k)) before any validation runs. The integer-value clause of do_encode_permissions!/2 then short-circuits straight to encoding without validating the key against the configured permission set, so a key with an integer value is interned as a fresh atom with no exception raised. Atoms are never garbage collected and the BEAM atom table is a fixed-size resource (default roughly 1,048,576 entries), so each unique attacker-chosen key permanently consumes one slot. An attacker who can influence a permission map that reaches encode_permissions!/1 (for example a permissions map read from a request body and passed into token issuance via encode_permissions_into_claims!/2) can mint an unbounded number of atoms and exhaust the atom table, crashing the entire BEAM node and every service running on it. The sibling decode_permissions/1 is not affected because it skips keys absent from the configured permission set.

This issue affects guardian: from 2.0.0 before 2.4.1.

AnalysisAI

BEAM atom-table exhaustion in ueberauth Guardian 2.0.0-2.4.0 allows denial of service by crashing the entire Erlang/Elixir node and all co-hosted services. The Guardian.Permissions module's encode_permissions!/1 function, installed on every module that invokes 'use Guardian.Permissions', unconditionally calls String.to_atom/1 on every key of a caller-supplied map before any validation. Because the integer-value clause of do_encode_permissions!/2 short-circuits to encoding without validating keys against the configured permission set, an attacker who can supply a permissions map with novel keys - for example via a request body fed into token issuance - permanently consumes BEAM atom-table slots at a rate bounded only by available request throughput. No public exploit or CISA KEV listing is identified at time of analysis; a vendor-released patch (2.4.1) is available.

Technical ContextAI

Guardian (CPE cpe:2.3:a:ueberauth:guardian) is the dominant authentication/authorization library in the Elixir ecosystem, built on top of the BEAM (Bogdan/Björn's Erlang Abstract Machine). Atoms in Erlang/Elixir are interned string identifiers stored in a VM-global hash table with a hard default ceiling of approximately 1,048,576 entries; critically, atoms are never garbage collected by design, because they serve as stable compile-time and runtime identifiers. The safe API for converting strings to atoms from untrusted input is String.to_existing_atom/1, which raises ArgumentError if the atom does not already exist. The vulnerable code at lib/guardian/permissions.ex used String.to_atom/1 - which unconditionally mints a new atom - before checking the key against @normalized_perms. CWE-770 (Allocation of Resources Without Limits or Throttling) precisely characterizes the root cause: no rate limit, quota, or allowlist gate was applied to a resource (atom slots) that is both finite and non-reclaimable. The fix replaces String.to_atom with a pre-validation check against @normalized_perms followed by the safe String.to_existing_atom, and adds a PermissionNotFoundError raised for unrecognized keys.

RemediationAI

Upgrade ueberauth Guardian to version 2.4.1, which replaces the unsafe String.to_atom/1 call with a validated lookup against @normalized_perms followed by String.to_existing_atom/1, and introduces a PermissionNotFoundError for unrecognized keys. The fix commit is available at https://github.com/ueberauth/guardian/commit/8d4efbfc352d30f5fcfc75a4d69a795b0e472724 and the advisory is at https://github.com/ueberauth/guardian/security/advisories/GHSA-9qx2-v587-q3gg. For teams unable to patch immediately, the most effective compensating control is to audit every call site of encode_permissions!/1 and encode_permissions_into_claims!/2 and ensure that permission maps passed to these functions are constructed exclusively from server-side, allowlisted keys - never from raw user-supplied input. Enforcing an allowlist at the application boundary before the Guardian call eliminates the atom-minting path without requiring Guardian upgrade, but introduces maintenance risk if the allowlist diverges from Guardian's @normalized_perms. As a secondary control, rate-limiting endpoints that trigger token issuance can slow exhaustion but does not prevent it given sufficient time. BEAM-level monitoring of :erlang.system_info(:atom_count) relative to :erlang.system_info(:atom_limit) can provide early warning of table pressure.

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-55734 vulnerability details – vuln.today

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