CVE-2026-32688
Full vulnerability record from the local CVENow database.
Description
Allocation of Resources Without Limits or Throttling vulnerability in elixir-plug plug_cowboy allows unauthenticated remote denial of service via atom table exhaustion. Plug.Cowboy.Conn.conn/1 in lib/plug/cowboy/conn.ex calls String.to_atom/1 on the value returned by :cowboy_req.scheme/1. For HTTP/2 connections, cowlib passes the client-supplied :scheme pseudo-header value through verbatim without validation. Each unique value permanently allocates a new entry in the BEAM atom table. Since atoms are never garbage-collected and the atom table has a fixed limit (default 1,048,576), an unauthenticated attacker can exhaust the table by sending HTTP/2 requests with unique :scheme values, causing the Erlang VM to abort with system_limit and taking down the entire node. This vulnerability does not affect HTTP/1.1, where cowboy derives the scheme from the listener type rather than from a client-supplied header. This issue affects plug_cowboy: from 2.0.0 before 2.8.1.
View original CVE JSON
{
"id": "CVE-2026-32688",
"sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"published": "2026-04-27T14:16:47.340",
"lastModified": "2026-10-26T21:10:00.170",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Allocation of Resources Without Limits or Throttling vulnerability in elixir-plug plug_cowboy allows unauthenticated remote denial of service via atom table exhaustion.\n\nPlug.Cowboy.Conn.conn/1 in lib/plug/cowboy/conn.ex calls String.to_atom/1 on the value returned by :cowboy_req.scheme/1. For HTTP/2 connections, cowlib passes the client-supplied :scheme pseudo-header value through verbatim without validation. Each unique value permanently allocates a new entry in the BEAM atom table. Since atoms are never garbage-collected and the atom table has a fixed limit (default 1,048,576), an unauthenticated attacker can exhaust the table by sending HTTP/2 requests with unique :scheme values, causing the Erlang VM to abort with system_limit and taking down the entire node.\n\nThis vulnerability does not affect HTTP/1.1, where cowboy derives the scheme from the listener type rather than from a client-supplied header.\n\nThis issue affects plug_cowboy: from 2.0.0 before 2.8.1."
},
{
"lang": "es",
"value": "Vulnerabilidad de asignación de recursos sin límites ni estrangulamiento en elixir-plug plug_cowboy permite la denegación de servicio remota no autenticada mediante el agotamiento de la tabla de átomos.\n\nPlug.Cowboy.Conn.conn/1 en lib/plug/cowboy/conn.ex llama a String.to_atom/1 sobre el valor devuelto por :cowboy_req.scheme/1. Para conexiones HTTP/2, cowlib pasa el valor del pseudo-encabezado :scheme suministrado por el cliente directamente sin validación. Cada valor único asigna permanentemente una nueva entrada en la tabla de átomos de BEAM. Dado que los átomos nunca son recolectados por el recolector de basura y la tabla de átomos tiene un límite fijo (predeterminado 1,048,576), un atacante no autenticado puede agotar la tabla enviando solicitudes HTTP/2 con valores :scheme únicos, haciendo que la VM de Erlang aborte con system_limit y derribe todo el nodo.\n\nEsta vulnerabilidad no afecta a HTTP/1.1, donde cowboy deriva el esquema del tipo de oyente en lugar de un encabezado suministrado por el cliente.\n\nEste problema afecta a plug_cowboy: desde 2.0.0 antes de 2.8.1."
}
],
"affected": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"affectedData": [
{
"vendor": "elixir-plug",
"product": "plug_cowboy",
"defaultStatus": "unaffected",
"collectionURL": "https://repo.hex.pm",
"packageName": "plug_cowboy",
"cpes": [
"cpe:2.3:a:elixir-plug:plug_cowboy:*:*:*:*:*:*:*:*"
],
"modules": [
"'Elixir.Plug.Cowboy.Conn'"
],
"programFiles": [
"lib/plug/cowboy/conn.ex"
],
"programRoutines": [
{
"name": "'Elixir.Plug.Cowboy.Conn':conn/1"
}
],
"repo": "https://github.com/elixir-plug/plug_cowboy",
"packageURL": "pkg:hex/plug_cowboy",
"versions": [
{
"version": "2.0.0",
"lessThan": "2.8.1",
"versionType": "semver",
"status": "affected"
}
]
},
{
"vendor": "elixir-plug",
"product": "plug_cowboy",
"defaultStatus": "unaffected",
"collectionURL": "https://github.com",
"packageName": "elixir-plug/plug_cowboy",
"cpes": [
"cpe:2.3:a:elixir-plug:plug_cowboy:*:*:*:*:*:*:*:*"
],
"modules": [
"'Elixir.Plug.Cowboy.Conn'"
],
"programFiles": [
"lib/plug/cowboy/conn.ex"
],
"programRoutines": [
{
"name": "'Elixir.Plug.Cowboy.Conn':conn/1"
}
],
"repo": "https://github.com/elixir-plug/plug_cowboy",
"packageURL": "pkg:github/elixir-plug/plug_cowboy",
"versions": [
{
"version": "12ecfd024bb179d48b018fecf074e43fe6a19c83",
"lessThan": "bfb34cb45eb354e56437f7023fb306de1bf9c19b",
"versionType": "git",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV40": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary",
"cvssData": {
"version": "4.0",
"vectorString": "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",
"baseScore": 8.7,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"subAvailabilityImpact": "NONE",
"exploitMaturity": "NOT_DEFINED",
"confidentialityRequirement": "NOT_DEFINED",
"integrityRequirement": "NOT_DEFINED",
"availabilityRequirement": "NOT_DEFINED",
"modifiedAttackVector": "NOT_DEFINED",
"modifiedAttackComplexity": "NOT_DEFINED",
"modifiedAttackRequirements": "NOT_DEFINED",
"modifiedPrivilegesRequired": "NOT_DEFINED",
"modifiedUserInteraction": "NOT_DEFINED",
"modifiedVulnConfidentialityImpact": "NOT_DEFINED",
"modifiedVulnIntegrityImpact": "NOT_DEFINED",
"modifiedVulnAvailabilityImpact": "NOT_DEFINED",
"modifiedSubConfidentialityImpact": "NOT_DEFINED",
"modifiedSubIntegrityImpact": "NOT_DEFINED",
"modifiedSubAvailabilityImpact": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"valueDensity": "NOT_DEFINED",
"vulnerabilityResponseEffort": "NOT_DEFINED",
"providerUrgency": "NOT_DEFINED"
}
}
],
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Primary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-04-27T19:04:33.154446Z",
"id": "CVE-2026-32688",
"options": [
{
"exploitation": "none"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-770"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:elixir-plug:plug.cowboy:*:*:*:*:*:*:*:*",
"versionStartIncluding": "2.0.0",
"versionEndExcluding": "2.8.1",
"matchCriteriaId": "D18EA080-8E40-4503-AA95-54EF882FE1D7"
}
]
}
]
}
],
"references": [
{
"url": "https://cna.erlef.org/cves/CVE-2026-32688.html",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Third Party Advisory"
]
},
{
"url": "https://github.com/elixir-plug/plug_cowboy/commit/bfb34cb45eb354e56437f7023fb306de1bf9c19b",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Patch"
]
},
{
"url": "https://github.com/elixir-plug/plug_cowboy/security/advisories/GHSA-q8x4-x7mp-5vg2",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Vendor Advisory"
]
},
{
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-32688",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Third Party Advisory"
]
}
]
}