{"id":"CVE-2026-105270","kind":"vulnerability","aliases":["CVE-2026-105270"],"related":[],"title":"esaml: crafted SAMLResponse exhausts Erlang atom table and crashes node","description":"Allocation of Resources Without Limits or Throttling vulnerability in esaml_binding in dropbox esaml allows an unauthenticated attacker to exhaust the Erlang VM atom table and crash the node via a crafted SAMLResponse.\n\nesaml_binding:decode_response/2 parses the decoded SAMLResponse with xmerl_scan:string/2, which interns every element name, attribute name, and namespace prefix it reads as a permanent atom. The SAML consume (ACS) and single-logout endpoints call it on unauthenticated requests before any signature check, so one well-formed document with thousands of distinct names mints thousands of atoms while staying inside the 128 KB request body limit. Atoms are never reclaimed and the VM caps the atom table at about one million entries, so a few dozen requests abort the node.\n\nThis issue affects esaml: from 0.1.0 onward.","summary":"esaml (Erlang SAML SP library, forks dropbox, arekinath and handnot2) parses the unauthenticated SAMLResponse with xmerl_scan:string/2 in esaml_binding:decode_response/2, before any signature check. xmerl turns every element, attribute and prefix name into a permanent atom. A document of about 33 KB with 10,000 distinct names adds 10,000 atoms, and a few dozen requests reach the roughly 1M atom limit and abort the BEAM node. The ACS and single-logout endpoints in esaml_cowboy are both reachable. Credit: Quinn Wilton. CVSS 4.0 8.7, CWE-770. The CNA lists no fix and no workaround.","severity":"high","cvss":8.7,"epss":0.00344,"exploited":false,"exploited_at":null,"products":[{"name":"esaml","fixed":[],"affected":">= 0.1.0","ecosystem":"hex"}],"ecosystems":["hex"],"tags":["denial-of-service","elixir","erlang","esaml","package","saml-sso"],"not_affected_if":["esaml-not-used","no-saml-endpoints","saml-endpoints-not-public"],"how_to_check":"Check whether esaml is a dependency: grep esaml in rebar.lock or mix.lock, or run rebar3 tree / mix deps.tree. Every version from 0.1.0 up is affected, including 4.6.0, the latest on Hex. You are exposed if a public route calls esaml_cowboy:validate_assertion/2 or validate_logout/2, or esaml_binding:decode_response/2, on unauthenticated requests.","fix":"No patched release is published yet (unknown). Watch the Hex advisory page and the esaml repos for a fix. Mitigations are my suggestion, not from the vendor. Rate-limit and size-limit the ACS and SLO endpoints, or put them behind a WAF. Run the node with a higher +t atom limit and a supervisor or heartbeat that restarts it. Pre-parse with a safe parser, such as one that does not create atoms, before calling esaml. Monitor erlang:system_info(atom_count).","status":"open","published_at":"2026-10-22T07:16:40+00:00","first_seen_at":"2026-10-23T21:57:30+00:00","triaged_at":"2026-10-23T22:35:25+00:00","updated_at":"2026-10-24T07:15:52+00:00","category":"package","confidence":0.75,"triage":{"at":"2026-10-23T22:35:25Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"esaml: crafted SAMLResponse exhausts Erlang atom table and crashes node","impact":"low","summary":"The esaml Erlang SAML library parses unauthenticated SAMLResponse XML with xmerl, which creates a permanent atom for every new element and attribute name. An unauthenticated attacker can send a few dozen crafted requests to exhaust the atom table and abort the Erlang node, causing a denial of service.","category":"package","who_cares":["erlang","elixir","esaml","saml-sso"],"confidence":0.6,"needs_auth":"no","worst_case":"Erlang node crashes and the service goes down until restarted.","analyst_note":"Confirm the fixed esaml version and whether the SAML ACS/SLO endpoints are exposed; check the NVD entry and the dropbox/esaml GitHub advisory for the patched release.","how_to_check":"unknown","needs_analyst":true,"not_affected_if":["no-saml-endpoints","esaml-not-used"],"user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000509,"input_tokens":3109,"output_tokens":397,"severity_before":"high"},"analyst_status":"done","analyst_note":"Confirm the fixed esaml version and whether the SAML ACS/SLO endpoints are exposed; check the NVD entry and the dropbox/esaml GitHub advisory for the patched release.","search":"'-105270':13A,16A '-2026':12A,15A '-770':119B '0.1.0':260C '000':76B,81B '10':75B,80B '128':226C '1m':91B '33':72B '4.0':116B '8.7':117B 'abort':95B,252C 'ac':100B,192C 'add':79B 'affect':257C 'alloc':128C 'allow':142C 'arekinath':36B 'atom':6A,67B,82B,92B,151C,188C,221C,231C,240C 'attack':145C 'attribut':60B,178C 'beam':97B 'bind':49B,138C,162C 'bodi':229C 'call':198C 'cap':238C 'check':55B,206C 'cna':121B 'consum':191C 'cowboy':108B 'craft':2A,159C 'crash':9A,154C 'credit':112B 'cve':11A,14A 'cvss':115B 'cwe':118B 'decod':50B,163C,167C 'denial':19B 'denial-of-servic':18B 'distinct':77B,216C 'document':69B,212C 'dozen':86B,250C 'dropbox':35B,140C 'element':59B,176C 'elixir':22B 'endpoint':105B,197C 'entri':246C 'erlang':5A,23B,30B,149C 'esaml':1A,17A,24B,29B,48B,107B,137C,141C,161C,258C 'everi':58B,175C 'exhaust':4A,147C 'fix':124B 'fork':34B 'form':211C 'handnot2':38B 'insid':224C 'intern':174C 'issu':256C 'kb':73B,227C 'librari':33B 'limit':93B,132C,230C 'list':122B 'logout':104B,196C 'million':245C 'mint':218C 'name':63B,78B,177C,179C,217C 'namespac':181C 'never':233C 'node':10A,98B,156C,254C 'one':208C,244C 'onward':261C 'packag':25B 'pars':39B,165C 'perman':66B,187C 'prefix':62B,182C 'quinn':113B 'reach':88B 'reachabl':111B 'read':184C 'reclaim':234C 'request':87B,202C,228C,251C 'resourc':130C 'response/2':51B,164C 'rough':90B 'saml':27B,31B,190C 'saml-sso':26B 'samlrespons':3A,42B,160C,168C 'scan':45B,171C 'servic':21B 'signatur':54B,205C 'singl':103B,195C 'single-logout':102B,194C 'sp':32B 'sso':28B 'stay':223C 'string/2':46B,172C 'tabl':7A,152C,241C 'thousand':214C,219C 'throttl':134C 'turn':57B 'unauthent':41B,144C,201C 'via':157C 'vm':150C,237C 'vulner':135C 'well':210C 'well-form':209C 'wilton':114B 'without':131C 'workaround':127B 'xmerl':44B,56B,170C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-22T07:16:40+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/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","cvss_by":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-105270","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-105270","severity":null,"published_at":"2026-10-22T07:16:40+00:00","modified_at":"2026-10-22T16:58:51+00:00","first_seen_at":"2026-10-23T21:57:30+00:00","fetched_at":"2026-10-23T22:29:02+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-105270:508","url":null,"severity":null,"published_at":"2026-10-23T23:44:13+00:00","modified_at":"2026-10-23T23:44:13+00:00","first_seen_at":"2026-10-23T23:44:13+00:00","fetched_at":"2026-10-23T23:44:13+00:00","note":"Read EEF CNA advisory and Hex advisory page: no fixed release published as of 2026-10-22; Hex latest 4.6.0 (Jan 2024) is flagged vulnerable. No public exploitation seen; the advisory describes a PoC recipe but links no code. Did not search social posts."},{"source":"epss","external_id":"CVE-2026-105270","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-105270","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:52+00:00","fetched_at":"2026-10-25T12:38:51+00:00","note":null}],"documents":[{"id":2135,"url":"https://cna.erlef.org/cves/CVE-2026-105270.html","title":"EEF CNA: CVE-2026-105270 esaml atom table exhaustion","kind":"advisory","source":"analyst","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":null},{"id":2136,"url":"https://hex.pm/packages/esaml/advisories","title":"Hex advisories for esaml","kind":"other","source":"analyst","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":null}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}