jackson-databind quadratic forward-reference completion
Summary
When an @JsonIdentityInfo collection or map first creates N unresolved
object-ID references and later resolves the same IDs in reverse order,
jackson-databind scans the remaining pending-reference accumulator for each
resolution. A shallow JSON document whose size grows linearly can therefore
cause quadratic CPU work during deserialization.
Details
The affected path is forward-reference completion in
CollectionDeserializer.CollectionReferringAccumulator.resolveForwardReference()
and the corresponding map implementation. The implementation performs a
linear search of the pending accumulator for every resolved object ID.
The behavior is runtime-confirmed in jackson-databind 2.5.0, 2.22.1, and 3.2.1. Current 2.22 and 3.2 source branches retained the same design when rechecked. A 2.4.0 control fails closed before successful reverse-order completion, so 2.5.0 is the conservative runtime-confirmed affected floor. The patched versions are: 2.18.11, 2.21.7, 2.22.3, 3.1.7 and 3.2.3.
The vulnerable application must deserialize attacker-influenced JSON into an identity-enabled collection or map. The issue does not require deep nesting or syntactically unusual JSON.
Suggested correction: replace repeated linear lookup/removal with a keyed pending-reference structure or another design that provides linear or amortized-linear completion. A regression should preserve input order, duplicate-ID behavior, and unresolved-ID errors while bounding reverse-order resolution work.
PoC
The proof constructs a shallow collection containing N unresolved
@JsonIdentityInfo references followed by definitions of those same IDs in
reverse order. Its ID class counts equals() calls, giving a deterministic
work measure rather than a timing-dependent result.
With N=2,000, affected versions perform exactly 2,003,000 ID comparisons. An
equally sized control in which every reference is already resolved performs
zero comparisons in the pending-reference lookup path. The run is bounded to
a 512 MiB JVM. The result demonstrates quadratic growth: approximately
N * (N + 1) / 2 comparisons, plus fixed setup comparisons.
Impact
An unauthenticated source that can submit JSON to an application using the affected identity-enabled collection or map shape can consume quadratic CPU and exhaust a request-time or worker-capacity budget, causing denial of service. The application model/configuration prerequisite is material. No confidentiality, integrity, code-execution, or parser-depth impact is claimed.
Requested credit: Daniel Birtwhistle
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Java / Kotlin (Maven) | com.fasterxml.jackson.core:jackson-databind | >= 2.19.0, < 2.21.7, >= 2.5.0, < 2.18.11, >= 2.22.0, < 2.22.3 | 2.21.7, 2.18.11, 2.22.3 |
| Java / Kotlin (Maven) | tools.jackson.core:jackson-databind | >= 3.0.0, < 3.1.7, >= 3.2.0, < 3.2.3 | 3.1.7, 3.2.3 |
Referencias
- https://github.com/FasterXML/jackson-databind/security/advisories/GHSA-cxp5-3px4-pw24
- https://nvd.nist.gov/vuln/detail/CVE-2026-91777
- https://github.com/FasterXML/jackson-databind/issues/6204
- https://github.com/FasterXML/jackson-databind/pull/6204
- https://github.com/FasterXML/jackson-databind/commit/37ad9b81712cbb9fb62c2d2c1813593252a24b67
- https://github.com/FasterXML/jackson-databind
- https://github.com/FasterXML/jackson-databind/releases/tag/jackson-databind-2.18.11
- https://github.com/FasterXML/jackson-databind/releases/tag/jackson-databind-2.21.7
- https://github.com/FasterXML/jackson-databind/releases/tag/jackson-databind-2.22.3
- https://github.com/FasterXML/jackson-databind/releases/tag/jackson-databind-3.1.7
- https://github.com/FasterXML/jackson-databind/releases/tag/jackson-databind-3.2.3
- Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H- Debilidad (CWE)
CWE-400- Plataforma
- Java / Kotlin (Maven)
- Paquete
com.fasterxml.jackson.core:jackson-databind, tools.jackson.core:jackson-databind- Publicada
- 30.09.2026
- Actualizado
- 11.10.2026 13:20
Fuentes y licencias
OSV / GitHub Advisory Database - GHSA-cxp5-3px4-pw24 - CC BY 4.0
Historial de vulnerabilidades: com.fasterxml.jackson.core:jackson-databind
Todas las vulnerabilidades publicadas de este paquete (Java / Kotlin (Maven)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
- Entradas en total
- 86
- Primera → última
- 10.2018 09.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Crítica 24
- Alta 48
- Media 14
Divulgaciones por año
- 2018: 4
- 2019: 19
- 2020: 23
- 2021: 18
- 2022: 4
- 2023: 1
- 2024: 0
- 2025: 0
- 2026: 17
-
jackson-databind quadratic forward-reference completion esta entrada
Identifica las vulnerabilidades de tu aplicación
Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.