CVE-2020-10672

8.8 HIGH

📋 TL;DR

CVE-2020-10672 is a deserialization vulnerability in FasterXML jackson-databind that allows remote code execution when processing untrusted JSON content. It affects applications using jackson-databind 2.x before 2.9.10.4 with default polymorphic typing enabled. This impacts Java applications that deserialize JSON from untrusted sources.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
  • Applications using jackson-databind for JSON processing
Versions: 2.x before 2.9.10.4
Operating Systems: All operating systems running Java applications
Default Config Vulnerable: ⚠️ Yes
Notes: Requires polymorphic typing feature enabled (defaultObjectMapper.enableDefaultTyping() or similar).

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote attacker achieves arbitrary code execution with application privileges, potentially leading to complete system compromise.

🟠

Likely Case

Remote code execution leading to data theft, privilege escalation, or lateral movement within the environment.

🟢

If Mitigated

Limited impact if proper input validation and security controls prevent exploitation attempts.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires sending malicious JSON payloads to vulnerable endpoints.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.10.4 or later

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

Restart Required: Yes

Instructions:

1. Update jackson-databind dependency to version 2.9.10.4 or later. 2. Update Maven/Gradle configuration. 3. Rebuild and redeploy application. 4. Restart affected services.

🔧 Temporary Workarounds

Disable polymorphic typing

all

Disable default typing features in ObjectMapper configuration

ObjectMapper mapper = new ObjectMapper();
// Do NOT call mapper.enableDefaultTyping()

Use allow-list for deserialization

all

Configure ObjectMapper to only allow specific classes during deserialization

mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
mapper.setPolymorphicTypeValidator(new DefaultPolymorphicTypeValidator.Builder().allowIfBaseType("com.example.").build());

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all JSON inputs
  • Use network segmentation and WAF rules to block suspicious JSON payloads

🔍 How to Verify

Check if Vulnerable:

Check pom.xml or build.gradle for jackson-databind version <2.9.10.4, or run: java -cp jackson-databind.jar com.fasterxml.jackson.databind.cfg.PackageVersion

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.4 in dependencies and deployed application

📡 Detection & Monitoring

Log Indicators:

  • Unusual deserialization errors
  • Stack traces containing org.apache.aries.transaction.jms
  • Unexpected class loading

Network Indicators:

  • HTTP POST requests with JSON payloads to API endpoints
  • Unusual outbound connections after JSON processing

SIEM Query:

source="application.logs" AND ("org.apache.aries.transaction.jms" OR "XaPooledConnectionFactory" OR "deserialization error")

🔗 References

📤 Share & Export