Unsichere Deserialisierung: wenn Daten zu Code werden
Kurz: Beim Deserialisieren werden gespeicherte Bytes wieder zu Objekten; stammt die Eingabe von Angreifern, können manche Formate (Pickle, Java-Serialisierung, YAML) beliebigen Code ausführen.
Genauer: Serialisieren wandelt Objekte in Bytes/Text um (Speichern, Senden), Deserialisieren zurück. Manche Formate dürfen dabei Objekte beliebiger Klassen erzeugen und Methoden aufrufen: bei nicht vertrauenswürdigen Daten ein Einfallstor für Remote Code Execution (RCE).
Im Detail
Gefährliche Formate
- Python
pickle(undshelve,joblib/torch.loadmit Pickle): kann beliebigen Code beim Laden ausführen. Nie fremde Pickle-/Modell-Dateien laden! →safetensors, JSON. - Java
ObjectInputStream(Serialisierung): berühmte Gadget-Chains (Apache Commons Collections), Quelle vieler Server-Lücken. - PHP
unserialize(), Ruby Marshal, .NET BinaryFormatter (deprecated), YAML (yaml.loadstattsafe_load), XML-Deserialisierung/XXE, Nodenode-serialize. - Sicherer: JSON (reine Daten) mit Schema-Validierung (Zod, pydantic), Protocol Buffers.
Wie ein Angriff aussieht (Prinzip)
Der Angreifer liefert ein präpariertes Objekt (Cookie, Session-Daten, API-Body, hochgeladene Datei, Cache-Eintrag, Nachrichtenwarteschlange). Beim Laden werden Konstruktoren/Methoden der enthaltenen Klassen aufgerufen (z. B. __reduce__ bei Pickle), die Befehle ausführen. Folgen: Server-Übernahme, Datenabfluss. Bekannte Fälle: Java-Server-Lücken (z. B. in Anwendungsservern), Ruby-on-Rails-YAML 2013, zahlreiche KI-Modell-Dateien auf Hugging Face mit Schadcode.
Abwehr
- Keine Deserialisierung nicht vertrauenswürdiger Daten mit mächtigen Formaten.
- Datenformate ohne Code-Semantik (JSON) + Validierung; Objekte selbst aus validierten Feldern bauen.
- Signieren/Verschlüsseln serialisierter Daten (HMAC), Integrität prüfen vor dem Deserialisieren; Session-Daten serverseitig speichern.
- Allowlists für Klassen (Java
ObjectInputFilter), Bibliotheken aktuell halten. - ML-Modelle:
safetensors/ONNX, Quellen prüfen,weights_only=Trueintorch.load. - Sandbox/Container, minimale Rechte, Monitoring.
- Abhängigkeiten scannen (SCA),
yaml.safe_load.
Prüfung und Lernen
- Code durchsuchen:
pickle.loads,yaml.load,ObjectInputStream,unserialize,BinaryFormatter,eval. - OWASP Top 10: „Software and Data Integrity Failures“.
- Legal üben: OWASP WebGoat/Juice Shop, TryHackMe-Räume.
- Merksatz: Daten sind keine Programme: ein Format, das Daten und Code vermischt, ist riskant.
- Verwandt: Injection, Lieferkettenangriffe, HMAC, JSON-Validierung (Zod), KI-Modelle austauschen (ONNX).
Siehe auch: OWASP Top 10, ONNX und Modellexport