ペンリジェント・ヘッダー

CVE-2025-32432 の解剖:Craft CMS における Yii2 コンテナ・インジェクションの悪用

ウェブ脆弱性のヒエラルキーにおいて、レッドチームのオペレーターが即座に注意を払わなければならないのは、以下のようなものだ。 PHP オブジェクト・インジェクション (POI) エンドポイントを認証されていないユーザーに公開する。

CVE-2025-32432 がまさにそれだ。この CVSS v3.1スコア10.0Craft CMSのこの脆弱性は、単なるバグではなく、最新の依存性注入(DI)コンテナが、いかにしてサポートするアプリケーションに対して武器になりうるかを示すマスタークラスなのだ。

筋金入りのセキュリティ・エンジニアにとって、ここでの興味はRCEだけでなく、そのメカニズムにある。そのメカニズムである。 Yii2 フレームワーク (Craftを動かす)はユーザー入力経由で渡されるコンフィギュレーション配列を処理する。この分析では、脆弱性のスタック・トレース、エクスプロイトに必要な特定のガジェット・チェーン、そしてなぜこの特定のCVEが従来のDASTスキャナの限界点を示し、AI主導の攻撃エージェントの台頭を必要とするのかを解剖します。

建築の欠陥:DIがうまくいかないとき

CVE-2025-32432 を理解するためには、Craft CMS のアーキテクチャを理解する必要があります。Craft は Yii2 の Service Locator と Dependency Injection パターンに大きく依存しています。

脆弱性は アセットコントローラー具体的には アクションジェネレイトトランスフォーム メソッドを使用します。このエンドポイントは、フロントエンドがオンザフライで画像の変換(トリミング、リサイズ)をリクエストできるように設計されています。

脆弱なシンク

コードの流れは、ユーザー入力から直接オブジェクトのインスタンス化に至る危険な経路をたどる。

  1. 摂取: コントローラは 変える 配列である。
  2. ノーマライゼーション: に渡される。 Craft::$app->getAssetTransforms()->normalizeTransform().
  3. 実行(シンク): このメソッドは最終的に Craft::createObject($config).

Yii2、 オブジェクトの作成 は強力なラッパーだ。もし $config 配列には クラス キーを指定すると、Yii2 はその特定のクラスをインスタンス化し、パブリックプロパティに残りの配列キーを入力しようとします。

PHP

`// 簡易的な脆弱性の流れ public function actionGenerateTransform() { $transformId = Craft::$app->getRequest()->getBodyParam('transformId'); // 攻撃者は設定配列全体をコントロールする $transformConfig = Craft::$app->getRequest()->getBodyParam('transform');

// FATAL FLAW: 'class' パラメータのホワイトリスト検証を行わない
$object = Craft::createObject($transformConfig);

return $object->transform();

}`

これがその定義である。 安全でないデシリアライズ (CWE-502)は、ネイティブではなくJSON/配列コンフィギュレーションを使用しています。 unserialize().結果は同じで、攻撃者が制御の流れを決めてしまう。

CVE-2025-32432 の解剖:Craft CMS における Yii2 コンテナ・インジェクションの悪用

エクスプロイト・チェーンガジェットの工作

ペイロードをエンドポイントに向けるだけで 400 バッドリクエスト.悪用を成功させるには、アプリケーションの状態の微妙な理解が必要です。

フェーズ1:文脈的偵察(資産ID)

について アクションジェネレイトトランスフォーム 関数にはハードな依存関係があります。 アセットID (CMSにアップロードされた画像を表す整数)。

もし アセットID が存在しない場合、例外がスローされます。 以前 弱者に届く オブジェクトの作成 コール。

  • 罠だ: 従来のスキャナー(Nessus、Nuclei)は、ペイロードをやみくもに発射する。ランダムなIDを使用するか、IDを使用しない。彼らはエラーを受け取り、ターゲットを "安全 "とマークする。
  • バイパス 洗練された攻撃者(またはエージェント)は、公開されているHTMLソースコードをスクレイピングし、典型的なクラフト資産のパターンを探します、 /assets/images/1042/ロゴ.png).整数 1042 が実行経路を解き明かす鍵だ。

フェーズ2:ガジェットチェーン

有効なアセットIDでゲートのロックが解除されると、攻撃者はペイロードを提供しなければならない。私たちは いずれも クラスのライフサイクル中に悪意ある活動を引き起こすクラス(通常は 建設, __破壊あるいは 開始).

CVE-2025-32432に関連して、研究者たちは次のようなチェーンを特定した。 \\GuzzleHttp (インストールされている場合) または Yii2 ネイティブのキャッシュクラス。

一般的なベクターは yiirbac PhpManager を悪用した。 表示 レンダラーがローカルファイルをインクルードする。しかし、最も直接的なRCE方法は Craft オブジェクトと PHP プロトコルラッパーを組み合わせたものです。

エクスプロイトのペイロード構造:

JSON

{ "assetId":"1042", "transform":transform": { "class":"craftbasebaseImageTransform", "width":"100", "height":「100", "format":「php", "quality":{class": "class":"yiiIndexAction", "checkAccess":"system", "id":"whoami" }.}

注:実際のガジェットチェーンは、サーバーにインストールされている特定のComposer依存関係によって異なる場合があり、ペイロードを動的に調整する必要があります。

Craft CMS で Yii2 コンテナ・インジェクションを武器にする

静的セキュリティ・ツールの失敗

この脆弱性は、現世代のセキュリティ・ツールの限界を露呈している。

  1. 無国籍: 従来のスキャナーはステートレスである。ホームページでアセットIDを見つけたことを「記憶」し、10分後のPOSTリクエストでそれを使うことを「決定」することはない。
  2. 文脈の盲目: 彼らはビジネスロジックを推測することができない。彼らは画像IDを単なる数字としか見ておらず、エクスプロイトチェーンの前提キーとは見ていない。

業界はここに軸足を置いている。 エージェント・セキュリティー.

自動推論:懺悔的アプローチ

でCVE-2025-32432を分析した。 寡黙標準的なファジングの成功率は0%であることがわかりました。この脆弱性を確実に検証するためには、多段階の推論が可能なAIエージェントを導入する必要がありました。

について 寡黙 このCVEのワークフローは、「スキャン」と「侵入テスト」の違いを示している:

  1. 指紋採取: エージェントは X-Powered-By:クラフトCMS ヘッダーを使用する。
  2. 意味解析: ファジングの代わりに、エージェントはランディングページのDOMを解析します。そして <img src="..."> タグとURL構造を正規表現でマッチさせ、潜在的なアセットIDを抽出する。
  3. 仮説の検証: エージェントは、抽出されたIDで良性変換リクエストを試みる。もし 200 OK または 論理例外 (むしろ 404)、IDが有効であることを確認する。
  4. ペイロードの変異: エージェントはJSONペイロードを構築します。サーバーが特定のラッパーを非推奨とする新しいバージョンの PHP を実行している場合、エージェントはリアルタイムでガジェットチェインを修正し、代替オブジェクトのインジェクションを試みます。

この能力 チェーンロジック-ステップAでキーを見つけ、ステップBでそれを使用する-これが、人間の(そしてエージェント的な)ハッカーと自動化されたスクリプトを分けるものである。

修復と防御

もしあなたがクラフトCMSのインストールを守っているのであれば、早急な対応が必要です。

1.パッチ

ベンダーは以下のバージョンで厳密な検証をリリースしている。確実に実行してください:

  • クラフトCMS3.x→こちら 3.9.15+
  • クラフトCMS4.x -> Craft CMS 4.x 4.14.15+
  • クラフトCMS5.x→こちら 5.6.17+

2.WAFの設定

レガシーコードのフリーズにより)パッチ適用がすぐに実行できない場合は、WAFレベルで特定の攻撃ベクターをブロックする必要がある。

ModSecurityルールの例:

アパッチ

SecRule REQUEST_URI "@contains /actions/assets/generate-transform" \ "id:100001,phase:2,t:none,t:lowercase,deny,status:403,msg:'Block Craft CMS RCE CVE-2025-32432', ¦チェーン" SecRule ARGS_POST:transform "@rx class"

このルールは、POSTボディに'class'パラメータを定義しようとする変換エンドポイントへのリクエストをブロックする。

インパクトの大きい脆弱性の比較(2024-2025年)

CVE-2025-32432の文脈を理解するために、主要なフレームワークにおける最近の他のアーキテクチャの不具合と比較することが役立つ。

CVE IDターゲットベクトル複雑さなぜそれが重要なのか
CVE-2025-32432クラフトCMSオブジェクト・インジェクションミディアム検証されていないDI容器の不具合を示す。
CVE-2024-21626ランクコンテナ脱出高いコンテナのランタイム分離に根本的な欠陥。
CVE-2024-23897ジェンキンス任意のファイル読み込み低いCLIパーサ機能(args4j)の悪用。
CVE-2024-3400パロアルト PAN-OSコマンド・インジェクション低いエッジセキュリティデバイスの認証されていない RCE。

結論

CVE-2025-32432 は、現代のウェブ開発において、"機能豊富" はしばしば "攻撃面豊富" を意味することを思い出させてくれます。Yii2 の オブジェクトの作成 開発者には柔軟性があるが、攻撃者には装填された銃を渡すことになる。

セキュリティ・エンジニアにとって、この脆弱性は "ポイント・アンド・シュート "スキャンの時代の終わりを強調している。脆弱性はより論理的に、より文脈的に、より状態に依存するようになってきている。脆弱性を防御するためには、攻撃者と同じように素早く考え、推論し、適応できるツールが必要なのだ。

参考文献とさらなる読み物:

記事を共有する
関連記事
jaJapanese