CVE-2020-36185

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 to execute arbitrary code on affected systems. Any application using vulnerable versions of jackson-databind with default or unsafe configurations is affected.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
  • Applications using jackson-databind for JSON processing
  • Apache Tomcat with DBCP2
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. Applications using default or unsafe deserialization configurations are most vulnerable.

📦 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 allowing attackers to run arbitrary commands, install malware, or exfiltrate sensitive data.

🟢

If Mitigated

Limited impact if proper input validation and deserialization controls are implemented, 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 vulnerable endpoints. Attack complexity is reduced when default typing is enabled.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.10.8 or later

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

Restart Required: Yes

Instructions:

1. Update jackson-databind dependency to version 2.9.10.8 or later. 2. Update Maven/Gradle dependencies accordingly. 3. Restart affected applications. 4. Verify the update by checking the version in use.

🔧 Temporary Workarounds

Disable default typing

all

Disable polymorphic type handling and default typing in Jackson ObjectMapper configuration

ObjectMapper mapper = new ObjectMapper();
mapper.activateDefaultTyping(null); // Disable default typing
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);

Block dangerous classes

all

Configure Jackson to block deserialization of dangerous gadget classes

SimpleModule module = new SimpleModule();
module.setDeserializerModifier(new BeanDeserializerModifier() {
  @Override
  public JsonDeserializer<?> modifyDeserializer(...) {
    // Add class blocking logic
  }
});

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all JSON inputs
  • Use network segmentation to isolate vulnerable systems and limit attack surface

🔍 How to Verify

Check if Vulnerable:

Check pom.xml or build.gradle for jackson-databind version. Run: mvn dependency:tree | grep jackson-databind or gradle dependencies | grep jackson-databind

Check Version:

java -cp "path/to/jackson-databind.jar" com.fasterxml.jackson.databind.ObjectMapper | grep version

Verify Fix Applied:

Verify the version is 2.9.10.8 or higher. Check application logs for successful startup with updated version.

📡 Detection & Monitoring

Log Indicators:

  • Unusual deserialization errors
  • Stack traces containing org.apache.tomcat.dbcp
  • Unexpected class loading attempts

Network Indicators:

  • Large or malformed JSON payloads to API endpoints
  • Requests containing serialized object patterns

SIEM Query:

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

🔗 References

📤 Share & Export