Deserialization Mitigation
Secure Deserialization Practices¶
Deserialization vulnerabilities stem from untrusted data being processed by an application’s serialization framework. Mitigation requires a combination of defensive coding, tooling, and runtime monitoring. Key strategies include:
1. Use Safe Serialization Libraries¶
- Prefer libraries with built-in validation and type-checking (e.g.,
Jacksonfor Java,System.Text.Jsonfor .NET). - Avoid custom serializers unless absolutely necessary. For example, in Python:
- Disable deserialization of untrusted data in frameworks (e.g., Django’s
safe_mode).
2. Input Validation and Whitelisting¶
- Validate all serialized inputs against a strict schema. For example, using JSON Schema:
- Reject payloads containing unexpected types (e.g.,
java.util.HashMapin Java deserialization).
3. Avoid Custom Serialization¶
- Use standardized formats like JSON or XML instead of binary serialization (e.g., Java’s
ObjectInputStream). For example:
4. Runtime Monitoring and Sandboxing¶
- Isolate deserialization processes in sandboxed environments (e.g., Docker containers) to limit potential damage.
- Monitor for anomalies like unexpected class loading or memory consumption spikes.
Detection Techniques¶
Detecting deserialization vulnerabilities requires both static and dynamic analysis. Common approaches include:
1. Static Analysis Tools¶
- Use SAST tools to identify unsafe deserialization patterns:
- Look for hardcoded serializers or unsafe methods like
java.io.ObjectInputStream.
2. Dynamic Analysis¶
- Inject serialized payloads and monitor for crashes or unexpected behavior. For example:
- Use tools like OWASP ZAP to intercept and analyze requests.
3. Log and Network Analysis¶
- Search for serialized data patterns in logs (e.g., base64 strings or binary blobs):
- Look for HTTP requests containing serialized payloads (e.g.,
Content-Type: application/x-java-serialized-object).
Detection Tools¶
| Tool | Purpose | Example Command |
|---|---|---|
| Deserialization Detector | Static analysis for Java | deserialization-detector scan src/ |
| Burp Suite | Intercept and analyze serialized payloads | Burp Suite Pro (replay requests with crafted payloads) |
| Regex-based Sniffers | Detect serialized data patterns | grep -E 'java object serialization' logs/ |
| Custom Scripts | Automate payload testing | Python script using pickle/json libraries |
Key takeaways¶
- Prioritize safe serialization libraries and avoid binary formats unless absolutely necessary.
- Validate all inputs with strict schemas to prevent arbitrary object creation.
- Combine static and dynamic analysis to identify deserialization risks in code and runtime.
- Monitor logs and network traffic for anomalies like unexpected serialized payloads.
- Use sandboxing and isolation to limit the impact of potential deserialization exploits.