EMZETT.
Login

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 (und shelve, joblib/torch.load mit 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.load statt safe_load), XML-Deserialisierung/XXE, Node node-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=True in torch.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