/

CVE-2026-110879

Severity:

CRITICAL RISK

(9.8)

Unsafe Deserialization (CWE-502) in Jackson Databind Library

CVE-2026-110879

Awaiting Analysis

Vulnerability type

Category:

Unsafe Deserialization

CWE:

CWE-502

Impact:

Remote Code Execution

Severity:

CRITICAL RISK

(9.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

A critical unsafe deserialization flaw in Jackson Databind allows attacker-controlled generic type arguments or array element types to bypass polymorphic type validation. In affected configurations, this may deserialize classes that should be rejected and could enable arbitrary code execution when dangerous classes and attacker-controlled data are available.

A critical unsafe deserialization flaw in Jackson Databind allows attacker-controlled generic type arguments or array element types to bypass polymorphic type validation. In affected configurations, this may deserialize classes that should be rejected and could enable arbitrary code execution when dangerous classes and attacker-controlled data are available.

Affected context

The issue occurs in Jackson Databind polymorphic deserialization paths that accept class-name type identifiers. It can affect annotation-based class-name polymorphism, configured default typing in Jackson 2.x and 3.x, and integrations that expose default typing, particularly when generic wrappers, maps, or arrays are permitted and application dependencies provide security-sensitive classes.

The issue occurs in Jackson Databind polymorphic deserialization paths that accept class-name type identifiers. It can affect annotation-based class-name polymorphism, configured default typing in Jackson 2.x and 3.x, and integrations that expose default typing, particularly when generic wrappers, maps, or arrays are permitted and application dependencies provide security-sensitive classes.

Exploit preconditions

  • Attack surface: Application endpoints, messages, or other inputs that trigger Jackson polymorphic deserialization
  • Required access: Ability to submit or influence serialized data containing class-name type information; authentication requirements depend on the application
  • Trigger point: Resolution of generic arguments, map types, or array element types during deserialization
  • Why exploitation is possible: Validation checks the outer type but may validate embedded types against the wrong base type, or may substitute a permissive validator after the outer type is approved
  • Additional conditions: Impact depends on enabled polymorphic typing, reachable classes on the classpath, available gadget behavior, and the privileges of the hosting process
  • Attack surface: Application endpoints, messages, or other inputs that trigger Jackson polymorphic deserialization
  • Required access: Ability to submit or influence serialized data containing class-name type information; authentication requirements depend on the application
  • Trigger point: Resolution of generic arguments, map types, or array element types during deserialization
  • Why exploitation is possible: Validation checks the outer type but may validate embedded types against the wrong base type, or may substitute a permissive validator after the outer type is approved
  • Additional conditions: Impact depends on enabled polymorphic typing, reachable classes on the classpath, available gadget behavior, and the privileges of the hosting process

Why this happens

The underlying bug is incomplete validation of nested polymorphic type information, mapping to CWE-502: Deserialization of Untrusted Data. Jackson validates the outer class-name type ID against the declared base type, but generic arguments may be checked against that outer base type instead of their corresponding declared bindings. Validators may also receive argument types before the required subtype relationship has been established. In some allow-listed outer-type paths, a permissive validator is substituted, and plain array element types can remain unchecked. This creates a trust boundary failure in which attacker-selected classes embedded inside an otherwise acceptable type are deserialized.

The underlying bug is incomplete validation of nested polymorphic type information, mapping to CWE-502: Deserialization of Untrusted Data. Jackson validates the outer class-name type ID against the declared base type, but generic arguments may be checked against that outer base type instead of their corresponding declared bindings. Validators may also receive argument types before the required subtype relationship has been established. In some allow-listed outer-type paths, a permissive validator is substituted, and plain array element types can remain unchecked. This creates a trust boundary failure in which attacker-selected classes embedded inside an otherwise acceptable type are deserialized.

Potential impact

  • An attacker may cause deserialization of classes that violate the declared generic type
  • Application integrity or confidentiality may be compromised
  • Sensitive data may be accessed or manipulated through reachable gadget classes
  • Arbitrary code execution could occur when a suitable gadget chain and application conditions are present
  • The application process or connected services may be affected with the process account's privileges
  • An attacker may cause deserialization of classes that violate the declared generic type
  • Application integrity or confidentiality may be compromised
  • Sensitive data may be accessed or manipulated through reachable gadget classes
  • Arbitrary code execution could occur when a suitable gadget chain and application conditions are present
  • The application process or connected services may be affected with the process account's privileges

General mitigation guidance

Mitigation generally focuses on removing unsafe polymorphic deserialization and ensuring that every nested type is constrained by its declared binding.

Common defensive patterns include:

  • Prefer non-polymorphic, schema-bound data formats and explicit data transfer types
  • Use narrowly scoped type allowlists for required polymorphic cases
  • Validate generic arguments, map keys, and array element types against their declared types
  • Avoid permissive default typing and broad base-type approvals
  • Reduce input trust by rejecting client-supplied class names whenever possible
  • Isolate deserialization from sensitive classes and restrict dangerous dependencies from exposed runtimes
  • Run affected services with least privilege and limit filesystem, process, and network permissions
  • Apply framework-level and dependency-level security policies that prevent unsafe type activation

Mitigation generally focuses on removing unsafe polymorphic deserialization and ensuring that every nested type is constrained by its declared binding.

Common defensive patterns include:

  • Prefer non-polymorphic, schema-bound data formats and explicit data transfer types
  • Use narrowly scoped type allowlists for required polymorphic cases
  • Validate generic arguments, map keys, and array element types against their declared types
  • Avoid permissive default typing and broad base-type approvals
  • Reduce input trust by rejecting client-supplied class names whenever possible
  • Isolate deserialization from sensitive classes and restrict dangerous dependencies from exposed runtimes
  • Run affected services with least privilege and limit filesystem, process, and network permissions
  • Apply framework-level and dependency-level security policies that prevent unsafe type activation

How teams detect issues like this

Detection can combine dependency inventory with analysis of deserialization configuration and application input paths.

Useful approaches include:

  • Static analysis for default typing, class-name polymorphism, permissive subtype validators, and broad base-type allowlists
  • Code review of generic, map, and array deserialization paths for validation of nested type parameters
  • Searches for externally controlled JSON or message inputs that reach polymorphic Jackson readers
  • Runtime monitoring for unexpected class resolution, reflective construction, process creation, or unusual file and network access
  • Policy enforcement that rejects broad polymorphic typing in exposed services and requires explicit type registrations
  • Automated security review tools can help identify unsafe parser configuration and dangerous type-resolution patterns

Detection can combine dependency inventory with analysis of deserialization configuration and application input paths.

Useful approaches include:

  • Static analysis for default typing, class-name polymorphism, permissive subtype validators, and broad base-type allowlists
  • Code review of generic, map, and array deserialization paths for validation of nested type parameters
  • Searches for externally controlled JSON or message inputs that reach polymorphic Jackson readers
  • Runtime monitoring for unexpected class resolution, reflective construction, process creation, or unusual file and network access
  • Policy enforcement that rejects broad polymorphic typing in exposed services and requires explicit type registrations
  • Automated security review tools can help identify unsafe parser configuration and dangerous type-resolution patterns

Sources

SourceLink
github.comgithub.com/FasterXML/jackson-databind/security/advisories/GHSA-j3rv-43j4-c7qm
github.comgithub.com/FasterXML/jackson-databind/security/advisories/GHSA-m8xf-2cr7-77ph
cve.orgcve.org/CVERecord?id=CVE-2026-54512

Frequently asked

questions

It can be, when an application exposes a network-accessible deserialization endpoint or message consumer that accepts attacker-controlled polymorphic type information. Exploitability depends on application configuration and reachable classes.

Not inherently. Authentication requirements are determined by the application's endpoint or message-processing controls. The attacker must be able to supply data that reaches the affected Jackson deserialization path.

Disable unnecessary polymorphic deserialization and use explicit, schema-bound types. Where polymorphism is required, constrain every outer type, generic argument, map key, and array element with a strict allowlist.

Treat class names and type metadata as untrusted input, avoid permissive default typing, review subtype validators for nested-type behavior, and run deserialization code with minimal operating-system privileges.

It can be, when an application exposes a network-accessible deserialization endpoint or message consumer that accepts attacker-controlled polymorphic type information. Exploitability depends on application configuration and reachable classes.

Not inherently. Authentication requirements are determined by the application's endpoint or message-processing controls. The attacker must be able to supply data that reaches the affected Jackson deserialization path.

Disable unnecessary polymorphic deserialization and use explicit, schema-bound types. Where polymorphism is required, constrain every outer type, generic argument, map key, and array element with a strict allowlist.

Treat class names and type metadata as untrusted input, avoid permissive default typing, review subtype validators for nested-type behavior, and run deserialization code with minimal operating-system privileges.

Find out what's already
exploitable in your codebase.