
Tool zur Ausnutzung von Java-Deserialisierungsschwachstellen mit Payload-Generatoren für mehrere Marshaller (Jackson, XStream, SnakeYAML) und JNDI-Referenz-Indirektion für Remote Code Execution.
Wenn Sie wegen Log4Shell/CVE-2021-44228 hierhergekommen sind, lesen Sie vielleicht etwas über die Ausnutzungsvektoren und betroffenen Java-Laufzeitversionen: https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Es ist mehr als zwei Jahre her, seit Chris Frohoff und Garbriel Lawrence ihre Forschung zu Schwachstellen bei der Deserialisierung von Java-Objekten vorgestellt haben, die letztlich zu dem führte, was man wohl als die größte Welle von Remote-Code-Execution-Schwachstellen in der Geschichte von Java bezeichnen kann.
Die Forschung zu diesem Thema zeigte, dass diese Schwachstellen nicht auf so ausdrucksstarke Mechanismen wie Java-Serialisierung oder XStream beschränkt sind, sondern einige möglicherweise auch auf andere Mechanismen übertragbar sind.
Dieses Paper präsentiert eine Analyse – einschließlich Details zur Ausnutzung – verschiedener quelloffener Java-Marshalling-Bibliotheken, die das Unmarshalling beliebiger, vom Angreifer bereitgestellter Typen erlauben/erlaubten, und zeigt, dass dieser Prozess unabhängig von seiner Ausführung und den impliziten Einschränkungen ähnlichen Ausnutzungstechniken ausgesetzt ist.
Das vollständige Paper ist unter marshalsec.pdf verfügbar.
Alle Informationen und der gesamte Code dienen ausschließlich zu Bildungszwecken und/oder zum Testen Ihrer eigenen Systeme auf diese Schwachstellen.
Java 8 erforderlich. Mit Maven bauen: mvn clean package -DskipTests. Aufruf:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
wobei
Payload-Generatoren für die folgenden Marshaller sind enthalten:
Keine Voraussetzungen.
Voraussetzungen:
Der zu ladende Dienst ist derzeit fest auf javax.script.ScriptEngineFactory verdrahtet.
Voraussetzungen:
Voraussetzungen:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
Es gibt einige Systemeigenschaften, die die Argumente beim Ausführen von Tests steuern (über Maven oder bei Verwendung von -a):
Die Tests werden mit einem installierten SecurityManager ausgeführt, der sowohl die Ausführung von Systembefehlen als auch Code prüft, der von Remote-Codebasen ausgeführt wird. Damit das funktioniert, muss die verwendete geladene Klasse eine Sicherheitsmanager-Prüfung auslösen.
| Marshaller | Gadget Impact |
|---|
| BlazeDSAMF(0|3|X) | nur JDK, Eskalation zu Java-Serialisierung RCEs durch diverse Drittanbieter-Bibliotheken |
| Hessian|Burlap | RCEs durch diverse Drittanbieter |
| Castor | RCE durch Abhängigkeitsbibliothek |
| Jackson | möglicherweise reines JDK-RCE, diverse RCEs durch Drittanbieter |
| Java | wieder ein weiteres RCE durch Drittanbieter |
| JsonIO | reines JDK-RCE |
| JYAML | reines JDK-RCE |
| Kryo | RCEs durch Drittanbieter |
| KryoAltStrategy | reines JDK-RCE |
| Red5AMF(0|3) | reines JDK-RCE |
| SnakeYAML | reine JDK-RCEs |
| XStream | reine JDK-RCEs |
| YAMLBeans | RCE durch Drittanbieter |