Średnia

jackson-databind: @JsonView bypassed for @JsonUnwrapped container properties on deserialization

  • Ujawniono: 21.07.2026
  • Aktualizacja: 19.10.2026 22:17

Summary

UnwrappedPropertyHandler.processUnwrapped() replays the buffered JSON for a @JsonUnwrapped property by iterating its properties and calling prop.deserializeAndSet() with no prop.visibleInView(ctxt.getActiveView()) guard — the exact guard processUnwrappedCreatorProperties() received in the #5971 / GHSA-rcqc-6cw3-h962 fix, and the guard BeanDeserializer.deserializeWithUnwrapped applies to directly-matched properties. As a result, a property annotated with both @JsonView(PrivilegedView.class) and @JsonUnwrapped is written from attacker JSON even when deserializing under a more-restrictive active view.

Correction to the original framing (runtime-verified): the gap is NOT a per-field inner @JsonView (the unwrapped sub-object's own BeanDeserializer gates inner fields correctly). The unchecked gate is the view of the unwrapped CONTAINER property.

Intent proof (runtime, 2.x HEAD 21dd70dd and 3.x HEAD 7a5939d6)

An @JsonView(AdminView) property that is NOT @JsonUnwrapped → null under PublicView (correctly gated). The identical property WITH @JsonUnwrapped → fully populated (bypass). The fix the creator path already received, not applied to the regular-property method.

Impact — write-side mass-assignment / privilege escalation

@JsonView is commonly used as a write-side authorization guard: a public endpoint binds the body under readerWithView(PublicView.class) and groups privileged state in a nested object whose container property is @JsonView(AdminView). When that property is @JsonUnwrapped, an untrusted caller mass-assigns it. PoC: a self-service registration where AccountFlags{role,approved,creditBalance} is @JsonView(AdminView) @JsonUnwrapped; attacker JSON {role:ADMIN,approved:true,creditBalance:1000000} under PublicView binds all three → approved admin with arbitrary balance. The failing gate is a WRITE gate, hence integrity-high (C:N/I:H/A:N); no worse than the C:L/I:L parent and arguably higher as @JsonView-as-write-guard is the exact use case #5971/#5969 defended.

Affected

  • com.fasterxml.jackson.core:jackson-databind 2.x: confirmed bypass at 21dd70dd (== released 2.21.4 / 2.22.0 line; includes the #5973 backport). DEFAULT_VIEW_INCLUSION default=true.
  • tools.jackson.core:jackson-databind 3.x: confirmed bypass at HEAD 7a5939d6 (latest 3.x). DEFAULT_VIEW_INCLUSION default=false → the stock-config repro is the common shape where privileged inner fields are individually @JsonView(PublicView) and the developer relies on the container @JsonView(AdminView); the 3.x PoC mass-assigns role/approved/creditBalance under PublicView. (The other simultaneous report's PoC was reportedly fixed on 3.x; this distinct container-property path is not.)

Additive variants (runtime-confirmed both branches; all closed by the same one-line guard)

  • nested @JsonUnwrapped (unwrapped-in-unwrapped) — recursive bypass.
  • merge / readerWithView(...).withValueToUpdate(...) (PATCH/partial-update) — bypass; non-unwrapped merge control gates correctly.
  • builder-based deserializer (@JsonDeserialize(builder=...)) — BuilderBasedDeserializer routes through the same processUnwrapped.
  • Honest non-findings: read-side serialization correctly honors views (no leak); @JsonAnySetter+view and @JsonTypeInfo+@JsonUnwrapped are separate/unsupported behaviors, not this bug.

Fix

Add prop.visibleInView(ctxt.getActiveView()) (when MapperFeature.DEFAULT_VIEW_INCLUSION/active-view applies) to the processUnwrapped() property loop, mirroring processUnwrappedCreatorProperties(). One change closes the impact PoC + all three variants across BeanDeserializer and BuilderBasedDeserializer. Full runnable PoCs (2.x + 3.x) + variant harnesses available on request.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Java / Kotlin (Maven) com.fasterxml.jackson.core:jackson-databind >= 2.19.0, < 2.21.5, >= 2.0.0-RC1, < 2.18.9, >= 2.22.0, < 2.22.1 2.21.5, 2.18.9, 2.22.1
Java / Kotlin (Maven) tools.jackson.core:jackson-databind >= 3.0.0, < 3.1.5, >= 3.2.0, < 3.2.1 3.1.5, 3.2.1

Odnośniki

Ocena CVSS 6.5/10
Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
Słabość (CWE)
CWE-863
Platforma
Java / Kotlin (Maven)
Paczka
com.fasterxml.jackson.core:jackson-databind, tools.jackson.core:jackson-databind
Ujawniono
21.07.2026
Aktualizacja
19.10.2026 22:17

Źródła i licencje

OSV / GitHub Advisory Database - GHSA-5gvw-p9qm-jgwh - CC BY 4.0

Historia podatności: com.fasterxml.jackson.core:jackson-databind

Wszystkie opisane podatności tej paczki (Java / Kotlin (Maven)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (86) w archiwum
Wszystkich wpisów
86
Pierwsza → ostatnia
10.2018 09.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 24
  • Wysoka 48
  • Średnia 14

Ujawnienia w latach

  1. 2018: 4
  2. 2019: 19
  3. 2020: 23
  4. 2021: 18
  5. 2022: 4
  6. 2023: 1
  7. 2024: 0
  8. 2025: 0
  9. 2026: 17
Istotność:
  1. Wysoka · 7.5 CVE-2026-91777 >= 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
  2. Wysoka · 7.5 CVE-2026-91776 >= 2.0.0, < 2.18.11, >= 2.19.0, < 2.21.7, >= 2.22.0, < 2.22.3 2.18.11, 2.21.7, 2.22.3
  3. Wysoka · 7.5 CVE-2026-68497 >= 2.14.0, < 2.18.10, >= 2.19.0, < 2.21.6, >= 2.22.0, < 2.22.2 2.18.10, 2.21.6, 2.22.2
  4. jackson-databind: @JsonView bypassed for @JsonUnwrapped container properties on deserialization ten wpis
    Średnia · 6.5 CVE-2026-59889 >= 2.19.0, < 2.21.5, >= 2.0.0-RC1, < 2.18.9, >= 2.22.0, < 2.22.1 2.21.5, 2.18.9, 2.22.1
  5. Wysoka · 8.1 CVE-2026-54513 >= 2.10.0, < 2.18.8, >= 2.19.0, < 2.21.4, >= 3.0.0, < 3.1.4 2.18.8, 2.21.4, 3.1.4
  6. Wysoka · 8.1 CVE-2026-54512 >= 2.10.0, < 2.18.8, >= 3.0.0, < 3.1.4, >= 2.19.0, < 2.21.4 2.18.8, 3.1.4, 2.21.4
  7. Wysoka · 7.5 CVE-2021-46877 >= 2.10.0, < 2.12.6, >= 2.13.0, < 2.13.1 2.12.6, 2.13.1
  8. Wysoka · 7.5 CVE-2022-42003 >= 2.4.0-rc1, < 2.12.7.1, >= 2.13.0, < 2.13.4.2 2.12.7.1, 2.13.4.2
  9. Wysoka · 7.5 CVE-2022-42004 >= 2.4.0-rc1, < 2.12.7.1, >= 2.13.0, < 2.13.4 2.12.7.1, 2.13.4
  10. Wysoka · 8.1 CVE-2020-10650 < 2.9.10.4 2.9.10.4
  11. Wysoka · 7.5 CVE-2020-36518 >= 2.13.0, < 2.13.2.1, < 2.12.6.1 2.13.2.1, 2.12.6.1
  12. Wysoka · 8.1 CVE-2020-36189 >= 2.7.0, < 2.9.10.8, < 2.6.7.5 2.9.10.8, 2.6.7.5
  13. Wysoka · 8.1 CVE-2020-36187 >= 2.0.0, < 2.9.10.8 2.9.10.8
  14. Wysoka · 8.1 CVE-2020-36188 >= 2.7.0, < 2.9.10.8, >= 2.0.0, < 2.6.7.5 2.9.10.8, 2.6.7.5
  15. Wysoka · 8.1 CVE-2020-36183 >= 2.7.00, < 2.9.10.8, >= 2.0.0, < 2.6.7.5 2.9.10.8, 2.6.7.5
  16. Wysoka · 8.1 CVE-2020-36184 >= 2.0.0, < 2.9.10.8 2.9.10.8
  17. Wysoka · 8.1 CVE-2020-36180 >= 2.7.0, < 2.9.10.8, >= 2.0.0, < 2.6.7.5 2.9.10.8, 2.6.7.5
  18. Wysoka · 8.1 CVE-2020-36181 >= 2.7.0, < 2.9.10.8, >= 2.0.0, < 2.6.7.5 2.9.10.8, 2.6.7.5
  19. Wysoka · 8.1 CVE-2020-36185 >= 2.0.0, < 2.9.10.8 2.9.10.8
  20. Wysoka · 8.1 CVE-2020-36179 >= 2.7.0, < 2.9.10.8, >= 2.0.0, < 2.6.7.5 2.9.10.8, 2.6.7.5
  21. Wysoka · 8.1 CVE-2020-36182 >= 2.7.0, < 2.9.10.8, >= 2.0.0, < 2.6.7.5 2.9.10.8, 2.6.7.5
  22. Wysoka · 8.1 CVE-2020-24750 >= 2.0, < 2.6.7.5, >= 2.7.0, < 2.9.10.6 2.6.7.5, 2.9.10.6
  23. Wysoka · 8.1 CVE-2020-35728 >= 2.0.0, < 2.9.10.8 2.9.10.8
  24. Wysoka · 8.1 CVE-2020-35491 >= 2.0.0, < 2.9.10.8 2.9.10.8
  25. Wysoka · 8.1 CVE-2020-35490 >= 2.0.0, < 2.9.10.8 2.9.10.8
  26. Wysoka · 8.1 CVE-2020-24616 >= 2.0.0, < 2.9.10.6 2.9.10.6
  27. Wysoka · 8.1 CVE-2020-36186 >= 2.0.0, < 2.9.10.8 2.9.10.8
  28. Wysoka · 7.5 CVE-2020-25649 >= 2.6.0, < 2.6.7.4, >= 2.7.0.0, < 2.9.10.7, >= 2.10.0.0, < 2.10.5.1 2.6.7.4, 2.9.10.7, 2.10.5.1
  29. Wysoka · 8.1 CVE-2021-20190 >= 2.7.0, < 2.9.10.7, < 2.6.7.5 2.9.10.7, 2.6.7.5
  30. Wysoka · 8.1 CVE-2018-5968 >= 2.8.0, < 2.8.11.1, >= 2.9.0, < 2.9.4, < 2.7.9.5 2.8.11.1, 2.9.4, 2.7.9.5
  31. Wysoka · 8.1 CVE-2020-14061 >= 2.9.0, < 2.9.10.5 2.9.10.5
  32. Wysoka · 8.1 CVE-2020-14062 >= 2.9.0, < 2.9.10.5 2.9.10.5
  33. Wysoka · 8.1 CVE-2020-14060 >= 2.9.0, < 2.9.10.5 2.9.10.5
  34. Wysoka · 8.1 CVE-2020-14195 >= 2.9.0, < 2.9.10.5 2.9.10.5
  35. Wysoka · 7.5 CVE-2018-12023 >= 2.7.0, < 2.7.9.4, >= 2.8.0, < 2.8.11.2, >= 2.9.0, < 2.9.6 2.7.9.4, 2.8.11.2, 2.9.6
  36. Krytyczna · 9.8 CVE-2019-17267 >= 2.9.0, < 2.9.10, < 2.8.11.5 2.9.10, 2.8.11.5
  37. Wysoka · 8.8 CVE-2020-11112 >= 2.9.0, < 2.9.10.4 2.9.10.4
  38. Krytyczna · 9.8 CVE-2020-9547 >= 2.9.0, < 2.9.10.4, >= 2.8.0, < 2.8.11.6, >= 2.0.0, < 2.7.9.7 2.9.10.4, 2.8.11.6, 2.7.9.7
  39. Wysoka CVE-2019-14893 >= 2.9.0, < 2.9.10 2.9.10
  40. Wysoka · 8.8 CVE-2020-10673 >= 2.7.0, < 2.9.10.4, >= 2.0.0, < 2.6.7.4 2.9.10.4, 2.6.7.4
Pokaż więcej (20) Widać 40 z 73

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.