Update dependency tools.jackson.core:jackson-databind to v3.2.1 [SECURITY] - #546
Open
cesmarvin wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
3.2.0→3.2.1Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
jackson-databind: @JsonView ypassed for @JsonUnwrapped container properties on deserialization
CVE-2026-59889 / GHSA-5gvw-p9qm-jgwh
More information
Details
Summary
UnwrappedPropertyHandler.processUnwrapped()replays the buffered JSON for a@JsonUnwrappedproperty by iterating its properties and callingprop.deserializeAndSet()with noprop.visibleInView(ctxt.getActiveView())guard — the exact guardprocessUnwrappedCreatorProperties()received in the #5971 / GHSA-rcqc-6cw3-h962 fix, and the guardBeanDeserializer.deserializeWithUnwrappedapplies to directly-matched properties. As a result, a property annotated with both@JsonView(PrivilegedView.class)and@JsonUnwrappedis 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 ownBeanDeserializergates 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→nullunderPublicView(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
@JsonViewis commonly used as a write-side authorization guard: a public endpoint binds the body underreaderWithView(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 whereAccountFlags{role,approved,creditBalance}is@JsonView(AdminView) @​JsonUnwrapped; attacker JSON{role:ADMIN,approved:true,creditBalance:1000000}underPublicViewbinds 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-databind2.x: confirmed bypass at 21dd70dd (== released 2.21.4 / 2.22.0 line; includes the #5973 backport).DEFAULT_VIEW_INCLUSIONdefault=true.tools.jackson.core:jackson-databind3.x: confirmed bypass at HEAD 7a5939d6 (latest 3.x).DEFAULT_VIEW_INCLUSIONdefault=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)
@JsonUnwrapped(unwrapped-in-unwrapped) — recursive bypass.readerWithView(...).withValueToUpdate(...)(PATCH/partial-update) — bypass; non-unwrapped merge control gates correctly.@JsonDeserialize(builder=...)) —BuilderBasedDeserializerroutes through the sameprocessUnwrapped.@JsonAnySetter+view and@JsonTypeInfo+@JsonUnwrappedare separate/unsupported behaviors, not this bug.Fix
Add
prop.visibleInView(ctxt.getActiveView())(whenMapperFeature.DEFAULT_VIEW_INCLUSION/active-view applies) to theprocessUnwrapped()property loop, mirroringprocessUnwrappedCreatorProperties(). One change closes the impact PoC + all three variants acrossBeanDeserializerandBuilderBasedDeserializer. Full runnable PoCs (2.x + 3.x) + variant harnesses available on request.Severity
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Configuration
📅 Schedule: (in timezone Europe/Berlin)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.