CVE-2026-32689
Full vulnerability record from the local CVENow database.
Description
Allocation of Resources Without Limits or Throttling vulnerability in phoenixframework phoenix allows a denial of service via the long-poll transport's NDJSON body handling. In 'Elixir.Phoenix.Transports.LongPoll':publish/4, when a POST request is received with Content-Type: application/x-ndjson, the request body is split on newline characters using String.split/2 with no limit on the number of resulting segments. An attacker can send a body consisting entirely of newline bytes, causing a 1:1 amplification into a list of empty binaries — a 1 MB body produces approximately one million list elements, an 8 MB body approximately 8.4 million. Each element is then walked by Enum.map, materializing another list of the same size. This exhausts BEAM memory and schedulers, crashing the node and terminating all active sessions. A session token required to reach the vulnerable endpoint is freely obtainable by any client via an unauthenticated GET request to the same URL with a matching Origin header, making this attack effectively unauthenticated. This issue affects phoenix: from 1.7.0 before 1.7.22 and 1.8.6.
View original CVE JSON
{
"id": "CVE-2026-32689",
"sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"published": "2026-05-05T16:16:11.397",
"lastModified": "2026-10-26T19:10:00.163",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Allocation of Resources Without Limits or Throttling vulnerability in phoenixframework phoenix allows a denial of service via the long-poll transport's NDJSON body handling.\n\nIn 'Elixir.Phoenix.Transports.LongPoll':publish/4, when a POST request is received with Content-Type: application/x-ndjson, the request body is split on newline characters using String.split/2 with no limit on the number of resulting segments. An attacker can send a body consisting entirely of newline bytes, causing a 1:1 amplification into a list of empty binaries — a 1 MB body produces approximately one million list elements, an 8 MB body approximately 8.4 million. Each element is then walked by Enum.map, materializing another list of the same size. This exhausts BEAM memory and schedulers, crashing the node and terminating all active sessions.\n\nA session token required to reach the vulnerable endpoint is freely obtainable by any client via an unauthenticated GET request to the same URL with a matching Origin header, making this attack effectively unauthenticated.\n\nThis issue affects phoenix: from 1.7.0 before 1.7.22 and 1.8.6."
},
{
"lang": "es",
"value": "Vulnerabilidad de asignación de recursos sin límites ni estrangulamiento en phoenixframework phoenix permite una denegación de servicio a través del manejo del cuerpo NDJSON del transporte long-poll.\n\nEn ’Elixir.Phoenix.Transports.LongPoll’:publish/4, cuando se recibe una solicitud POST con Content-Type: application/x-ndjson, el cuerpo de la solicitud se divide en caracteres de nueva línea usando String.split/2 sin límite en el número de segmentos resultantes. Un atacante puede enviar un cuerpo que consiste enteramente en bytes de nueva línea, causando una amplificación 1:1 en una lista de binarios vacíos - un cuerpo de 1 MB produce aproximadamente un millón de elementos de lista, un cuerpo de 8 MB aproximadamente 8.4 millones. Cada elemento es luego recorrido por Enum.map, materializando otra lista del mismo tamaño. Esto agota la memoria y los planificadores de BEAM, colapsando el nodo y terminando todas las sesiones activas.\n\nUn token de sesión requerido para alcanzar el endpoint vulnerable es libremente obtenible por cualquier cliente a través de una solicitud GET no autenticada a la misma URL con una cabecera Origin coincidente, haciendo que este ataque sea efectivamente no autenticado.\n\nEste problema afecta a phoenix: desde 1.7.0 antes de 1.7.22 y 1.8.6."
}
],
"affected": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"affectedData": [
{
"vendor": "phoenixframework",
"product": "phoenix",
"defaultStatus": "unaffected",
"collectionURL": "https://repo.hex.pm",
"packageName": "phoenix",
"cpes": [
"cpe:2.3:a:phoenixframework:phoenix:*:*:*:*:*:*:*:*"
],
"modules": [
"'Elixir.Phoenix.Transports.LongPoll'"
],
"programFiles": [
"lib/phoenix/transports/long_poll.ex"
],
"programRoutines": [
{
"name": "'Elixir.Phoenix.Transports.LongPoll':publish/4"
}
],
"repo": "https://github.com/phoenixframework/phoenix",
"packageURL": "pkg:hex/phoenix",
"versions": [
{
"version": "1.7.0",
"lessThan": "1.7.22",
"versionType": "semver",
"status": "affected"
},
{
"version": "1.8.0",
"lessThan": "1.8.6",
"versionType": "semver",
"status": "affected"
}
]
},
{
"vendor": "phoenixframework",
"product": "phoenix",
"defaultStatus": "unaffected",
"collectionURL": "https://github.com",
"packageName": "phoenixframework/phoenix",
"cpes": [
"cpe:2.3:a:phoenixframework:phoenix:*:*:*:*:*:*:*:*"
],
"modules": [
"'Elixir.Phoenix.Transports.LongPoll'"
],
"programFiles": [
"lib/phoenix/transports/long_poll.ex"
],
"programRoutines": [
{
"name": "'Elixir.Phoenix.Transports.LongPoll':publish/4"
}
],
"repo": "https://github.com/phoenixframework/phoenix",
"packageURL": "pkg:github/phoenixframework/phoenix",
"versions": [
{
"version": "2674c6ea30634667f9b09966b90269393b445953",
"lessThan": "*",
"versionType": "git",
"status": "affected",
"changes": [
{
"at": "1a67c61ff9ce0a7711662ac7354861917a7c80f7",
"status": "unaffected"
},
{
"at": "912ea181fd247c21dbcc49fb97d0053b947d81bf",
"status": "unaffected"
}
]
}
]
}
]
}
],
"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"
}
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-05-05T18:37:12.444769Z",
"id": "CVE-2026-32689",
"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"
}
]
}
],
"references": [
{
"url": "https://cna.erlef.org/cves/CVE-2026-32689.html",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/phoenixframework/phoenix/commit/1a67c61ff9ce0a7711662ac7354861917a7c80f7",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/phoenixframework/phoenix/commit/912ea181fd247c21dbcc49fb97d0053b947d81bf",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/phoenixframework/phoenix/security/advisories/GHSA-628h-q48j-jr6q",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-32689",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
}
]
}