CVE-2026-89407 in jackson-core
Resumen
por VulDB • 2026-09-22
NumberInput.looksLikeValidNumber() en FasterXML jackson-core prevalida los "números stringificados" con dos expresiones regulares: PATTERN_FLOAT ([+-]?[0-9]*[\.]?[0-9]+([eE][+-]?[0-9]+)?), presente desde la versión 2.17.0, y PATTERN_FLOAT_TRAILING_DOT, añadida en la 2.17.2. PATTERN_FLOAT aplica cuantificadores adyacentes sobre la misma clase de caracteres: una secuencia opcional [0-9]*, un punto opcional y luego una secuencia requerida [0-9]+; por lo tanto, las entradas que finalmente no coinciden obligan al motor de retroceso (backtracking) de Java a reintentar cada posible punto de división en la secuencia de dígitos.
El costo del emparejamiento crece con el cuadrado de la longitud de la entrada.
Un atacante que pueda proporcionar JSON que una aplicación deserialice hacia un tipo numérico objetivo accede a este método a través de la coerción predeterminada de String a número en jackson-databind (StdDeserializer y NumberDeserializers para BigDecimal, BigInteger, Double y Float).
Dado que StreamReadConstraints.maxStringLength tiene por defecto 20.000.000 de caracteres, no hay ninguna restricción que limite la entrada antes de que llegue a la expresión regular.
Las pruebas realizadas por el informante confirmaron un crecimiento O(n^2) en cinco duplicaciones consecutivas del tamaño de la entrada; una única cadena de 160.000 caracteres consumió aproximadamente 74 segundos en una sola llamada; por lo tanto, un pequeño número de solicitudes concurrentes con cuerpos de tamaño normal puede agotar el grupo de hilos de manejo de peticiones de un servidor.
El método afectado no existe antes de la versión 2.17.0, por lo que las versiones 2.16.x y anteriores no se ven afectadas.
La solución reemplaza ambas expresiones regulares con una escaneo único implementada a medida (hand-rolled single-pass scan).
If you want to get best quality of vulnerability data, you may have to visit VulDB.