
Automatisch Deserialisierungsprobleme in Java- und .NET-Anwendungen durch aktive und passive Scans identifizieren
Eine Burp Suite-Erweiterung zur Erkennung und Ausnutzung von Serialisierungsbibliotheken/APIs.
Diese nützliche Erweiterung wurde ursprünglich von Nick Bloor (@nickstadb) für die NCC Group entwickelt und basiert hauptsächlich auf der Arbeit von Alvaro Muñoz und Oleksandr Mirosh, Friday the 13th: JSON Attacks, die sie auf der Black Hat USA 2017 und der DEF CON 25 vorgestellt haben. In ihrer Arbeit untersuchten sie eine Reihe von JSON- und XML-Serialisierungsbibliotheken für Java und .NET und stellten fest, dass viele von ihnen die Serialisierung beliebiger Laufzeitobjekte unterstützen und daher auf die gleiche Weise anfällig sind wie viele Serialisierungstechnologien – Code-Schnipsel (POP-Gadgets), die während oder kurz nach der Deserialisierung ausgeführt werden, können über die Eigenschaften der serialisierten Objekte gesteuert werden, was oft die Möglichkeit zur Ausführung beliebigen Codes oder von Befehlen eröffnet.
Weitere Module, die mehr Formate wie YAML und AMF unterstützen, sind ebenfalls enthalten, basierend auf dem Paper Java Unmarshaller Security - Turning your data into code execution und dem Tool marshalsec von Moritz Bechler.
Diese Burp Suite-Erweiterung implementiert sowohl passives als auch aktives Scannen, um verwundbare Bibliotheken zu identifizieren und auszunutzen.
Freddy kann passiv die Verwendung potenziell gefährlicher Serialisierungsbibliotheken und APIs erkennen, indem es auf Typspezifizierer oder andere Signaturen in HTTP-Anfragen achtet und HTTP-Antworten auf Ausnahmen überwacht, die von den Zielbibliotheken ausgelöst werden. Beispielsweise verwendet die Bibliothek FastJson ein JSON-Feld $types, um den Typ des serialisierten Objekts anzugeben.
Freddy enthält eine aktive Scan-Funktionalität, die versucht, betroffene Bibliotheken sowohl zu erkennen als auch, wo möglich, auszunutzen.
Das aktive Scannen versucht, die Verwendung verwundbarer Bibliotheken mit drei Methoden zu erkennen: ausnahmebasiert, zeitbasiert und Collaborator-basiert.
Beim ausnahmebasierten aktiven Scannen fügt Freddy Daten in die HTTP-Anfrage ein, die eine bekannte zielspezifische Ausnahme oder Fehlermeldung auslösen sollen. Wenn diese Fehlermeldung in der Antwort der Anwendung beobachtet wird, wird ein Problem gemeldet.
In einigen Fällen können zeitbasierte Payloads zur Erkennung verwendet werden, da während der Deserialisierung die Ausführung von Betriebssystembefehlen ausgelöst wird und diese Aktion die Ausführung blockiert, bis der OS-Befehl abgeschlossen ist. Freddy verwendet Payloads, die ping [-n|-c] 21 127.0.0.1 enthalten, um in diesen Fällen eine Zeitverzögerung zu verursachen.
Collaborator-basierte Payloads funktionieren entweder durch Ausführen eines nslookup-Befehls, um den von Burp Suite Collaborator generierten Domainnamen aufzulösen, oder durch einen Versuch, entfernte Klassen von diesem Domainnamen in eine Java-Anwendung zu laden. Freddy prüft alle 60 Sekunden auf neue Collaborator-Probleme und markiert sie in der Problemliste mit RCE (Collaborator).
Die folgenden Ziele werden derzeit unterstützt (Kursivschrift ist neu in v2.0):
Java
.NET
Veröffentlicht unter AGPL-3.0, siehe LICENSE für weitere Informationen
Freddy verwendet das Gradle-Build-System.
Um das Jar zu erstellen, müssen Sie lediglich gradle jar im Stammverzeichnis ausführen.
Dies führt die Tests aus und erstellt bei Erfolg die Jar-Datei im Verzeichnis build/libs.