CVE-2018-14721

10.0 CRITICAL

📋 TL;DR

CVE-2018-14721 is a Server-Side Request Forgery (SSRF) vulnerability in FasterXML jackson-databind versions 2.x before 2.9.7. It allows attackers to make arbitrary HTTP requests from vulnerable servers by exploiting polymorphic deserialization of the axis2-jaxws class. This affects any application using vulnerable versions of jackson-databind for JSON deserialization.

💻 Affected Systems

Products:
  • FasterXML jackson-databind
Versions: 2.x before 2.9.7
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Requires jackson-databind to be used for deserialization of untrusted JSON data containing the axis2-jaxws class.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Full server compromise through SSRF leading to internal network reconnaissance, data exfiltration, or lateral movement to other systems.

🟠

Likely Case

Unauthorized access to internal services, data leakage from internal APIs, or denial of service through internal service abuse.

🟢

If Mitigated

Limited impact if network segmentation prevents internal service access and input validation blocks malicious payloads.

🌐 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 deserialize untrusted data.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.7 or later

Vendor Advisory: https://access.redhat.com/errata/RHSA-2019:0782

Restart Required: Yes

Instructions:

1. Update jackson-databind dependency to version 2.9.7 or higher. 2. Update all transitive dependencies that include jackson-databind. 3. Restart affected applications.

🔧 Temporary Workarounds

Block axis2-jaxws class in deserialization

all

Configure Jackson ObjectMapper to block the axis2-jaxws class during deserialization

ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); mapper.setMixInAnnotations(Object.class, MyMixInForIgnoreType.class);

🧯 If You Can't Patch

  • Implement strict input validation to reject JSON containing suspicious class names
  • Use network segmentation to limit server's ability to make outbound HTTP requests

🔍 How to Verify

Check if Vulnerable:

Check pom.xml, build.gradle, or dependency manifest for jackson-databind version < 2.9.7

Check Version:

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

Verify Fix Applied:

Verify jackson-databind version is 2.9.7 or higher in dependency files

📡 Detection & Monitoring

Log Indicators:

  • Unusual outbound HTTP requests from application servers
  • Deserialization errors involving axis2-jaxws class

Network Indicators:

  • HTTP requests to internal services from application servers
  • Unusual traffic patterns from servers to unexpected destinations

SIEM Query:

source="app-server" dest_ip IN (internal_subnets) AND http_method IN (GET, POST)

🔗 References

📤 Share & Export