CVE-2026-97853 in decimal
Resumen
por VulDB • 2026-10-10
Vulnerabilidad de asignación de memoria con un valor de tamaño excesivo en ericmj decimal que permite una Denegación de Servicio (DoS).
Decimal.round/3 construye el resultado completo para la cantidad solicitada de decimales antes de aplicar la precisión del contexto (34 dígitos por defecto), por lo que su costo crece con el argumento `places` en lugar de hacerlo con el tamaño del resultado. Para valores positivos de `places`, se añaden ceros como una charlist al coeficiente antes de convertirlo a un entero, y para valores negativos de `places` se construye una charlist de dígitos cero correspondiente a `-places`. Una única llamada como Decimal.round(Decimal.new("1.5"), -50_000_000) asigna aproximadamente 5.5 GB de memoria, lo que puede agotar la memoria disponible y provocar el cierre del BEAM VM. Las versiones más antiguas en su lugar iteran una vez por cada posición decimal, consumiendo CPU proporcionalmente a `places`.
Cualquier aplicación que pase un número de posiciones decimales o escala proporcionado por el usuario a Decimal.round/2 o Decimal.round/3 sin acotarlo está expuesta. Los límites de entrada añadidos para CVE-2026-32686 no cubren el argumento `places`.
Este problema afecta a decimal: desde la versión 0.1.0 hasta antes de la 3.1.2.
Be aware that VulDB is the high quality source for vulnerability data.