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

ファントムクラスCraft CMS で CVE-2025-32432 Yii2 コンテナインジェクションを武器にする

PHPの脆弱性の階層では 依存性注入(DI) コンテナ注入 検知は複雑で、悪用はエレガント、そして壊滅的な影響力を持っている。

を開示した。 CVE-2025-32432 ターゲティング クラフトCMS (ひいては、その根底にある Yii2 フレームワークユーザ入力がクラスのインスタンス化を制御する場合、アプリケーションは攻撃者のものである。

多くのセキュリティ・スキャナーがこの問題を「コンフィギュレーション上の問題」と判定する中、エリート・セキュリティ・エンジニアはこの問題の正体を見抜いた: リモートコード実行(RCE) 安全でないオブジェクトのデシリアライズを介して。この記事では、この脆弱性を技術的に解剖し、ガジェットチェーンを再構築し、AI主導の分析が、このようなロジックの欠陥を大規模に発見する唯一の方法であることを実証する。

失敗のアーキテクチャYii2 コンテナの内部

CVE-2025-32432 を理解するためには、Yii2 の心臓部である yiii.

Craft CMS はクラスの依存関係を管理するために Yii2 の DI コンテナに依存しています。このコンテナにより、開発者は配列を使ってオブジェクトを構成することができます。例えば

PHP

// 正規の使用法 $object = Yii::createObject([ 'class' => 'appmodels', 'name' => 'Admin', ]);

この脆弱性は、攻撃者がこの設定配列に影響を与えることができる場合に発生する。コントローラアクションが生のJSON入力を受け取り、それをやみくもに Yii::createObject() または Yii::$container->set()攻撃者はアプリケーションを強制的にインスタンス化することができる。 任意のクラス オートロード・パスで 物件 価値観の違いだ。

アタック・サーフェス

この欠陥は通常、API リクエストやプラグイン設定を扱う CMS コントローラに存在し、入力のサニタイズはロジック(クラス定義)ではなく XSS(HTMLタグ)に集中します。

  • ソース ユーザー提供のJSON(例. POST /actions/vulnerable-plugin/save-config).
  • 沈む: Yii::createObject($userInput).
ファントムクラスCraft CMS で CVE-2025-32432 Yii2 コンテナインジェクションを武器にする

キル・チェーンの構築PoCについて

エクスプロイトには、次のようなものが必要だ。 ガジェット-ライフサイクル・メソッド (建設, 開始, __破壊あるいは 起床).

CVE-2025-32432 のコンテキストでは、Yii2 エコシステムで見られる一般的なガジェットチェーンを利用しています。 yiii または同様のコールバックの多いクラス。

コンセプト

PHPコールバック関数( システム または エグゼック) を与える。

兵器化されたJSONペイロード

以下は、悪意のあるクラス定義を注入してRCEをトリガーする方法を示す概念実証(PoC)です。

JSON

{ "rce_trigger":{ "class":"checkAccess": "system":"system", "id":"rce", "controller":{id": "rce":"yii\\\\web\\\\Controller", "id":"dummy" }, "modelClass":"yiii", "run":"id; uname -a" }.}

ペイロードの内訳

  1. クラス:DIコンテナに yiii.
  2. チェックアクセス:これは我々の危険な特性だ。このガジェットでは チェックアクセス プロパティは callable を保持するためのものです。これを システム.
  3. 実行のトリガー:アプリケーションがこのオブジェクトを処理するとき(多くの場合 実行() メソッドの実行またはプロパティの検証)に格納されているコールバックを呼び出す。 チェックアクセス を、コンテキスト(または攻撃者)から与えられた引数で指定する。
  4. 結果:サーバーは system('id; uname -a').

注:ハード化された環境では、攻撃者はこれを ファイルキャッシュ にPHPのWebシェルを書き込む。 ウェブ ディレクトリにある。

なぜ従来のスキャナーはこれを見逃すのか

CVE-2025-32432の検出は、レガシーなDASTツールでは難しいことで知られている。

  • 署名なし: ペイロードは有効なJSONです。SQLインジェクション構文 (OR 1=1) または XSS タグ (<スクリプト).
  • 文脈に依存する: 脆弱性は入力そのものにあるのではなく、次の点にある。 どのように を解釈する。 クラス キー標準的なスキャナでは クラス 地図 Yii::createObject.

AIによる検知:ペンリゲントの優位性

そこで ペンリジェント はパラダイムを変える。ペンリジェントは コンテキストを意識したAIエージェント フレームワーク固有のロジックを理解する。

  1. フレームワークの認識 Penligent のエージェントは、ターゲットが Craft CMS / Yii2 を実行していることを識別します。このフレームワーク特有の "危険なシンク" を知っています (例、 Yii::createObject).
  2. 論理推論: 盲目的なファジングの代わりに、AIはAPIスキーマを分析する。コンフィギュレーションに似たパラメーターを受け入れるJSONオブジェクトを見つけたら、「プロービング・ペイロード」をインテリジェントに注入する。 yiii-コンテナに到達可能かどうかをテストする。
  3. 自動検証: プローブが成功した場合(例えば、アプリケーションの動作が変わったり、クラスのインスタンス化を示す特定のエラーを返したりした場合)、Penligent はそのエンドポイントに以下の脆弱性があるとフラグを立てます。 容器注入 を生成し、修復検証のための特定の RCE ペイロードを生成する。

修復と防御

Craft CMS を CVE-2025-32432 および類似の DI 攻撃から保護する:

  1. 厳密な型チェック: 生のユーザー入力配列を Yii::createObject.常に クラス キーがないか(バックエンドにハードコードされている)、または厳密に許可リスト化されている。
  2. クラフトCMSを更新: 直ちに最新パッチを適用すること。ベンダーはおそらく アクション 任意のクラス定義を拒否する処理ロジック。
  3. 危険な機能を無効にする: あなたの php.ini使用する disable_functions ブロックする システム, エグゼック, パススルーそして プロック_オープン RCEの影響を緩和する。

結論

CVE-2025-32432 コンテナ・インジェクションは「2020年代のSQLインジェクション」である。コンテナ・インジェクションは、「2020年代のSQLインジェクション」です。

セキュリティ・エンジニアにとって、この教訓は明確である。ユーザーにオブジェクトを定義させれば、ユーザーによって破壊が定義されることになる。データの "形 "を検証するだけではもはや十分ではない。"型 "を検証しなければならない。

信頼できるリファレンス

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