CVE-2026-55734: CWE-770 Allocation of Resources Without Limits or Throttling in ueberauth guardian
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.
AI Analysis
Technical Summary
The vulnerability in ueberauth guardian's Guardian.Permissions module arises from the encode_permissions!/1 function converting each key of a supplied map into an atom via String.to_atom(to_string(k)) before any validation. When a key has an integer value, the function encodes it directly without validating against the configured permission set, allowing an attacker to create an unbounded number of unique atoms. Since atoms are permanent in the BEAM VM and the atom table has a fixed size (approximately 1,048,576 entries), this can lead to atom table exhaustion and crash the BEAM node, causing denial of service. The decode_permissions/1 function is not affected as it skips keys not in the permission set. The affected versions are >=2.0.0 and <2.4.1.
Potential Impact
An attacker able to influence the permission map passed to encode_permissions!/1 can exhaust the BEAM atom table by creating many unique atoms, leading to a denial of service via crash of the BEAM node and all services running on it. This impacts availability but does not involve privilege escalation or data confidentiality/integrity issues.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. Until a fix is available, avoid passing untrusted or attacker-controlled data to the encode_permissions!/1 function or related permission encoding routines. Consider implementing input validation or throttling on permission map keys to prevent uncontrolled atom creation.
CVE-2026-55734: CWE-770 Allocation of Resources Without Limits or Throttling in ueberauth guardian
Description
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.
CVSS v4.0
Score 6.9medium
Affected software
ueberauth
guardian
ueberauth
guardian
cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
Weaknesses
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
The vulnerability in ueberauth guardian's Guardian.Permissions module arises from the encode_permissions!/1 function converting each key of a supplied map into an atom via String.to_atom(to_string(k)) before any validation. When a key has an integer value, the function encodes it directly without validating against the configured permission set, allowing an attacker to create an unbounded number of unique atoms. Since atoms are permanent in the BEAM VM and the atom table has a fixed size (approximately 1,048,576 entries), this can lead to atom table exhaustion and crash the BEAM node, causing denial of service. The decode_permissions/1 function is not affected as it skips keys not in the permission set. The affected versions are >=2.0.0 and <2.4.1.
Potential Impact
An attacker able to influence the permission map passed to encode_permissions!/1 can exhaust the BEAM atom table by creating many unique atoms, leading to a denial of service via crash of the BEAM node and all services running on it. This impacts availability but does not involve privilege escalation or data confidentiality/integrity issues.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. Until a fix is available, avoid passing untrusted or attacker-controlled data to the encode_permissions!/1 function or related permission encoding routines. Consider implementing input validation or throttling on permission map keys to prevent uncontrolled atom creation.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- EEF
- Date Reserved
- 2026-06-17T10:44:34.365Z
- Cvss Version
- 4.0
- State
- PUBLISHED
Threat ID: 6a6e3f8dbf32cb7a34232d29
Added to database: 08/01/2026, 18:48:45 UTC
Last enriched: 08/09/2026, 14:20:23 UTC
Last updated: 09/14/2026, 10:01:32 UTC
Views: 60
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.