Description
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.
Published: 2026-08-01
Score: 6.9 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability originates from the implicit conversion of arbitrary binary input into atoms using String.to_atom/1 within the Guardian.Plug.Keys module. Each unseen binary payload is turned into a permanent atom, and atoms are never garbage collected in the BEAM virtual machine. When an application that uses Guardian receives attacker‑controlled inputs—such as tenant identifiers, headers or other request data—it continuously creates new atoms, eventually exhausting the fixed atom table (approximately 1,048,576 entries). Once full, the BEAM node crashes, which takes down every process and application residing on that node, causing a denial‑of‑service condition. The impact is limited to availability; confidentiality and integrity are not directly affected by this flaw.

Affected Systems

The flaw affects the Guardian library distributed by ueberauth, covering versions 0.1.0 up to but not including 2.4.1. Any installation of Guardian within that range that derives namespace or session keys from external input is vulnerable.

Risk and Exploitability

The CVSS score of 6.9 classifies this as a moderate severity issue, and the EPSS score of less than 1 % indicates a low probability of exploitation in the wild. The vulnerability is not listed in the CISA KEV catalog. Attackers can exploit the flaw by supplying a stream of unique, user‑controlled values—such as distinct header values, query parameters, or session identifiers—to the :key option of Guardian.Plug, triggering uncontrolled atom creation. If exploited, the BEAM node will terminate, resulting in a service outage for all applications running on the same virtual machine.

Generated by OpenCVE AI on August 3, 2026 at 09:32 UTC.

Remediation

Vendor Workaround

Do not derive Guardian keys from untrusted input. Use a fixed, hardcoded set of namespace keys, or validate the value against a bounded allowlist of known keys, before passing it as the :key option.


OpenCVE Recommended Actions

  • Upgrade Guardian to version 2.4.1 or later, which removes the unbounded atom creation path.
  • Do not derive Guardian keys from untrusted input; instead, use a fixed, hardcoded set of namespace keys or validate the value against a bounded allowlist before passing it as the :key option.
  • Add application logic to validate all user‑supplied key values, ensuring they originate from a trusted source before invoking Guardian.Plug key generation functions.

Generated by OpenCVE AI on August 3, 2026 at 09:32 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 03 Aug 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Sat, 01 Aug 2026 19:00:00 +0000

Type Values Removed Values Added
Description 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.
Title Atom-table exhaustion denial of service in Guardian via unbounded atom creation from binary keys
First Time appeared Ueberauth
Ueberauth guardian
Weaknesses CWE-770
CPEs cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*
Vendors & Products Ueberauth
Ueberauth guardian
References
Metrics cvssV4_0

{'score': 6.9, 'vector': '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'}


Subscriptions

Ueberauth Guardian
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-08-03T17:49:54.220Z

Reserved: 2026-06-16T10:47:13.915Z

Link: CVE-2026-54894

cve-icon Vulnrichment

Updated: 2026-08-03T17:49:50.669Z

cve-icon NVD

Status : Analyzed

Published: 2026-08-01T19:16:41.977

Modified: 2026-08-06T14:33:19.953

Link: CVE-2026-54894

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-03T09:45:04Z

Weaknesses
  • CWE-770

    Allocation of Resources Without Limits or Throttling