Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLocate SAML single-logout endpoint
-
ExploitPost unsigned LogoutResponses with unique status URNs
-
ExecutionMint permanent atoms via list_to_atom/1
-
ImpactExhaust atom table and crash Erlang node
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 the target to deploy esaml as a SAML Service Provider with a reachable single-logout (SLO) endpoint (e.g. the esaml_cowboy validate_logout handler) that routes LogoutResponse messages into esaml_sp:validate_logout_response/2 and esaml:decode_logout_response/1. The key enabling condition is that signature verification is NOT enforced on unsigned LogoutResponse messages, so the attacker does not need any valid IdP signature or credentials; messages with attacker-chosen, previously-unseen StatusCode URN values each create a new permanent atom via list_to_atom/1. The principal LIMITING factor is volume and time: the Erlang VM default atom-table ceiling (~1,048,576 entries) means the attacker must send on the order of a million requests with distinct status values to reach node abort (reflected as AT:P), and sites that raise/lower +t or front the SLO endpoint with rate limiting or WAF controls raise the bar further. Any esaml version from 0.1.0 up to the fix commit be692b5 on an affected fork is in scope. |
| Impact | This is a pure availability (denial-of-service) issue: the CNA-supplied CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N, base 8.2) shows network reach and no privileges/interaction (PR:N/UI:N), but critically carries AT:P - an attack requirement - and VC:N/VI:N with only VA:H, confirming no confidentiality or integrity exposure. The AT:P is the decisive signal: the Erlang VM atom table caps near ~1,048,576 entries, so the attacker must post on the order of one million distinct unsigned LogoutResponse status values before the node aborts, making this a volumetric effort rather than a single-shot crash. No EPSS score, CISA KEV entry, or public exploit was provided in the input, so exploitation status is 'no public exploit identified at time of analysis' and there is no evidence of active or opportunistic mass exploitation. Net: the 8.2 is legitimate for an unauthenticated network DoS, but it is availability-only against a niche Erlang SAML library and requires sustained high request volume, so it is a real but second-tier priority - patch promptly where esaml acts as an SP, but it is not a drop-everything confidentiality/RCE emergency. Note the CVSS is 4.0 only; no 3.1 vector or EPSS was supplied, so cross-signal comparison is limited to vector-plus-description reasoning. |
| Exploit ScenarioDerived | An unauthenticated attacker locates an internet-reachable SAML single-logout (SLO) endpoint served by an esaml-based Service Provider and repeatedly posts unsigned LogoutResponse messages, each carrying a different unrecognized StatusCode URN. Because validate_logout_response/2 only verifies a signature when one is present, each message reaches decode_logout_response/1 where status_code_map/1 calls list_to_atom/1 on a fresh URN segment, minting a permanent atom; after roughly a million distinct values the atom table fills and the Erlang node crashes. No public exploit code is identified at time of analysis, but the attack is scriptable and requires no special tooling. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Unauthenticated remote denial of service in the Erlang SAML library esaml (0.1.0 and later) allows an attacker to abort an Erlang node by exhausting its atom table through unsigned LogoutResponse messages posted to a Service Provider's single-logout endpoint. Because esaml_sp:validate_logout_response/2 only verifies a signature when one is present, an unsigned message reaches esaml:decode_logout_response/1, where status_code_map/1 converts each unrecognized StatusCode into a permanent atom with list_to_atom/1 - roughly one million distinct status values (the VM's default atom-table ceiling) are enough to crash the node. The CNA scored this CVSS 4.0 8.2 with the AT:P attack-requirement metric; the practical barrier is volume and time rather than skill, and no public exploit code or confirmed active exploitation was identified at time of analysis.
RemediationAI
Upstream fix available (PR/commit be692b56245071899757afa7ef47e43593d3de96 in dropbox/esaml, handnot2/esaml and arekinath/esaml); a released, tagged esaml version containing it is not independently confirmed, so pin your dependency to a commit at or after be692b5 and verify the resolved revision in rebar.lock or mix.lock. If you cannot patch immediately, the highest-value control is to stop unauthenticated LogoutResponse messages from reaching esaml:decode_logout_response/1: disable the single-logout endpoint entirely if your IdP integration does not require SLO (side effect: IdP-initiated global logout stops working, sessions must expire by timeout), or restrict the SLO path at the reverse proxy/WAF to the known IdP source addresses and reject requests lacking a ds:Signature element (side effect: legitimate unsigned IdP responses, which the library currently tolerates, will be refused - confirm your IdP always signs LogoutResponses). Add per-source rate limiting on the SLO route to make the ~1,000,000-request atom-exhaustion volume impractical, and raise the VM atom ceiling with +t (e.g. +t 2000000) as a stopgap - note this only defers the abort and increases memory footprint, so it must not replace patching. Monitor erlang:system_info(atom_count) against erlang:system_info(atom_limit) and alert on abnormal growth or on spikes of distinct StatusCode values at the SLO endpoint. Refer to https://cna.erlef.org/cves/CVE-2026-86696.html and https://osv.dev/vulnerability/EEF-CVE-2026-86696 for the vendor-tracked fix guidance.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
esaml is a pure-Erlang SAML 2.0 toolkit (with esaml_cowboy providing Plug/Cowboy HTTP handlers) used by Service Providers and Identity Providers. The root cause is CWE-770 (Allocation of Resources Without Limits or Throttling): Erlang atoms are globally interned, never garbage-collected, and capped by the emulator's atom table (default ceiling ≈1,048,576 entries, tunable via the +t flag). In src/esaml.erl, status_code_map/1 takes the last colon-separated segment of an unrecognized SAML StatusCode URN and interns it via list_to_atom/1, so every distinct attacker-chosen value permanently consumes one atom slot. The reachability path is the single-logout flow: esaml_cowboy:validate_logout/2 parses the SAMLResponse query parameter and hands it to esaml_sp:validate_logout_response/2, whose previous logic checked the signature only when SP#esaml_sp.idp_signs_envelopes was set and otherwise returned {error, cannot_validate} in some branches - the updated code in commit be692b5 makes signature verification conditional on the presence of /samlp:LogoutResponse/ds:Signature, so unsigned responses are processed. The same commit also hardens related parsing paths (deflate handling in esaml_binding, namespace registration for xmldsig in esaml_sp, and cowboy_req state threading in esaml_cowboy:validate_logout/2), which is relevant because the atom-minting bug is reached through the logout-response decoding chain. Once the atom table is full, the VM aborts and every process on the node is lost; the flaw is purely availability-affecting (VC:N/VI:N/VA:H) with no data exposure or integrity impact.
Know when Esaml 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
PR:N/UI:N since unsigned messages need no auth; AC:H because exhausting the ~1M-entry atom table demands a large volume of distinct requests; impact is availability-only (A:H, C:N/I:N).
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Allocation of Resources Without Limits or Throttling vulnerability in esaml in dropbox esaml allows an unauthenticated attacker to exhaust the Erlang VM atom table and crash the node via unsigned LogoutResponse messages.
esaml:status_code_map/1 in src/esaml.erl maps any StatusCode value it does not recognize to an atom with list_to_atom/1 on the last colon-separated segment of the URN. esaml_sp:validate_logout_response/2 verifies a signature only when the message carries one, so an unsigned LogoutResponse posted to the single-logout endpoint reaches esaml:decode_logout_response/1 and mints one permanent atom per distinct status value. Atoms are never reclaimed and the VM caps the atom table at about one million entries, so an attacker who posts that many distinct values aborts the node.
This issue affects esaml: from 0.1.0 onward.
Executive ViewAI
The Erlang SAML library esaml (0.1.0 and later) carries a denial-of-service flaw that can abort the Erlang node hosting a SAML Service Provider, taking down single sign-on for every application that depends on it. The weakness sits on a network-reachable single-logout endpoint and degrades availability of authentication infrastructure rather than exposing credentials or data, and no public exploit has been identified at time of analysis, though the barrier to abuse is sustained message volume rather than specialised skill. Leadership should care because a successful attempt converts a library-level defect into a broad, user-visible authentication outage whose recovery depends on restarting critical identity infrastructure.
No vendor-released patch identified at time of analysis. Interim mitigations: rate-limit and enforce signatures on the single-logout endpoint at a reverse proxy or WAF, reject unsigned LogoutResponse messages before they reach esaml's decoder, monitor Erlang atom-table growth and node restarts for early detection, and raise the VM atom-table ceiling (+t) as a temporary buffer only.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Unauthenticated memory exhaustion in the Erlang esaml SAML library (version 0.1.0 and later) lets a remote attacker cras
A SSRF vulnerability (CVSS 6.3) that allows an attacker. Remediation should follow standard vulnerability management pro
EUVD-2026-108051
GHSA-5rc7-wrfq-2h25
NVD
CVE.org
EPSS
Exploit-DB