CVE-2018-14719

9.8 CRITICAL

📋 TL;DR

CVE-2018-14719 is a remote code execution vulnerability in FasterXML jackson-databind versions 2.x before 2.9.7. It allows attackers to execute arbitrary code by exploiting polymorphic deserialization of untrusted data through blaze-ds-opt and blaze-ds-core classes. Any application using vulnerable jackson-databind versions that deserializes untrusted data is affected.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
Versions: 2.x before 2.9.7
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Applications must be configured to deserialize untrusted data to be exploitable. Many Java applications use jackson-databind for JSON processing.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete system compromise with remote code execution as the application user, 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 implemented, potentially reduced to denial of service.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires the application to deserialize untrusted JSON data. Public proof-of-concept code exists demonstrating the vulnerability.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.7 or later

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

Restart Required: Yes

Instructions:

1. Identify jackson-databind version in your application. 2. Update dependency to version 2.9.7 or later. 3. Rebuild and redeploy application. 4. Restart affected services.

🔧 Temporary Workarounds

Block dangerous classes

all

Configure jackson-databind to block blaze-ds-opt and blaze-ds-core classes from deserialization.

Add to application configuration: ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); mapper.addMixIn(Object.class, MyMixInForIgnoreType.class);

Disable default typing

all

Disable polymorphic type handling in ObjectMapper configuration.

Configure ObjectMapper without default typing: ObjectMapper mapper = new ObjectMapper();

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all JSON input
  • Use network segmentation to isolate vulnerable applications and implement strict firewall rules

🔍 How to Verify

Check if Vulnerable:

Check pom.xml, build.gradle, or manifest files 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

Verify Fix Applied:

Verify updated version in dependency files and confirm application uses jackson-databind 2.9.7+

📡 Detection & Monitoring

Log Indicators:

  • Unusual Java class loading errors, unexpected deserialization attempts, stack traces containing blaze-ds-opt or blaze-ds-core

Network Indicators:

  • Unusual outbound connections from application servers, unexpected JSON payloads to deserialization endpoints

SIEM Query:

source="application.logs" AND ("blaze-ds-opt" OR "blaze-ds-core" OR "ClassNotFoundException" OR "InvalidTypeIdException")

🔗 References

📤 Share & Export