CVE-2026-55734 (GCVE-0-2026-55734)

Vulnerability from cvelistv5 – Published: 2026-08-01 18:46 – Updated: 2026-08-03 16:49
VLAI
Title
guardian atom exhaustion in Guardian.Permissions.encode_permissions!/1
Summary
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.
SSVC
Exploitation: poc Automatable: no Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-03 16:49 UTC
CWE
  • CWE-770 - Allocation of Resources Without Limits or Throttling
Impacted products
Vendor Product Version CPE status
ueberauth guardian Affected: 2.0.0 , < 2.4.1 (semver)
    cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*
Create a notification for this product.
ueberauth guardian Affected: b7a6128ca4d0ffb7f7df5219dd982304ff9d6802 , < 8d4efbfc352d30f5fcfc75a4d69a795b0e472724 (git)
    cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-55734",
                "options": [
                  {
                    "Exploitation": "poc"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-08-03T16:49:36.457207Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-08-03T16:49:59.913Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "references": [
          {
            "tags": [
              "exploit"
            ],
            "url": "https://github.com/ueberauth/guardian/security/advisories/GHSA-9qx2-v587-q3gg"
          }
        ],
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "collectionURL": "https://repo.hex.pm",
          "cpes": [
            "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "\u0027Elixir.Guardian.Permissions\u0027"
          ],
          "packageName": "guardian",
          "packageURL": "pkg:hex/guardian",
          "product": "guardian",
          "programFiles": [
            "lib/guardian/permissions.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1"
            },
            {
              "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2"
            },
            {
              "name": "\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2"
            }
          ],
          "repo": "https://github.com/ueberauth/guardian",
          "vendor": "ueberauth",
          "versions": [
            {
              "lessThan": "2.4.1",
              "status": "affected",
              "version": "2.0.0",
              "versionType": "semver"
            }
          ]
        },
        {
          "collectionURL": "https://github.com",
          "cpes": [
            "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "\u0027Elixir.Guardian.Permissions\u0027"
          ],
          "packageName": "ueberauth/guardian",
          "packageURL": "pkg:github/ueberauth/guardian",
          "product": "guardian",
          "programFiles": [
            "lib/guardian/permissions.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1"
            },
            {
              "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2"
            },
            {
              "name": "\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2"
            }
          ],
          "repo": "https://github.com/ueberauth/guardian",
          "vendor": "ueberauth",
          "versions": [
            {
              "lessThan": "8d4efbfc352d30f5fcfc75a4d69a795b0e472724",
              "status": "affected",
              "version": "b7a6128ca4d0ffb7f7df5219dd982304ff9d6802",
              "versionType": "git"
            }
          ]
        }
      ],
      "configurations": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eThis vulnerability is only exploitable in applications that use \u003ctt\u003eGuardian.Permissions\u003c/tt\u003e (via \u003ctt\u003euse Guardian.Permissions\u003c/tt\u003e) and route attacker-influenced data into \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e or \u003ctt\u003eencode_permissions_into_claims!/2\u003c/tt\u003e, for example by reading a permissions map from a request body and passing it into token issuance.\u003c/p\u003e"
            }
          ],
          "value": "This vulnerability is only exploitable in applications that use Guardian.Permissions (via use Guardian.Permissions) and route attacker-influenced data into encode_permissions!/1 or encode_permissions_into_claims!/2, for example by reading a permissions map from a request body and passing it into token issuance."
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "2.4.1",
                  "versionStartIncluding": "2.0.0",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ],
          "operator": "AND"
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "Peter Ullrich"
        },
        {
          "lang": "en",
          "type": "remediation developer",
          "value": "Yordis Prieto"
        },
        {
          "lang": "en",
          "type": "analyst",
          "value": "Jonatan M\u00e4nnchen / EEF"
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eAllocation of Resources Without Limits or Throttling vulnerability in ueberauth guardian (\u003ctt\u003eGuardian.Permissions\u003c/tt\u003e module) allows a denial of service via BEAM atom-table exhaustion.\u003c/p\u003e\u003cp\u003eThis vulnerability is associated with program file \u003ctt\u003elib/guardian/permissions.ex\u003c/tt\u003e and program routines \u003ctt\u003e\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1\u003c/tt\u003e, \u003ctt\u003e\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2\u003c/tt\u003e, \u003ctt\u003e\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThe \u003ctt\u003eGuardian.Permissions\u003c/tt\u003e mixin installs a public \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e function on every module that does \u003ctt\u003euse Guardian.Permissions\u003c/tt\u003e. For each key of the supplied map, \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e calls \u003ctt\u003eString.to_atom(to_string(k))\u003c/tt\u003e before any validation runs. The integer-value clause of \u003ctt\u003edo_encode_permissions!/2\u003c/tt\u003e 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 \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e (for example a permissions map read from a request body and passed into token issuance via \u003ctt\u003eencode_permissions_into_claims!/2\u003c/tt\u003e) 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 \u003ctt\u003edecode_permissions/1\u003c/tt\u003e is not affected because it skips keys absent from the configured permission set.\u003c/p\u003e\u003cp\u003eThis issue affects guardian: from 2.0.0 before 2.4.1.\u003c/p\u003e"
            }
          ],
          "value": "Allocation of Resources Without Limits or Throttling vulnerability in ueberauth guardian (Guardian.Permissions module) allows a denial of service via BEAM atom-table exhaustion.\n\nThis vulnerability is associated with program file lib/guardian/permissions.ex and program routines \u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1, \u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2, \u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2.\n\nThe 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.\n\nThis issue affects guardian: from 2.0.0 before 2.4.1."
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-130",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-130 Excessive Allocation"
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "attackComplexity": "LOW",
            "attackRequirements": "PRESENT",
            "attackVector": "LOCAL",
            "baseScore": 6.9,
            "baseSeverity": "MEDIUM",
            "privilegesRequired": "NONE",
            "subAvailabilityImpact": "HIGH",
            "subConfidentialityImpact": "NONE",
            "subIntegrityImpact": "NONE",
            "userInteraction": "NONE",
            "vectorString": "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",
            "version": "4.0",
            "vulnAvailabilityImpact": "HIGH",
            "vulnConfidentialityImpact": "NONE",
            "vulnIntegrityImpact": "NONE"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-770",
              "description": "CWE-770 Allocation of Resources Without Limits or Throttling",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-01T18:46:24.291Z",
        "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "shortName": "EEF"
      },
      "references": [
        {
          "tags": [
            "vendor-advisory",
            "related"
          ],
          "url": "https://github.com/ueberauth/guardian/security/advisories/GHSA-9qx2-v587-q3gg"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://cna.erlef.org/cves/CVE-2026-55734.html"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://osv.dev/vulnerability/EEF-CVE-2026-55734"
        },
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/ueberauth/guardian/commit/8d4efbfc352d30f5fcfc75a4d69a795b0e472724"
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "title": "guardian atom exhaustion in Guardian.Permissions.encode_permissions!/1",
      "workarounds": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eBefore calling \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e or \u003ctt\u003eencode_permissions_into_claims!/2\u003c/tt\u003e, filter the permission map so that only keys belonging to the configured permission set are passed in, discarding any unknown keys. Avoid passing attacker-influenced permission maps into these functions.\u003c/p\u003e"
            }
          ],
          "value": "Before calling encode_permissions!/1 or encode_permissions_into_claims!/2, filter the permission map so that only keys belonging to the configured permission set are passed in, discarding any unknown keys. Avoid passing attacker-influenced permission maps into these functions."
        }
      ],
      "x_generator": {
        "engine": "cvelib 1.8.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
    "assignerShortName": "EEF",
    "cveId": "CVE-2026-55734",
    "datePublished": "2026-08-01T18:46:24.291Z",
    "dateReserved": "2026-06-17T10:44:34.365Z",
    "dateUpdated": "2026-08-03T16:49:59.913Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-55734",
      "date": "2026-09-30",
      "epss": "0.00476",
      "percentile": "0.38803"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "collectionURL": "https://repo.hex.pm",
                "cpes": [
                  "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "\u0027Elixir.Guardian.Permissions\u0027"
                ],
                "packageName": "guardian",
                "packageURL": "pkg:hex/guardian",
                "product": "guardian",
                "programFiles": [
                  "lib/guardian/permissions.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1"
                  },
                  {
                    "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2"
                  },
                  {
                    "name": "\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2"
                  }
                ],
                "repo": "https://github.com/ueberauth/guardian",
                "vendor": "ueberauth",
                "versions": [
                  {
                    "lessThan": "2.4.1",
                    "status": "affected",
                    "version": "2.0.0",
                    "versionType": "semver"
                  }
                ]
              },
              {
                "collectionURL": "https://github.com",
                "cpes": [
                  "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "\u0027Elixir.Guardian.Permissions\u0027"
                ],
                "packageName": "ueberauth/guardian",
                "packageURL": "pkg:github/ueberauth/guardian",
                "product": "guardian",
                "programFiles": [
                  "lib/guardian/permissions.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1"
                  },
                  {
                    "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2"
                  },
                  {
                    "name": "\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2"
                  }
                ],
                "repo": "https://github.com/ueberauth/guardian",
                "vendor": "ueberauth",
                "versions": [
                  {
                    "lessThan": "8d4efbfc352d30f5fcfc75a4d69a795b0e472724",
                    "status": "affected",
                    "version": "b7a6128ca4d0ffb7f7df5219dd982304ff9d6802",
                    "versionType": "git"
                  }
                ]
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
          }
        ],
        "configurations": [
          {
            "nodes": [
              {
                "cpeMatch": [
                  {
                    "criteria": "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "6D3467C6-6791-452B-8FB8-A4B7D7F8472A",
                    "versionEndExcluding": "2.4.1",
                    "versionStartIncluding": "2.0.0",
                    "vulnerable": true
                  }
                ],
                "negate": false,
                "operator": "OR"
              }
            ]
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "Allocation of Resources Without Limits or Throttling vulnerability in ueberauth guardian (Guardian.Permissions module) allows a denial of service via BEAM atom-table exhaustion.\n\nThis vulnerability is associated with program file lib/guardian/permissions.ex and program routines \u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1, \u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2, \u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2.\n\nThe 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.\n\nThis issue affects guardian: from 2.0.0 before 2.4.1."
          }
        ],
        "id": "CVE-2026-55734",
        "lastModified": "2026-08-06T14:25:49.940",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 7.5,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "NONE",
                "integrityImpact": "NONE",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 3.9,
              "impactScore": 3.6,
              "source": "nvd@nist.gov",
              "type": "Primary"
            }
          ],
          "cvssMetricV40": [
            {
              "cvssData": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "LOCAL",
                "availabilityRequirement": "NOT_DEFINED",
                "baseScore": 6.9,
                "baseSeverity": "MEDIUM",
                "confidentialityRequirement": "NOT_DEFINED",
                "exploitMaturity": "NOT_DEFINED",
                "integrityRequirement": "NOT_DEFINED",
                "modifiedAttackComplexity": "NOT_DEFINED",
                "modifiedAttackRequirements": "NOT_DEFINED",
                "modifiedAttackVector": "NOT_DEFINED",
                "modifiedPrivilegesRequired": "NOT_DEFINED",
                "modifiedSubAvailabilityImpact": "NOT_DEFINED",
                "modifiedSubConfidentialityImpact": "NOT_DEFINED",
                "modifiedSubIntegrityImpact": "NOT_DEFINED",
                "modifiedUserInteraction": "NOT_DEFINED",
                "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
                "modifiedVulnConfidentialityImpact": "NOT_DEFINED",
                "modifiedVulnIntegrityImpact": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "HIGH",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "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",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-55734",
                "options": [
                  {
                    "exploitation": "poc"
                  },
                  {
                    "automatable": "no"
                  },
                  {
                    "technicalImpact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-08-03T16:49:36.457207Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-08-01T19:16:42.333",
        "references": [
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Third Party Advisory"
            ],
            "url": "https://cna.erlef.org/cves/CVE-2026-55734.html"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Patch"
            ],
            "url": "https://github.com/ueberauth/guardian/commit/8d4efbfc352d30f5fcfc75a4d69a795b0e472724"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Exploit",
              "Patch",
              "Vendor Advisory"
            ],
            "url": "https://github.com/ueberauth/guardian/security/advisories/GHSA-9qx2-v587-q3gg"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Third Party Advisory"
            ],
            "url": "https://osv.dev/vulnerability/EEF-CVE-2026-55734"
          },
          {
            "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
            "tags": [
              "Exploit",
              "Patch",
              "Vendor Advisory"
            ],
            "url": "https://github.com/ueberauth/guardian/security/advisories/GHSA-9qx2-v587-q3gg"
          }
        ],
        "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "vulnStatus": "Analyzed",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-770"
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "type": "Secondary"
          }
        ]
      }
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-55734",
                    "options": [
                      {
                        "Exploitation": "poc"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-08-03T16:49:36.457207Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-08-03T16:49:54.930Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "references": [
              {
                "tags": [
                  "exploit"
                ],
                "url": "https://github.com/ueberauth/guardian/security/advisories/GHSA-9qx2-v587-q3gg"
              }
            ],
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Guardian.Permissions\u0027"
              ],
              "packageName": "guardian",
              "packageURL": "pkg:hex/guardian",
              "product": "guardian",
              "programFiles": [
                "lib/guardian/permissions.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1"
                },
                {
                  "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2"
                },
                {
                  "name": "\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2"
                }
              ],
              "repo": "https://github.com/ueberauth/guardian",
              "vendor": "ueberauth",
              "versions": [
                {
                  "lessThan": "2.4.1",
                  "status": "affected",
                  "version": "2.0.0",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Guardian.Permissions\u0027"
              ],
              "packageName": "ueberauth/guardian",
              "packageURL": "pkg:github/ueberauth/guardian",
              "product": "guardian",
              "programFiles": [
                "lib/guardian/permissions.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1"
                },
                {
                  "name": "\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2"
                },
                {
                  "name": "\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2"
                }
              ],
              "repo": "https://github.com/ueberauth/guardian",
              "vendor": "ueberauth",
              "versions": [
                {
                  "lessThan": "8d4efbfc352d30f5fcfc75a4d69a795b0e472724",
                  "status": "affected",
                  "version": "b7a6128ca4d0ffb7f7df5219dd982304ff9d6802",
                  "versionType": "git"
                }
              ]
            }
          ],
          "configurations": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThis vulnerability is only exploitable in applications that use \u003ctt\u003eGuardian.Permissions\u003c/tt\u003e (via \u003ctt\u003euse Guardian.Permissions\u003c/tt\u003e) and route attacker-influenced data into \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e or \u003ctt\u003eencode_permissions_into_claims!/2\u003c/tt\u003e, for example by reading a permissions map from a request body and passing it into token issuance.\u003c/p\u003e"
                }
              ],
              "value": "This vulnerability is only exploitable in applications that use Guardian.Permissions (via use Guardian.Permissions) and route attacker-influenced data into encode_permissions!/1 or encode_permissions_into_claims!/2, for example by reading a permissions map from a request body and passing it into token issuance."
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "2.4.1",
                      "versionStartIncluding": "2.0.0",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Peter Ullrich"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Yordis Prieto"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eAllocation of Resources Without Limits or Throttling vulnerability in ueberauth guardian (\u003ctt\u003eGuardian.Permissions\u003c/tt\u003e module) allows a denial of service via BEAM atom-table exhaustion.\u003c/p\u003e\u003cp\u003eThis vulnerability is associated with program file \u003ctt\u003elib/guardian/permissions.ex\u003c/tt\u003e and program routines \u003ctt\u003e\u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1\u003c/tt\u003e, \u003ctt\u003e\u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2\u003c/tt\u003e, \u003ctt\u003e\u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThe \u003ctt\u003eGuardian.Permissions\u003c/tt\u003e mixin installs a public \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e function on every module that does \u003ctt\u003euse Guardian.Permissions\u003c/tt\u003e. For each key of the supplied map, \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e calls \u003ctt\u003eString.to_atom(to_string(k))\u003c/tt\u003e before any validation runs. The integer-value clause of \u003ctt\u003edo_encode_permissions!/2\u003c/tt\u003e 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 \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e (for example a permissions map read from a request body and passed into token issuance via \u003ctt\u003eencode_permissions_into_claims!/2\u003c/tt\u003e) 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 \u003ctt\u003edecode_permissions/1\u003c/tt\u003e is not affected because it skips keys absent from the configured permission set.\u003c/p\u003e\u003cp\u003eThis issue affects guardian: from 2.0.0 before 2.4.1.\u003c/p\u003e"
                }
              ],
              "value": "Allocation of Resources Without Limits or Throttling vulnerability in ueberauth guardian (Guardian.Permissions module) allows a denial of service via BEAM atom-table exhaustion.\n\nThis vulnerability is associated with program file lib/guardian/permissions.ex and program routines \u0027Elixir.Guardian.Permissions\u0027:encode_permissions!/1, \u0027Elixir.Guardian.Permissions\u0027:encode_permissions_into_claims!/2, \u0027Elixir.Guardian.Permissions\u0027:do_encode_permissions!/2.\n\nThe 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.\n\nThis issue affects guardian: from 2.0.0 before 2.4.1."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-130",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-130 Excessive Allocation"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "LOCAL",
                "baseScore": 6.9,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "subAvailabilityImpact": "HIGH",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "vectorString": "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",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-770",
                  "description": "CWE-770 Allocation of Resources Without Limits or Throttling",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-08-01T18:46:24.291Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/ueberauth/guardian/security/advisories/GHSA-9qx2-v587-q3gg"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-55734.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-55734"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ueberauth/guardian/commit/8d4efbfc352d30f5fcfc75a4d69a795b0e472724"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "guardian atom exhaustion in Guardian.Permissions.encode_permissions!/1",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eBefore calling \u003ctt\u003eencode_permissions!/1\u003c/tt\u003e or \u003ctt\u003eencode_permissions_into_claims!/2\u003c/tt\u003e, filter the permission map so that only keys belonging to the configured permission set are passed in, discarding any unknown keys. Avoid passing attacker-influenced permission maps into these functions.\u003c/p\u003e"
                }
              ],
              "value": "Before calling encode_permissions!/1 or encode_permissions_into_claims!/2, filter the permission map so that only keys belonging to the configured permission set are passed in, discarding any unknown keys. Avoid passing attacker-influenced permission maps into these functions."
            }
          ],
          "x_generator": {
            "engine": "cvelib 1.8.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-55734",
        "datePublished": "2026-08-01T18:46:24.291Z",
        "dateReserved": "2026-06-17T10:44:34.365Z",
        "dateUpdated": "2026-08-03T16:49:59.913Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…