
Autoevaluación de 26 avisos de seguridad de jackson-databind + jackson-core: intersección uno por uno según las coordenadas para dar las versiones realmente adecuadas (2.18.11/2.21.7/2.22.3/3.1.7/3.2.3, 2.21.6 ya no es suficiente); escaneo del código fuente con reducción de ruido para indicarte cuántos realmente afectan; incluye 1 que no está recogido en la base de datos global de GitHub y que Dependabot no reporta (el de jackson-core, que sigue afectando aunque actualices databind) CVE-2026-54515 / CVE-2026-54512
Herramienta de autocomprobación de 26 avisos de seguridad de jackson-databind + jackson-core. Un único jar sin dependencias, sin conexión a red.
Responde tres preguntas que Dependabot no puede responder:
jackson-core, CVE-2026-68498 (véase la sección «v0.3.0»).@JsonView / tipos polimórficos / coincidencia sin distinción de mayúsculas y minúsculas…), reduciendo el ruido de «tengo instalada una versión afectada» a «realmente estoy usando esa característica».java -jar jackson-check.jar ./target ./src
El 09-30 y el 10-01, FasterXML publicó otras 4 alertas high (todas de 7.5, todas de denegación de servicio):
| Identificador | Coordenada | Tema | Condición de activación |
|---|---|---|---|
| CVE-2026-91776 | jackson-databind | Cada type id desconocido deja una entrada en la caché durante toda la vida del proceso; la memoria solo crece | @JsonTypeInfo(use = Id.NAME, defaultImpl = …) + el atacante puede controlar el type id + el mapper se reutiliza durante mucho tiempo |
| CVE-2026-91777 | jackson-databind | Al completar definiciones de referencias hacia delante en orden inverso, el número de comparaciones es de aproximadamente N²/2 (N=2000 → 2.003.000 comparaciones) | Deserializar JSON no confiable en una colección o Map con @JsonIdentityInfo |
| CVE-2026-89425 | jackson-core | Un token malformado se concatena entero en el mensaje de excepción, sin respetar maxErrorTokenLength | Solo en la ruta createParser(DataInput); el aviso indica que no hay configuración que lo mitigue |
| CVE-2026-89407 | jackson-core | Retroceso cuadrático en la regex de NumberInput.looksLikeValidNumber() (74,4 segundos medidos con 160.000 caracteres) | Vincular una cadena de JSON a un campo numérico (comportamiento por defecto de databind); esta ruta está limitada por maxStringLength (20 millones por defecto) y no por maxNumberLength (1000 por defecto) |
Las versiones corregidas de ambas coordenadas comparten número: 2.18.11 / 2.21.7 / 2.22.3 / 3.1.7 / 3.2.3 (todas descargables desde Central; 89407 se corrige en la línea 3.2 en 3.2.2, 89425 requiere 3.2.3; se toma la mayor).
Por eso, las versiones 2.18.10 / 2.21.6 / 2.22.2 / 3.1.6 / 3.2.2 que imprimían v0.2.0 / v0.3.0 ya no bastan desde el 09-30. Los jars de versiones antiguas no sabrán nada de esto —— vuelve a escanear con v0.4.0.
⚠️ Estas cuatro no son puntos ciegos de Dependabot: entraron en la base global de vulnerabilidades de GitHub el mismo día de su publicación, y Dependabot alertará con normalidad. v0.4.0 las incorpora solo para que la respuesta a «a qué versión hay que subir» siga siendo correcta.
🔴 Al mismo tiempo, se corrige una afirmación de v0.2.0: lo que dice la sección «v0.2.0» más abajo, «esas 4 no están recogidas en la base global de vulnerabilidades de GitHub, Dependabot no las reportará», era cierto hasta el 09-14 y dejó de serlo desde el 2026-09-28 —— las cuatro ya están recogidas en la base global (rerun de ASSERT2 de
gen_rules.pyel 10-05: puntos ciegos del lado databind 4 → 0). Ahora lo único que sigue sin poder consultarse esCVE-2026-68498dejackson-core.
jackson-core es otra coordenada, escanear databind no lo detectaLa tabla de decisión de v0.2.x tenía como único artifactId jackson-databind. Por eso, de los 7 avisos que FasterXML publicó en el
repositorio jackson-core, esta herramienta no podía detectar ni uno ——
y no por ello reportaba ningún error, simplemente omitía en silencio todos los jackson-core-*.jar.
«No se ha escaneado» y «estás a salvo» se ven exactamente igual en el informe.
v0.3.0 cambia la granularidad de decisión de advisory × groupId × intervalo a advisory × groupId × artifactId × intervalo,
y la decisión, la intersección y el «no se ha escaneado esta coordenada» usan todos como clave la coordenada completa.
La más importante —— CVE-2026-68498(high 7.5, 2026-09-12):
StreamReadConstraints.maxNameLength (50.000 caracteres por defecto) no surtía efecto en la ruta de entrada de caracteres.
ReaderBasedJsonParser, al acumular nombres de atributo, llama al límite de longitud de cadena (100 millones por defecto, unas 2000 veces mayor),
y la validación real del name solo se ejecuta cuando se ha escaneado toda la clave —— para entonces ya se han asignado unos 200 MB.
Basta con una sola clave JSON extremadamente larga, y con la configuración por defecto ya se ve afectado.
>= 2.16.0, <= 2.18.9 → 2.18.10 · >= 2.19.0, <= 2.21.5 → 2.21.6 ·
>= 2.22.0, <= 2.22.1 → 2.22.2 · 3.x(tools.jackson.core)<= 3.1.5 → 3.1.6 · <= 3.2.1 → 3.2.2UTF8StreamJsonParser revalida en cada expansión del búfer.
Lo que se analiza desde byte[] / InputStream no se ve afectado; solo lo que se analiza desde String / Reader / char[].validateNameLength solo existe en el ReaderBasedJsonParser de la versión corregida,
y no está en las versiones afectadas (reproducido en las tres líneas 2.18.9→2.18.10 · 2.21.5→2.21.6 · 3.1.5→3.1.6).⚠️ Límites de las capacidades de la herramienta, escritos aquí para evitar malas interpretaciones: esta herramienta puede determinar la versión del jar, pero no puede determinar tu forma de invocación — la forma más común,
readValue(someStringVariable, …), un escaneo de texto no puede distinguir si esa variable esStringobyte[]. Por lo tanto, «no se encontraron condiciones de activación» no significa que no te afecte; así se imprime también en el informe.
🔴 No lo interpretes como «Dependabot está completamente ciego a jackson-core»: de las 7 entradas de
jackson-core, soloCVE-2026-68498no se encuentra en la base global de vulnerabilidades de GitHub; las otras 6 ya están registradas y Dependabot alerta con normalidad. Esta entrada es verificada porASSERT-C2degen_rules.pyen cada reejecución; si el número cambia, se rechaza la generación.
🔴 Esta sección es un registro del 09-14, con dos puntos ya obsoletos (véase «v0.4.0» arriba): ① estas 4 entradas fueron registradas en la base global el 2026-09-28, por lo que Dependabot ahora sí alerta; ② la versión de «corregir todo de una vez» ya no es 2.18.10 / 2.21.6 / 3.1.6. Se conserva el texto original, sin eliminar.
FasterXML publicó 4 nuevas entradas en la página Security de su propio repositorio: