CVE-2020-11111

8.8 HIGH

📋 TL;DR

This CVE allows remote code execution through deserialization of untrusted data in FasterXML jackson-databind. It affects applications using Jackson 2.x with default typing enabled that process serialized data from untrusted sources. The vulnerability exploits interaction between serialization gadgets and typing features.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
  • Applications using Jackson for JSON/XML processing
Versions: 2.x before 2.9.10.4
Operating Systems: All
Default Config Vulnerable: ✅ No
Notes: Only vulnerable when default typing is enabled (ObjectMapper.enableDefaultTyping() or similar) and processing untrusted data.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote attacker achieves arbitrary code execution with the privileges of the application, potentially leading to complete system compromise.

🟠

Likely Case

Remote code execution leading to data theft, lateral movement, or deployment of malware.

🟢

If Mitigated

Limited impact if proper input validation and deserialization controls are implemented.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: MEDIUM

Exploitation requires specific conditions but has been demonstrated in proof-of-concepts.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.10.4 or later

Vendor Advisory: https://github.com/FasterXML/jackson-databind/issues/2664

Restart Required: Yes

Instructions:

1. Update jackson-databind dependency to 2.9.10.4 or later. 2. Update Maven/Gradle dependencies accordingly. 3. Restart affected applications.

🔧 Temporary Workarounds

Disable default typing

all

Disable polymorphic type handling (default typing) in Jackson ObjectMapper configuration

// Java code: objectMapper.disableDefaultTyping();

Use safe typing

all

Configure Jackson to use specific safe typing modes instead of default typing

// Java code: objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all JSON/XML inputs
  • Use application-level firewalls or WAFs to block suspicious deserialization patterns

🔍 How to Verify

Check if Vulnerable:

Check pom.xml or build.gradle for jackson-databind version <2.9.10.4, or run: java -cp jackson-databind.jar com.fasterxml.jackson.databind.cfg.PackageVersion

Check Version:

mvn dependency:tree | grep jackson-databind OR gradle dependencies | grep jackson-databind

Verify Fix Applied:

Verify jackson-databind version is 2.9.10.4 or higher in dependency files

📡 Detection & Monitoring

Log Indicators:

  • Unusual Java class loading patterns
  • Exceptions related to deserialization failures
  • Suspicious network connections after JSON processing

Network Indicators:

  • Unusual JSON payloads containing Java class names
  • Requests triggering deserialization errors

SIEM Query:

source="application.logs" AND ("DefaultTyping" OR "deserialization" OR "jackson") AND (error OR exception)

🔗 References

📤 Share & Export