
CVE-2017-10271(WebLogic XMLDecoder逆シリアル化RCE)を悪用するためのステップバイステップのラボガイド。手動ペイロード構築、ブラインドRCEバイパス、特権検証やデータ流出などの攻撃後テクニックを含みます。

Development Mode で稼働中の base_domain に属する AdminServer)。7001。http、t3、iiop、ldap、snmp。7001 ポートで t3 プロトコルを公開しています。このデフォルト構成は、WebLogic のバージョンが RMI(Remote Method Invocation)を介した Java オブジェクト逆シリアル化に関連する脆弱性に対してパッチ適用されていない場合、高いリスクを伴います。7001 ポートの http プロトコル上で動作しており、/console/login/LoginForm.jsp などの機密エンドポイントを狙ったディレクトリスキャンの影響を受けやすくなっています。ターゲットの開放ポートが特定されたら、nmap を使用してポートをスキャンし、稼働中のサービスを特定します。

したがって、ターゲットは Oracle WebLogic Server 10.3.6.0 というバージョンの HTTP サービスを稼働させています。これは、一連の重大な CVE(逆シリアル化、認証バイパスなど)で有名なエンタープライズ向け Java アプリケーションサーバーです。しかし、この情報だけでは、システムがどの特定の脆弱性に対して脆弱であるかを結論付けるには不十分です。付随する Web サービスコンポーネントをより深くスキャンする必要があります。
ここで、dirsearch ツールを使用して機密エンドポイントの特定を進めます。WebLogic は Java プラットフォーム上で動作するため、.jsp および .xml ファイルが最も機密性の高いターゲットとなります。HTTP 200 ステータスコードを返すエンドポイントに焦点を当てます。
dirsearch -u http://192.168.3.137:7001/ -e jsp,xml,html

/console/login/LoginForm.jsp: WebLogic Admin Console の Web インターフェースへのログインポータルです。デフォルト認証情報のブルートフォース攻撃や認証バイパス脆弱性(CVE-2020-14882 など)の重要なターゲットとなります。/bea_wls_internal/: WebLogic Server のデフォルトの内部 Web アプリケーションディレクトリです。このコンポーネントは、静的システムファイルへのアクセスおよび操作を可能にします。/wls-wsat/CoordinatorPortType: これが最も重要な発見です。このパスが 200 OK ステータスコードを返すことは、Web Services Atomic Transactions(wls-wsat) コンポーネントが有効化され、データを受信できる状態にあることを確認します。/uddiexplorer および /uddi/uddilistener: これは WebLogic Server にデフォルトで統合されている、Web サービスの管理および登録を行うための UDDI Explorer(Universal Description, Discovery, and Integration)コンポーネントです。このコンポーネントは SSRF(Server-Side Request Forgery)- CVE-2014-4210 脆弱性で非常に有名です。攻撃者は /uddiexplorer/SearchPublicRegistries.jsp エンドポイントにある UDDI のパブリックレジストリ検索インターフェースを利用して、WebLogic サーバーに任意の HTTP リクエストをバックエンドの内部ネットワークへ送信させることができます。⇒ 考察: /wls-wsat(XMLDecoder を介した RCE リスク)と /uddiexplorer(SSRF リスク)の共存は、この WebLogic サーバーの攻撃対象領域が極めて広いことを示しています。
WebLogic 10.3.6.0 サーバー上に 2 つの独立した攻撃対象領域が共存していることを特定した後、次の 2 つの方向性を分析します。
/uddiexplorer における SSRF 脆弱性(CVE-2014-4210):
/wls-wsat における XMLDecoder 逆シリアル化脆弱性(CVE-2017-10271):
⇒ 決定: Cyber Attack Chain モデルにおいて、RCE は常に最終目標です。なぜなら、システムの直接的かつ完全な制御(Full System Compromise)を提供するからです。RCE の実行能力を獲得した時点で、UDDI アプリケーションを介した SSRF の悪用は冗長になります。これは、RCE シェルからは、UDDI インターフェースのパラメータに制限されることなく、システムコマンド(curl、wget など)を使用して、直接的、柔軟的、かつより強力に内部ネットワークの調査を積極的に実行できるためです。
したがって、エクスプロイトの優先順位の論理において、二次的な経路(/uddiexplorer での SSRF)を除外し、/wls-wsat/CoordinatorPortType における XMLDecoder 逆シリアル化脆弱性を介したリモートコード実行(RCE)の調査に完全に集中することを決定します。
CVE-2017-10271 の根本的な脆弱性は、WebLogic の WorkContextXmlInputAdapter クラスが java.beans.XMLDecoder オブジェクトを使用して <work:WorkContext> タグ内のデータを解析することに起因します。デフォルトでは、この XMLDecoder クラスは XML タグ形式で定義された任意の Java クラスを自動的にインスタンス化します。ここから、段階的なシステムの動作的相互作用に基づく検証を実行します。
このサーブレットの実際の稼働状態を迅速に確認するため、通常の HTTP GET プローブリクエストを送信します:
curl -i -s http://192.168.3.137:7001/wls-wsat/CoordinatorPortType
レスポンスは HTTP/1.1 200 OK と実装クラス CoordinatorPortTypePortImpl を返し、サーブレットが JVM メモリに正常にロードされたことを確認します。
Web Services サーブレットは POST メソッドで SOAP XML データを処理するように設計されているため、システムのデータ処理パイプラインを実証するために、2 つの POST リクエストによる比較テストを実行します。
1. 標準的な SOAP POST リクエスト
パーサーの通常の解析能力をテストするために、標準的な SOAP XML エンベロープ(完全な名前空間を含むが実行コンテンツは含まない)を送信します。
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>soapenv:Header/soapenv:Body/</soapenv:Envelope>"

Cannot find dispatch method)を示します。分析:
サーバーは POST ポートに十分に機能する XML リーダーを備えており、ユーザーが送信した XML ツリー構造全体を受信してデコードする準備ができています。これは、クライアントから WebLogic メモリ内部に至るデータパイプラインが完全に動作していることを確認します。
2. 不正な XML 構造の POST リクエスト
次に、XML 構造を意図的に破壊して(例: 名前空間の欠落)、パーサーの例外処理メカニズムを観察します。
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "soapenv:Envelopesoapenv:Headerwork:WorkContextinvalid_xml_structure</work:WorkContext></soapenv:Header></soapenv:Envelope>"

com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "soapenv" が返されます。分析:
com.ctc.wstx)に直接渡されて解析されます。実際の実験結果とシステムアーキテクチャ分析の組み合わせ — wls-wsat サーブレットが POST ポートを介して生のパケットを受信し、パーサー層に WAF/サニティフィルタが存在せず、生の Java XML リーダーエラーを直接スローすること — は、サーバーが CVE-2017-10271(XMLDecoder 逆シリアル化)の影響範囲に直接該当する、極めて脆弱なサービス構造を動作させていることを確認します。
XMLDecoder のデフォルトの解析メカニズムにはクラス制御フィルタが一切ないため、サーバーがサニタイズなしで生の POST データを受信することは、次のステップで Java システム実行オブジェクトを直接呼び出すペイロードを設計するための完璧な入口となります。
WebLogic 10.3.6.0 サーバーは古い Java 環境上で動作し、XMLDecoder に対して厳格なクラス制御フィルタを適用していないため、攻撃者は実行可能な Java オブジェクトを直接注入できます。
Java でコマンドを実行するための標準クラスは java.lang.ProcessBuilder です。この Java オブジェクトの初期化ロジックを XMLDecoder 互換の XML 形式にマッピングします:
<void class="java.lang.ProcessBuilder"><array class="java.lang.String" length="3"><void method="start"/>ProcessBuilder を介してシステムコマンドが実行されると、WebLogic サーバーは OS 上でコマンドをバックグラウンド実行し、HTTP 500 エラーコードのみを返します(コマンドの出力を HTTP レスポンス画面に直接出力することはありません)。この仕組みは Web Application Mapping と呼ばれ、すべての Web サーバーはこのように動作します。war/ ディレクトリはそのアプリケーションの**ドキュメントルート(Document Root)**です。war/ 内に配置された任意のファイルは、短い URL でアクセスできます。
⇒ ブラインド RCE を回避するには、物理パスを見つける必要があります。id > ... コマンドはオペレーティングシステム上で実行されるため、実際のパスが必要です。
/war ディレクトリを特定するためのホワイトボックス分析
コンテナ内でロードされている bea_wls_internal アプリケーションの実際の物理パスを特定するため、ホストマシンから直接システム検索クエリを実行します:

結果
/root/Oracle/Middleware/wlserver_10.3/server/lib/bea_wls_internal.war(元のアーカイブライブラリファイル)。/root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal(AdminServer の一時パーティション _WL_internal 内に展開されたアクティブなアプリケーションディレクトリ)。このアクティブディレクトリの奥に進むと、静的ファイルを含むサブディレクトリ /9j4dqk/war/ が見つかります。これはアプリケーションの絶対 Web ルートディレクトリであり、攻撃者は RCE 実行結果を表示するための静的ファイルを書き込む権限を持っています。考察: id の出力を上記ディレクトリ内の静的ファイル rce.txt にリダイレクトするコマンドを設計します: id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt