
Autocontrollo di 26 avvisi di sicurezza per jackson-databind + jackson-core: intersecando voce per voce in base alle coordinate si ottengono le versioni realmente adeguate (2.18.11/2.21.7/2.22.3/3.1.7/3.2.3, la 2.21.6 non è più sufficiente); la scansione del codice sorgente con riduzione del rumore indica quante voci sono realmente colpite; include 1 voce non registrata nella libreria globale di GitHub e non segnalata da Dependabot (quella di jackson-core, colpita anche aggiornando databind) CVE-2026-54515 / CVE-2026-54512
Strumento di autoverifica per 26 avvisi di sicurezza di jackson-databind + jackson-core. Jar singolo senza dipendenze, nessuna connessione di rete.
Risponde a tre domande a cui Dependabot non sa rispondere:
jackson-core: CVE-2026-68498 (vedi la sezione «v0.3.0»).@JsonView / tipi polimorfici / corrispondenza senza distinzione tra maiuscole e minuscole…), riducendo il rumore da «ho installato una versione vulnerabile» a «ho effettivamente attivato quella funzionalità».java -jar jackson-check.jar ./target ./src
Il 30-09 e l'01-10, FasterXML ha pubblicato altre 4 segnalazioni high (tutte 7.5, tutte denial of service):
| ID | Coordinate | Tema | Condizione di attivazione |
|---|---|---|---|
| CVE-2026-91776 | jackson-databind | Ogni type id sconosciuto lascia una voce nella cache per l'intera durata del processo, la memoria cresce e non diminuisce mai | @JsonTypeInfo(use = Id.NAME, defaultImpl = …) + l'attaccante può controllare il type id + mapper riutilizzato a lungo termine |
| CVE-2026-91777 | jackson-databind | Quando i riferimenti in avanti vengono completati in ordine inverso, il numero di confronti è circa N²/2 (N=2000 → 2.003.000 confronti) | Deserializzare JSON non attendibile in una collezione o Map con @JsonIdentityInfo |
| CVE-2026-89425 | jackson-core | Un token malformato viene concatenato per intero nel messaggio di eccezione, senza il limite di maxErrorTokenLength | Solo il percorso createParser(DataInput); l'avviso specifica che nessuna configurazione può mitigarlo |
| CVE-2026-89407 | jackson-core | Backtracking quadratico della regex in NumberInput.looksLikeValidNumber() (74,4 secondi misurati con 160.000 caratteri) | Associare una stringa JSON a un campo numerico (comportamento predefinito di databind); questo percorso è limitato da maxStringLength (predefinito 20 milioni) e non da maxNumberLength (predefinito 1000) |
Le versioni corrette per le due coordinate hanno lo stesso numero: 2.18.11 / 2.21.7 / 2.22.3 / 3.1.7 / 3.2.3 (tutte scaricabili da Central; la 89407 sulla linea 3.2 è corretta nella 3.2.2, la 89425 richiede la 3.2.3, si prende la maggiore).
Quindi le versioni 2.18.10 / 2.21.6 / 2.22.2 / 3.1.6 / 3.2.2 indicate da v0.2.0 / v0.3.0 non bastano più dal 30-09. I jar delle vecchie versioni non lo sapranno mai — passate a v0.4.0 e rieseguite la scansione.
⚠️ Queste quattro non sono punti ciechi di Dependabot: sono entrate nella banca dati globale delle vulnerabilità di GitHub il giorno stesso della pubblicazione e Dependabot le segnala regolarmente. v0.4.0 le integra solo per mantenere corretta la risposta alla domanda "a quale versione devo aggiornare".
🔴 Correzione contestuale di un'affermazione di v0.2.0: quanto scritto nella sezione "v0.2.0" qui sotto, cioè che "quelle 4 non sono state inserite nella banca dati globale delle vulnerabilità di GitHub e Dependabot non le segnala", era valido fino al 14-09, ma dal 2026-09-28 non lo è più — tutte e quattro sono state inserite nella banca dati globale (riesecuzione di ASSERT2 in
gen_rules.pyil 05-10: punti ciechi lato databind da 4 → 0). L'unica ancora non reperibile èCVE-2026-68498dijackson-core.
jackson-core è una coordinata diversa, scansionare databind non lo rilevaLa tabella di valutazione di v0.2.x conteneva come unico artifactId jackson-databind. Di conseguenza, le 7 segnalazioni pubblicate da FasterXML
nel repository jackson-core non venivano rilevate nemmeno una da questo strumento —
e non per questo restituiva un errore: saltava silenziosamente tutti i jackson-core-*.jar.
"Non scansionato" e "sei al sicuro" nel report hanno lo stesso aspetto.
v0.3.0 cambia la granularità della valutazione da advisory × groupId × intervallo a advisory × groupId × artifactId × intervallo,
e valutazione, intersezione e "coordinata non scansionata" usano tutti come chiave la coordinata completa.
La più importante da notare — CVE-2026-68498 (high 7.5, 2026-09-12):
StreamReadConstraints.maxNameLength (predefinito 50.000 caratteri) non ha effetto sul percorso di input a caratteri.
ReaderBasedJsonParser, accumulando i nomi delle proprietà, chiama il limite di lunghezza delle stringhe (predefinito 100 milioni, circa 2000 volte tanto),
e la vera validazione del nome viene eseguita solo dopo aver scansionato l'intera chiave — a quel punto sono già stati allocati circa 200MB.
Basta una singola chiave JSON estremamente lunga, con la configurazione predefinita si è colpiti.
>= 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 rivalida a ogni espansione del buffer.
Chi analizza da byte[] / InputStream non è interessato; chi analizza da String / Reader / char[] sì.validateNameLength esiste solo nel ReaderBasedJsonParser delle versioni corrette,
non in quelle vulnerabili (riprodotto su tutte e tre le linee 2.18.9→2.18.10 · 2.21.5→2.21.6 · 3.1.5→3.1.6).⚠️ Limiti delle capacità dello strumento, scritti qui per evitare fraintendimenti: questo strumento è in grado di determinare la versione del jar, ma non è in grado di determinare il tuo modo di chiamata — la forma più comune,
readValue(someStringVariable, …), non permette alla scansione testuale di capire se quella variabile siaStringobyte[]. Quindi «condizione di attivazione non trovata» non significa che tu non sia interessato; è così che viene stampato anche nel report.
🔴 Non leggerlo come «Dependabot è completamente cieco su jackson-core»: delle 7 voci di
jackson-core, soloCVE-2026-68498non è reperibile nel database globale delle vulnerabilità di GitHub; le altre 6 sono tutte registrate e Dependabot le segnala regolarmente. Questa voce viene ricontrollata a ogni riesecuzione daASSERT-C2digen_rules.py; se il numero cambia, la generazione viene rifiutata.
🔴 Questa sezione è un record del 09-14, due punti sono ormai superati (vedi «v0.4.0» sopra): ① questi 4 sono stati registrati nel database globale il 2026-09-28, Dependabot ora li segnala; ② la versione che «li corregge tutti in una volta» non è più 2.18.10 / 2.21.6 / 3.1.6. Il testo originale è conservato, non eliminato.
FasterXML ha pubblicato 4 nuove voci nella pagina Security del proprio repository: