CVE-2018-19360

9.8 CRITICAL

📋 TL;DR

This vulnerability in FasterXML jackson-databind allows remote code execution through polymorphic deserialization of untrusted data. Attackers can exploit the axis2-transport-jms class to execute arbitrary code on affected systems. Any application using vulnerable versions of jackson-databind for JSON deserialization is affected.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
Versions: 2.x before 2.9.8
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Applications must be using polymorphic deserialization features with default typing enabled or @JsonTypeInfo annotation.

📦 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 processing JSON data, potentially leading to application compromise and data exposure.

🟢

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 exploit code exists for similar jackson-databind vulnerabilities.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.8 or later

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

Restart Required: Yes

Instructions:

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

🔧 Temporary Workarounds

Block axis2-transport-jms class

all

Add axis2-transport-jms to the default typing deny list in Jackson configuration

ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); mapper.setDefaultTyping(new DefaultTypeResolverBuilder(DefaultTyping.NON_FINAL) { @Override public boolean isTypeIdResolvable() { return false; } });

Disable default typing

all

Disable polymorphic deserialization features if not required

ObjectMapper mapper = new ObjectMapper(); mapper.disableDefaultTyping();

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all JSON inputs
  • Use allow-listing for deserialization classes instead of default typing

🔍 How to Verify

Check if Vulnerable:

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

Check Version:

mvn dependency:tree | grep jackson-databind OR gradle dependencies | grep jackson-databind

Verify Fix Applied:

Verify jackson-databind version is 2.9.8 or higher in dependencies, and test JSON deserialization with malicious payloads

📡 Detection & Monitoring

Log Indicators:

  • Java exceptions related to ClassNotFoundException, NoClassDefFoundError, or deserialization errors
  • Unusual process execution from Java applications

Network Indicators:

  • HTTP requests with unusual JSON payloads containing type information
  • Outbound connections from Java processes to unexpected destinations

SIEM Query:

source="application.log" AND ("ClassNotFoundException" OR "NoClassDefFoundError") AND "axis2-transport-jms"

🔗 References

📤 Share & Export