CVE-2026-54894

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

Configuration 1 (hide)

cpe:2.3:a:ueberauth:guardian:*:*:*:*:*:*:*:*

History

23 Oct 2026, 22:10

Type Values Removed Values Added
Summary
  • (es) La asignación de recursos sin límites ni estrangulamiento en ueberauth guardian permite la denegación de servicio a través de la creación ilimitada de átomos a partir de entrada binaria influenciada por el atacante. Guardian.Plug.Keys deriva claves de espacio de nombres de conexión y de sesión pasando binarios arbitrarios a String.to_atom/1. base_key/1 en lib/guardian/plug/keys.ex convierte cualquier binario en el átomo :“guardian_[input]”, y las funciones auxiliares derivadas claims_key/1, resource_key/1 y token_key/1 crean un segundo átomo además de eso. key_from_other/1 de manera similar convierte un binario capturado por regex a través de String.to_atom/1. Las especificaciones públicas anuncian String.t() como un argumento válido, por lo que pasar una cadena es un uso documentado, y los puntos de entrada de nivel superior, como Guardian.Plug.current_token(conn, key: key), pasan la clave proporcionada por el llamador directamente a estas funciones. String.to_atom/1 crea un átomo completamente nuevo para cada binario no visto anteriormente, los átomos nunca son recolectados por el recolector de basura, y la tabla de átomos de BEAM está fijada en aproximadamente 1.048.576 entradas por defecto. Una aplicación que enruta datos influenciados por el atacante (un identificador de inquilino, encabezado u otra entrada de solicitud) en una clave de Guardian, por lo tanto, acuña un átomo permanente por cada valor distinto. Un flujo modesto de entrada variada y no autenticada consume permanentemente la tabla de átomos y bloquea el nodo BEAM, derribando todas las aplicaciones que se ejecutan en él. Este problema afecta a guardian: desde 0.1.0 antes de 2.4.1.

Information

Published : 2026-08-01 19:16

Updated : 2026-10-23 22:10


NVD link : CVE-2026-54894

Mitre link : CVE-2026-54894

CVE.ORG link : CVE-2026-54894


JSON object : View

Products Affected

ueberauth

  • guardian
CWE
CWE-770

Allocation of Resources Without Limits or Throttling