CVE-2017-15095

9.8 CRITICAL

📋 TL;DR

CVE-2017-15095 is a critical deserialization vulnerability in jackson-databind that allows unauthenticated remote code execution by sending malicious input to ObjectMapper's readValue method. This affects applications using vulnerable versions of jackson-databind (before 2.8.10 or 2.9.1) that deserialize untrusted data. The vulnerability extends previous blacklisting protections from CVE-2017-7525 but still leaves systems exposed to new attack vectors.

💻 Affected Systems

Products:
  • jackson-databind
  • Applications using jackson-databind for JSON processing
  • Oracle products listed in advisories
Versions: Versions before 2.8.10 and 2.9.1
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Applications must be using ObjectMapper with default polymorphic typing enabled or configured to deserialize untrusted data. The vulnerability specifically affects the readValue method when processing malicious JSON payloads.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete system compromise allowing attackers to execute arbitrary code with application privileges, potentially leading to data theft, ransomware deployment, or lateral movement within the network.

🟠

Likely Case

Remote code execution leading to application compromise, data exfiltration, and potential pivot to other systems in the environment.

🟢

If Mitigated

Limited impact if proper input validation and deserialization controls are implemented, potentially reduced to denial of service or information disclosure.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires sending specially crafted JSON payloads to endpoints that use ObjectMapper.readValue() on untrusted input. The vulnerability extends previous blacklisting bypass techniques.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.8.10 or 2.9.1

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

Restart Required: Yes

Instructions:

1. Update jackson-databind dependency to version 2.8.10 or later (2.9.1 for 2.9.x branch). 2. Update all transitive dependencies that include vulnerable versions. 3. Restart affected applications. 4. Verify no older versions remain in classpath.

🔧 Temporary Workarounds

Enable default typing blacklist

all

Configure ObjectMapper to use a more restrictive default typing or disable polymorphic deserialization for untrusted sources

ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(); // Use with caution
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);

Input validation and filtering

all

Implement strict input validation and filtering for JSON payloads before deserialization

// Validate JSON structure before deserialization
// Use whitelisting for allowed classes
// Implement custom deserializers for sensitive types

🧯 If You Can't Patch

  • Implement network segmentation to isolate vulnerable applications from untrusted networks
  • Deploy web application firewall (WAF) rules to block malicious JSON payloads containing suspicious class names

🔍 How to Verify

Check if Vulnerable:

Check application dependencies for jackson-databind versions before 2.8.10 or 2.9.1 using dependency management tools or examining JAR files

Check Version:

mvn dependency:tree | grep jackson-databind OR gradle dependencies | grep jackson-databind OR java -cp jackson-databind.jar com.fasterxml.jackson.databind.cfg.PackageVersion

Verify Fix Applied:

Verify jackson-databind version is 2.8.10 or later (2.9.1 for 2.9.x) and test deserialization with known malicious payloads

📡 Detection & Monitoring

Log Indicators:

  • Unusual deserialization errors
  • Stack traces containing ClassNotFoundException or NoClassDefFoundError for unexpected classes
  • Large or malformed JSON payloads in request logs

Network Indicators:

  • HTTP requests with JSON payloads containing unusual class names or serialized object patterns
  • Requests to JSON endpoints with content-types that trigger deserialization

SIEM Query:

source="web_logs" AND (http_method="POST" OR http_method="PUT") AND content_type="application/json" AND (url_path="*api*" OR url_path="*rest*") AND (payload CONTAINS "java.lang.Class" OR payload CONTAINS "com.sun.")

🔗 References

📤 Share & Export