CVE-2020-36183

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. Systems using jackson-databind 2.x with default polymorphic typing enabled are affected.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
  • Applications using jackson-databind for JSON processing
Versions: 2.x before 2.9.10.8
Operating Systems: All operating systems running Java applications
Default Config Vulnerable: ⚠️ Yes
Notes: Vulnerability requires polymorphic typing to be enabled (defaultObjectMapper.enableDefaultTyping() or similar). Applications that deserialize untrusted JSON are at highest risk.

📦 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 with the privileges of the application process, potentially allowing data access and further exploitation.

🟢

If Mitigated

Denial of service or limited information disclosure if proper input validation and sandboxing are in place.

🌐 Internet-Facing: HIGH - Exploitable remotely without authentication if vulnerable endpoint exists.
🏢 Internal Only: MEDIUM - Requires access to internal services but can lead to lateral movement once exploited.

🎯 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. The vulnerability leverages known gadget chains.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.10.8 or later (2.10.x and 2.11.x also have fixes)

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

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 polymorphic typing

all

Disable default typing features that enable polymorphic deserialization

// In Java code: objectMapper.disableDefaultTyping();
// Or configure to use safer typing modes

Block dangerous classes

all

Use Jackson's class blacklisting feature to block vulnerable classes

objectMapper.addMixIn(Object.class, MyMixInForIgnoreType.class);
// Configure in application properties or programmatically

🧯 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, build.gradle, or dependency manifest for jackson-databind version. Use: mvn dependency:tree | grep jackson-databind or gradle dependencies | grep jackson-databind

Check Version:

mvn dependency:tree | grep jackson-databind || gradle dependencies | grep jackson-databind || java -cp "*" com.fasterxml.jackson.databind.ObjectMapper --version

Verify Fix Applied:

Verify version is 2.9.10.8 or higher. Check that application still functions correctly with JSON processing.

📡 Detection & Monitoring

Log Indicators:

  • Unexpected ClassNotFoundException or NoClassDefFoundError for JNDIConnectionPool or related classes
  • Unusual outbound network connections to LDAP/JNDI servers
  • Stack traces containing org.docx4j.org.apache.xalan.lib.sql.JNDIConnectionPool

Network Indicators:

  • Outbound LDAP connections from application servers to untrusted sources
  • Unusual JNDI lookup patterns in network traffic

SIEM Query:

source="application.logs" AND ("JNDIConnectionPool" OR "ClassNotFoundException" OR "NoClassDefFoundError")

🔗 References

📤 Share & Export