CVE-2020-36187

8.1 HIGH

📋 TL;DR

This vulnerability in FasterXML jackson-databind allows remote code execution through deserialization of untrusted data. It affects applications using Jackson 2.x with default typing enabled that process external input. Attackers can exploit this to execute arbitrary code on vulnerable systems.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
  • Applications using Jackson for JSON processing
Versions: 2.x before 2.9.10.8
Operating Systems: All operating systems running Java applications
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 code execution leading to complete system compromise, data theft, and lateral movement within the network.

🟠

Likely Case

Remote code execution resulting in application compromise, data exfiltration, and potential privilege escalation.

🟢

If Mitigated

Limited impact if proper input validation and deserialization controls are implemented, potentially reduced to denial of service.

🌐 Internet-Facing: HIGH - Internet-facing applications processing untrusted JSON data are directly exploitable.
🏢 Internal Only: MEDIUM - Internal applications may still be vulnerable if they process untrusted data from internal sources.

🎯 Exploit Status

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

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

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.10.8 or later (2.10.x, 2.11.x, 2.12.x)

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

Restart Required: Yes

Instructions:

1. Update jackson-databind dependency to version 2.9.10.8 or later. 2. Update pom.xml or build.gradle with new version. 3. Rebuild and redeploy application. 4. Restart affected services.

🔧 Temporary Workarounds

Disable default typing

all

Disable polymorphic type handling in Jackson ObjectMapper configuration

// Java code: objectMapper.disableDefaultTyping();
// Or avoid using enableDefaultTyping() methods

Use safe typing configuration

all

Configure ObjectMapper with explicit safe typing using @JsonTypeInfo annotations

// Use @JsonTypeInfo with explicit type names instead of default typing

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all JSON inputs
  • Use security controls like application firewalls to block malicious payloads

🔍 How to Verify

Check if Vulnerable:

Check Maven/Gradle dependencies for jackson-databind version <2.9.10.8 and verify if default typing is enabled in code.

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.8 or higher in dependency files and deployed artifacts.

📡 Detection & Monitoring

Log Indicators:

  • Unusual Java class loading errors
  • Unexpected deserialization exceptions
  • Suspicious network connections after JSON processing

Network Indicators:

  • HTTP requests with crafted JSON payloads containing class names
  • Outbound connections to unexpected destinations after JSON processing

SIEM Query:

source="application.log" AND ("ClassNotFoundException" OR "NoClassDefFoundError") AND "jackson"

🔗 References

📤 Share & Export