Skip to main content

ueberauth Guardian EUVDEUVD-2026-51917

| CVE-2026-55734 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. Access
    Identify endpoint passing request body to encode_permissions!/1
  2. Delivery
    Craft permission map with novel string keys and integer values
  3. Exploit
    Send high-volume requests with unique keys
  4. Execution
    String.to_atom/1 interns each key as permanent BEAM atom
  5. Persist
    BEAM atom table (≈1M slots) exhausted
  6. Impact
    VM crashes, all node services unavailable

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 that the target application passes a permissions map containing at least one key with an integer value to encode_permissions!/1 or encode_permissions_into_claims!/2, and that the keys of that map are at least partially controlled by the attacker. The critical enabling condition is the integer-value code path in do_encode_permissions!/2: only keys whose values are integers bypass the existing validation and proceed directly to String.to_atom/1 without an allowlist check. Applications that exclusively pass statically constructed, server-side permission maps with atom or string keys from a known set are not exploitable, because those keys would already exist in the atom table. What limits exploitation: the application must be using the Guardian.Permissions mixin and must have an externally reachable code path that feeds attacker-influenced keys with integer values into encode_permissions!/1; the CVSS 4.0 AT:P metric reflects this prerequisite. The CVSS 4.0 PR:N indicates no authentication is required at the Guardian level once the endpoint is reachable, but the endpoint itself may have its own authentication controls depending on the application.

Impact

The provided CVSS 4.0 base score of 6.9 with vector AV:L/AC:L/AT:P/PR:N/UI:N reflects a moderate-severity finding, but the AV:L (local) designation warrants scrutiny: the CVE description explicitly cites a network-accessible path ('a permissions map read from a request body and passed into token issuance via encode_permissions_into_claims!/2'), which would normally map to AV:N. The AT:P (attack requirements present) metric correctly captures the prerequisite that the application must pass externally influenced data to encode_permissions!/1 - not all Guardian deployments will do this. The practical risk therefore depends heavily on whether a given application exposes an endpoint that feeds user-controlled keys into token issuance. Where such an endpoint exists, the attack is straightforward and automatable: any number of unique string keys per request permanently consumes atom slots, and approximately one million unique requests suffice to crash a default-configured BEAM node. The impact is catastrophic for availability (VA:H, SA:H) because the BEAM process model means a single crashed VM takes down every service, GenServer, or Supervisor tree running on that node. No EPSS score is provided; no KEV listing exists. The low attack complexity once the prerequisite is met, the zero-privilege requirement, and the catastrophic blast radius make this a genuine priority for applications that pass user-supplied permission maps into Guardian token issuance, despite the moderate aggregate CVSS score.

Exploit ScenarioDerived

An attacker identifies a Phoenix or Plug endpoint that reads a permissions map from the JSON request body and passes it directly into Guardian.encode_permissions_into_claims!/2 during token issuance. The attacker sends a high volume of POST requests, each containing a permissions map with hundreds of previously unseen string keys as the permission-set names. Each unique key causes Guardian to call String.to_atom/1, permanently consuming one BEAM atom-table slot. After roughly one million total unique keys have been submitted - achievable in minutes from a fast client - the BEAM node's atom table is exhausted, the VM crashes with an atom limit error, and the entire application including any background workers, schedulers, and co-hosted services becomes unavailable.

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

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.

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.

Affected VersionsENISA

Guardian 2.0.0 <2.4.1
Guardian b7a6128ca4d0ffb7f7df5219dd982304ff9d6802 <8d4efbfc352d30f5fcfc75a4d69a795b0e472724

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

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.

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

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

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Low
popular Elixir auth library, but Elixir ecosystem has limited enterprise 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