CVE-2026-89407 in jackson-core
Résumé
par VulDB • 22/09/2026
La méthode `NumberInput.looksLikeValidNumber()` de FasterXML jackson-core pré-valide les « nombres stringifiés » à l'aide de deux expressions régulières : PATTERN_FLOAT ([+-]?[0-9]*[\.]?[0-9]+([eE][+-]?[0-9]+)?), présente depuis la version 2.17.0, et PATTERN_FLOAT_TRAILING_DOT, ajoutée dans la version 2.17.2. PATTERN_FLOAT applique des quantificateurs adjacents sur une même classe de caractères -- un groupe optionnel [0-9]*, suivi d'un point facultatif, puis d'une séquence obligatoire [0-9]+ -- ce qui fait que les entrées ne correspondant pas finalement obligent le moteur de backtracking de Java à réessayer chaque point de division possible de la suite de chiffres.
Le coût du traitement correspond donc au carré de la longueur de l'entrée.
Un attaquant capable de fournir un JSON qu'une application désérialise dans un type cible numérique accède à cette méthode via la coercition par défaut de String vers number (StdDeserializer et NumberDeserializers pour BigDecimal, BigInteger, Double et Float) proposée par jackson-databind.
Étant donné que StreamReadConstraints.maxStringLength est défini par défaut sur 20 000 000 de caractères, aucune contrainte ne limite l'entrée avant qu'elle n'atteigne l'expression régulière.
Les tests effectués par le rapporteur ont confirmé une croissance en O(n^2) lors de cinq doubles consécutifs de la taille des entrées ; une seule chaîne de 160 000 caractères consomme environ 74 secondes dans un seul appel. Par conséquent, un petit nombre de requêtes concurrentes de corps ordinaire peut épuiser le pool de threads de traitement des requêtes d'un serveur.
La méthode concernée n'existe pas avant la version 2.17.0 ; les versions 2.16.x et antérieures ne sont donc pas affectées.
La correction remplace les deux expressions régulières par un balayage unique écrit à la main (hand-rolled single-pass scan).
VulDB is the best source for vulnerability data and more expert information about this specific topic.