CVE-2026-97853
Vulnerabilidad de asignación de memoria con valor de tamaño excesivo en decimal de ericmj que permite denegación de servicio.
Decimal.round/3 construye el resultado completo para el número solicitado de lugares decimales antes de que se aplique la precisión del contexto (34 dígitos por defecto), por lo que su costo crece con el argumento places en lugar de crecer con el tamaño del resultado.
Leer descripción completaMostrar menos
Para places positivos, añade places dígitos cero al coeficiente como una lista de caracteres antes de convertirlo a un entero, y para places negativos construye una lista de caracteres de -places dígitos cero. Una única llamada como Decimal.round(Decimal.new("1.5"), -50_000_000) asigna alrededor de 5.5 GB de memoria, lo que puede agotar la memoria disponible e interrumpir la máquina virtual BEAM. Los lanzamientos más antiguos en su lugar iteran una vez por lugar decimal, consumiendo CPU en proporción a places.
Cualquier aplicación que pase un número de lugares decimales o escala suministrado por el usuario a Decimal.round/2 o Decimal.round/3 sin limitarlo está expuesta. Los límites de entrada añadidos para CVE-2026-32686 no cubren el argumento places.
Este problema afecta a decimal: desde 0.1.0 anterior a 3.1.2.
Traducción automática del texto original de NVD (en inglés).
CVSS
- Versión: 4.0
- Vector: CVSS:4.0/AV:L/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
- Puntuación base: 6.9
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días: 0.14%
- Percentil entre todas las CVEs puntuadas: 3
- Fecha de la puntuación: 13/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
🎯 Técnicas ATT&CK
Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.
- Explotación
T1068Exploitation for Privilege Escalationprivilege escalation75 % - Impacto principal
T1499.004Application or System Exploitationimpact85 %
Vulnerabilidad local (AV:L, PR:N) de asignación excesiva de memoria en Decimal.round/3 que agota RAM y mata la VM. Requiere acceso local sin privilegios.
Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.
🛡️ Mitigaciones ATT&CK que cubren estas técnicas
Tecnologías afectadas (1)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
CWE
- CWE-789
Referencias
- https://cna.erlef.org/cves/CVE-2026-97853.html
- https://github.com/ericmj/decimal/commit/05bb73eb40ddef24eda782d905766f56a3660522
- https://github.com/ericmj/decimal/commit/338f42c8cf6a9749ab70c5af04734c6050ca3dc6
- https://github.com/ericmj/decimal/commit/3c90af4c3c2dfa4bb4c138760a326dd0eb91822b
- https://github.com/ericmj/decimal/security/advisories/GHSA-6c27-994x-c52f
- https://osv.dev/vulnerability/EEF-CVE-2026-97853
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-97853",
"cveTags": [],
"metrics": {
"cvssMetricV40": [
{
"type": "Secondary",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"cvssData": {
"Safety": "NOT_DEFINED",
"version": "4.0",
"Recovery": "NOT_DEFINED",
"baseScore": 6.9,
"Automatable": "NOT_DEFINED",
"attackVector": "LOCAL",
"baseSeverity": "MEDIUM",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:L/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",
"exploitMaturity": "NOT_DEFINED",
"providerUrgency": "NOT_DEFINED",
"userInteraction": "NONE",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"privilegesRequired": "NONE",
"subIntegrityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"integrityRequirement": "NOT_DEFINED",
"modifiedAttackVector": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"vulnAvailabilityImpact": "HIGH",
"availabilityRequirement": "NOT_DEFINED",
"modifiedUserInteraction": "NOT_DEFINED",
"modifiedAttackComplexity": "NOT_DEFINED",
"subConfidentialityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"confidentialityRequirement": "NOT_DEFINED",
"modifiedAttackRequirements": "NOT_DEFINED",
"modifiedPrivilegesRequired": "NOT_DEFINED",
"modifiedSubIntegrityImpact": "NOT_DEFINED",
"modifiedVulnIntegrityImpact": "NOT_DEFINED",
"vulnerabilityResponseEffort": "NOT_DEFINED",
"modifiedSubAvailabilityImpact": "NOT_DEFINED",
"modifiedVulnAvailabilityImpact": "NOT_DEFINED",
"modifiedSubConfidentialityImpact": "NOT_DEFINED",
"modifiedVulnConfidentialityImpact": "NOT_DEFINED"
}
}
]
},
"affected": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"affectedData": [
{
"cpes": [
"cpe:2.3:a:ericmj:decimal:*:*:*:*:*:*:*:*"
],
"repo": "https://github.com/ericmj/decimal",
"vendor": "ericmj",
"modules": [
"'Elixir.Decimal'"
],
"product": "decimal",
"versions": [
{
"status": "affected",
"version": "0.1.0",
"lessThan": "3.1.2",
"versionType": "semver"
}
],
"packageURL": "pkg:hex/decimal",
"packageName": "decimal",
"programFiles": [
"lib/decimal.ex"
],
"collectionURL": "https://repo.hex.pm",
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "'Elixir.Decimal':round/2"
},
{
"name": "'Elixir.Decimal':round/3"
}
]
},
{
"cpes": [
"cpe:2.3:a:ericmj:decimal:*:*:*:*:*:*:*:*"
],
"repo": "https://github.com/ericmj/decimal",
"vendor": "ericmj",
"modules": [
"'Elixir.Decimal'"
],
"product": "decimal",
"versions": [
{
"status": "affected",
"changes": [
{
"at": "338f42c8cf6a9749ab70c5af04734c6050ca3dc6",
"status": "unaffected"
},
{
"at": "3c90af4c3c2dfa4bb4c138760a326dd0eb91822b",
"status": "unaffected"
}
],
"version": "05bb73eb40ddef24eda782d905766f56a3660522",
"lessThan": "*",
"versionType": "git"
}
],
"packageURL": "pkg:github/ericmj/decimal",
"packageName": "ericmj/decimal",
"programFiles": [
"lib/decimal.ex"
],
"collectionURL": "https://github.com",
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "'Elixir.Decimal':round/2"
},
{
"name": "'Elixir.Decimal':round/3"
}
]
}
]
}
],
"published": "2026-10-10T20:16:47.640",
"references": [
{
"url": "https://cna.erlef.org/cves/CVE-2026-97853.html",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/ericmj/decimal/commit/05bb73eb40ddef24eda782d905766f56a3660522",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/ericmj/decimal/commit/338f42c8cf6a9749ab70c5af04734c6050ca3dc6",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/ericmj/decimal/commit/3c90af4c3c2dfa4bb4c138760a326dd0eb91822b",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/ericmj/decimal/security/advisories/GHSA-6c27-994x-c52f",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-97853",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
}
],
"vulnStatus": "Deferred",
"weaknesses": [
{
"type": "Secondary",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"description": [
{
"lang": "en",
"value": "CWE-789"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "Memory Allocation with Excessive Size Value vulnerability in ericmj decimal allows Denial of Service.\n\nDecimal.round/3 builds the full result for the requested number of decimal places before the context precision (34 digits by default) is applied, so its cost grows with the places argument instead of with the size of the result. For positive places it appends places zero digits to the coefficient as a charlist before converting it to an integer, and for negative places it builds a charlist of -places zero digits. A single call such as Decimal.round(Decimal.new(\"1.5\"), -50_000_000) allocates about 5.5 GB of memory, which can exhaust available memory and get the BEAM VM killed. The oldest releases instead loop once per decimal place, consuming CPU in proportion to places.\n\nAny application that passes a user-supplied number of decimal places or scale to Decimal.round/2 or Decimal.round/3 without bounding it is exposed. The input limits added for CVE-2026-32686 do not cover the places argument.\n\nThis issue affects decimal: from 0.1.0 before 3.1.2."
}
],
"lastModified": "2026-10-13T14:31:20.750",
"sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
}