CVE-2020-36189

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. Applications using jackson-databind for JSON processing with polymorphic type handling enabled are vulnerable.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
  • Applications using jackson-databind library
Versions: 2.x before 2.9.10.8
Operating Systems: All
Default Config Vulnerable: ✅ No
Notes: Requires polymorphic type handling (default typing) to be enabled. Default configurations without this feature are not 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 pivot to other systems.

🟢

If Mitigated

Denial of service or application crash if exploitation attempts are blocked by security controls.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires the application to deserialize untrusted JSON with polymorphic type handling enabled. The specific gadget chain involves com.newrelic.agent.deps.ch.qos.logback.core.db.DriverManagerConnectionSource.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.10.8 or later

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

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 the patched version. 3. Rebuild and redeploy the application. 4. Restart affected services.

🔧 Temporary Workarounds

Disable default typing

all

Disable polymorphic type handling (default typing) in ObjectMapper configuration

ObjectMapper mapper = new ObjectMapper();
mapper.activateDefaultTyping(null); // Disable default typing

Block specific classes

all

Add com.newrelic.agent.deps.ch.qos.logback.core.db.DriverManagerConnectionSource to denylist

SimpleModule module = new SimpleModule();
module.setMixInAnnotation(DriverManagerConnectionSource.class, NoClass.class);

🧯 If You Can't Patch

  • Disable default typing in ObjectMapper configuration
  • Implement input validation and sanitization for JSON deserialization

🔍 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:

  • Java exceptions related to deserialization
  • ClassNotFoundExceptions for suspicious classes
  • Unexpected process execution

Network Indicators:

  • Unusual outbound connections from application servers
  • HTTP requests with malicious JSON payloads

SIEM Query:

source="application.logs" AND ("com.newrelic.agent.deps" OR "DriverManagerConnectionSource" OR "jackson.databind")

🔗 References

📤 Share & Export