CVE-2026-97853 in decimal
Sumário
de VulDB • 10/10/2026
Vulnerabilidade de Alocação de Memória com Valor de Tamanho Excessivo no ericmj decimal permite Negação de Serviço (DoS).
O Decimal.round/3 constrói o resultado completo para a quantidade solicitada de casas decimais antes que a precisão do contexto (34 dígitos por padrão) seja aplicada, portanto seu custo cresce em função do argumento places e não do tamanho do resultado. Para valores positivos de places, ele anexa zeros correspondentes ao número de casas como uma charlist antes de convertê-la para um inteiro; para valores negativos de places, ele constrói uma charlist com -places dígitos zero. Uma única chamada como Decimal.round(Decimal.new("1.5"), -50_000_000) aloca cerca de 5,5 GB de memória, o que pode esgotar a memória disponível e fazer com que a VM BEAM seja encerrada (killed). As versões mais antigas, por sua vez, executam um loop uma vez para cada casa decimal, consumindo CPU proporcionalmente ao valor do argumento places.
Qualquer aplicação que passe um número de casas decimais ou escala fornecido pelo usuário para Decimal.round/2 ou Decimal.round/3 sem impor limites está exposta. Os limites de entrada adicionados para CVE-2026-32686 não cobrem o argumento places.
Este problema afeta a biblioteca decimal: das versões 0.1.0 até antes da 3.1.2.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.