© Enkel/Shutterstock.com
Deserialisierungsschwachstellen im Java-Programmcode

Exploiting in Java


Der Stack Overflow ist das am meisten anzutreffende Sicherheitsproblem in der Softwareentwicklung. Bei einem solchen kann ein Angreifer mittels einer zu langen Eingabe einen Programmspeicher zum Überlaufen bringen, sprich über die Grenzen eines Arrays hinausschreiben und so Programme zum Absturz bringen, interne Daten verfälschen und den Programmfluss ändern. In Java gibt es zwar keinen klassischen Stack Overflow, aber ähnliche Deserialisierungsschwachstellen.

(Benutzer-)Daten können Programmcode enthalten, die ein Angreifer beim Stack Overflow zur Codeausführung missbraucht. In der Programmiersprache Java jedoch begegnet uns dieses Problem aufgrund der virtuellen Machinenarchitektur nicht, was allerdings nicht bedeutet, dass man Deserialisierungsschwachstellen nicht mit einem Stack Overflow vergleichen kann. In Analogie dazu kann man setzen, dass hier ebenfalls Daten und Programmcode nicht voneinander separiert werden und ein Teil des weiteren Programmflusses von den zu deserialisieren Daten abhängt. Da Deserialisierung oft auch in Webanwendungen bei der Verarbeitung von Benutzereingaben und Cookies Verwendung findet, stellt sie für Hacker eine interessante Angriffsoberfläche dar.

Wer Deserialisierung sagt, muss auch Serialisierung sagen!

Unter der Serialisierung versteht man die Umwandlung eines Objekts in einen Bytestrom. Ein Java-Objekt und dessen Zustand kann so effizient beispielsweise in einer Datei oder Datenbank gespeichert oder über ein Netzwerk zu einem anderen Rechner übertragen werden. Das Gegenstück zur Serialisierung ist die Deserialisierung, die den Prozess auf der Empfängerseite umkehrt und das ursprüngliche Objekt anhand des Bytestroms, des serialisierten Objekts, rekonstruiert (Abb. 1).

rengstorf_deserialisierung_1.tif_fmt1.jpgAbb. 1: Serialisierungs- und Deserialisierungsprozess

Ein Onlineshop verwendet die Serialisierung zur Sicherung des aktuellen Warenkorbzustands in einer Datei, die vom Benutzer heruntergeladen werden kann, und die Deserialisierung, um anhand einer hochgeladenen Datei den Zustand des Warenkorbs wieder herzustellen.

Vor der Serialisierung muss zunächst die Klasse des Objekts definiert werden. Ein Objekt kann im java.io-Serialisierungs-API [1] nur serialisiert werden, wenn die Klasse das Interface Serializable implementiert (Listing 1, Kommentar 4). In Listing 1 wird die Klasse ShoppingBasket definiert, die aus den Variablen artikel (Listing 1, Kommentar 1), die für den Namen des Artikels im Warenkorb steht, anzahl (Listing 1, Kommentar 2) für die Artikelm...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang