CVE-2020-36181

8.1 HIGH

📋 TL;DR

This vulnerability in FasterXML jackson-databind allows remote code execution through deserialization of untrusted data. Attackers can exploit the interaction between serialization gadgets and typing features to execute arbitrary code on affected systems. Any application using vulnerable versions of jackson-databind with default or polymorphic typing enabled is at risk.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
  • Applications using jackson-databind for JSON processing
Versions: 2.x before 2.9.10.8
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Vulnerability requires enabling default typing or polymorphic type handling. Many applications use these features for JSON deserialization.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete system compromise allowing remote attackers to execute arbitrary code with application privileges, potentially leading to data theft, ransomware deployment, or lateral movement.

🟠

Likely Case

Remote code execution leading to application compromise, data exfiltration, or service disruption.

🟢

If Mitigated

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

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires sending specially crafted JSON payloads to endpoints that deserialize untrusted data with typing enabled.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.10.8 or later

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

Restart Required: Yes

Instructions:

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

🔧 Temporary Workarounds

Disable default typing

all

Disable polymorphic type handling in ObjectMapper configuration

ObjectMapper mapper = new ObjectMapper();
mapper.activateDefaultTyping(null);

Input validation

all

Implement strict input validation and only deserialize trusted sources

🧯 If You Can't Patch

  • Implement network segmentation to isolate vulnerable systems
  • Deploy web application firewall with JSON deserialization protection rules

🔍 How to Verify

Check if Vulnerable:

Check application dependencies for jackson-databind version 2.x < 2.9.10.8

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 dependencies

📡 Detection & Monitoring

Log Indicators:

  • Unusual deserialization errors
  • Unexpected class loading in logs
  • Stack traces containing DriverAdapterCPDS or related classes

Network Indicators:

  • Large JSON payloads to deserialization endpoints
  • Requests with polymorphic type indicators

SIEM Query:

source="application.logs" AND ("DriverAdapterCPDS" OR "deserialization error" OR "ClassNotFoundException")

🔗 References

📤 Share & Export