Deserialisierung ist die Umwandlung gespeicherter oder übertragener Daten zurück in Programmobjekte; geschieht sie mit nicht vertrauenswürdigen Eingaben, können Angreifer Code ausführen.
Wie Deserialisierungsangriffe funktionieren
Anwendungen serialisieren Objekte – wandeln sie in Bytes, JSON oder XML um –, um sie zu speichern oder über das Netz zu senden, und deserialisieren sie auf der Gegenseite. Formate wie die Java-Serialisierung, .NET BinaryFormatter, PHP unserialize() oder Pythons pickle können beliebige Objekttypen wiederherstellen und dabei automatisch Methoden aufrufen. Wer die serialisierten Daten kontrolliert, kann vorhandene Klassen aus den Bibliotheken der Anwendung zu „Gadget Chains“ verketten, sodass beim Wiederherstellen Befehle ausgeführt werden. Werkzeuge wie ysoserial erzeugen solche Payloads automatisch.
Die Schwäche ist als CWE-502 katalogisiert. Forschungsarbeiten von 2015 zu Gadget Chains in der Bibliothek Apache Commons Collections zeigten, dass sich viele Java-Anwendungen, darunter Jenkins und Oracle WebLogic, so angreifen ließen.
Warum das wichtig ist
Unsichere Deserialisierung führt meist zu Remote Code Execution, oft ohne Authentifizierung – solche Sicherheitslücken erhalten daher Höchstwerte. Unternehmens-Middleware, VPN-Appliances und Dateitransferprodukte wurden wiederholt über Deserialisierungsfehler kompromittiert, und öffentliche Exploits erscheinen schnell. Eng verwandt mit Code-Injection, gehört sie zur OWASP-Top-10-Kategorie „Software and Data Integrity Failures“.
So verhindern Sie es
- Keine Daten aus nicht vertrauenswürdigen Quellen mit nativen Objektformaten deserialisieren; einfache Formate wie JSON mit striktem Schema nutzen.
- Ist native Deserialisierung unvermeidbar, Allowlists erlaubter Klassen und Integritätsprüfungen (Signaturen) einsetzen.
- Ungenutzte Bibliotheken mit Gadget Chains entfernen und Frameworks aktuell halten.
- Deserialisierungsfehler und ungewöhnliche Kindprozesse überwachen.