WordPress バックアップ移行プラグインは、WordPress ウェブサイトのバックアップと移行のプロセスを簡素化する強力なツールであり、さまざまな使いやすい機能を提供します。
最近、CDNetworks セキュリティ ラボは、Backup Migration プラグインの 1.3.8 より前のバージョンにリモート コード実行の脆弱性を発見しました。この脆弱性は、CVSS 3.1 で 9.8 と評価され、危険度は重大です。この脆弱性により、悪意のある攻撃者はバックドア アクセスを介して対象の Web サイトでリモートからコマンドを実行し、サイトを完全に制御できるようになります。
この脆弱性を悪用する条件は比較的単純ですが、影響は広範囲にわたります。悪用を防ぐために、企業はこのプラグインのバージョンを確認し、関連する脆弱性を修正するか、さらに良い方法として、Web 保護ソリューションを導入する必要があります。
このクイック ガイドでは、脆弱性の分析について説明します。
脆弱性分析と複製
脆弱性はプラグイン ファイル /includes/backup-heart.php に存在します。 この脆弱性を再現するための最初のステップは、このファイルを見つけてブレークポイントを設定することです。次に、パス /wp-content/plugins/backup-backup/includes/backup-heart.php にデータを送信して動的デバッグを実行します。サーバーがデータを受信すると、リクエスト ヘッダー データが変数 $fields に格納されていることがわかります。
さらに進むと、$fields のフィールド値が定数として定義されていることがわかります。ここでの主な焦点は、定数 BMI_ROOT_DIR と BMI_INCLUDES です。BMI_ROOT_DIR の値は、リクエスト ヘッダーの content-dir 値によって決定され、BMI_INCLUDES の値は、BMI_ROOT_DIR と「includes」を連結して形成されます。
さらに、BMI_INCLUDES は「bypasser.php」と連結され、require_once 関数を使用してインクルードされていることが分かりました。これにより、require_once のパラメータが制御可能となり、典型的なファイルインクルード脆弱性となります。
一部のエンコーディングでは、固定プレフィックスがエンコーディングの開始文字として使用されます。以下は、さまざまなエンコーディングの文字です。たとえば、韓国語の文字エンコーディング (ISO-2022-KR) では、エンコードされたメッセージはシーケンス「\x1b$)C」で始まる必要があります。
エンコーディング識別子 | 先頭に付加される文字 |
ISO2022KR | \x1b$)C |
UTF16 | \xff\xfe |
UTF32 | \xff\xfe\x00\x00 |
世界中で約 7,000 の言語が話されています。グローバルなインターネット通信を円滑に行うには、さまざまな印刷可能な文字が必要です。
基本的なASCIIエンコードテーブルはよく知られていますが、日本語の文字を表現できなかったり、ギリシャ語のアルファベットの「λ」「ν」「π」などの記号を含めることができなかったりするなど、制限があります。他の言語の文字や「☺」などの絵文字を表示するために、さまざまなエンコードテーブルが開発されてきました。
これらのエンコーディング テーブルは、文字をある言語から別の言語に変換できます。変換プロセスは、エンコーディングの長さやプレフィックス文字などの要因によって影響を受け、新しい文字が生成される場合もあります。
ホストでは、iconv -l を使用して、サポートされているエンコード変換テーブルを表示できます。
これらの変換テーブルは、php://convert.iconv.*.* フィルターを介して使用できます。たとえば、convert.iconv.CP861.UTF-16 は、ファイルの文字エンコーディングを CP861 から UTF-16 に変換することを意味します。
次のコード例では、文字列「START」を「CP861」、「UTF16」、「L4」、および「GB13000」エンコーディングに変換することで、文字列の先頭に新しい文字「B」を挿入することができます。
では、エンコード変換中に生成されたジャンク文字をどのように処理するのでしょうか。PHP の base64 デコードには、64 文字「0-9」、「a-z」、「A-Z」、「/」、「+」、およびパディング文字「=」のみを認識する機能があります。デコードする文字列に他の文字が含まれている場合、PHP はこれらの文字を直接無視し、残りの認識可能な文字を連結してデコードします。例:
ご覧のとおり、デコード中、文字列内の '@&>>_' などの文字は自動的に無視されます。緩く解析された base64 デコードを使用して、エンコード変換プロセス中に生成されたジャンク文字を除去できます。ジャンク文字に '=' が含まれている場合、convert.base64-decode フィルターのデコードに影響を与える可能性がありますが、UTF-7 エンコードを使用して '=' 記号を別の記号に変換することで、convert.base64-decode フィルターのデコードに影響を与えることなく、その点に注意してください。
上記の方法を使用すると、任意の base64 文字を生成できます。生成された base64 文字をデコードすると、元の文字を取得できます。最後に、構築した元のペイロードを php://filter/{filter}/resource=php://temp と連結します (resource=php://temp を指定すると、パスが有効であることを保証するため、任意の .php ファイルを追加できます)。ペイロードはファイルに書き込まれ、require_once を使用してファイルをインクルードすることで、コード実行へのファイルのインクルードを実現します。
GitHub では、php://convert.iconv.*.* フィルターを使用して対応する base64 文字をすばやく生成できるエンコード変換ツールが作成されています。
このスクリプトによって生成されたペイロードは、リクエスト ヘッダー content-dir の値として設定されます。
エンコード変換後に生成された悪意のあるコードが正常に書き込まれ、組み込まれ、ファイルの組み込みからコードの実行までのプロセスが完了したことがわかります。
WordPress 6.4.3 + Backup Migration Plugin 1.3.6を使用してローカルでセットアップします。php_filter_chainツールを使用して、 out.txt`; ?>` コマンド。
(https://github.com/synacktiv/php_filter_chain_generator/blob/main/php_filter_chain_generator.py)
結果をリクエスト ヘッダーの content-dir の値としてコピーし、データ パケットをパス http://localhost/wordpress/wp-content/plugins/backup-backup/includes/backup-heart.php に送信します。
http://localhost/wordpress/wp-content/plugins/backup-backup/includes/out.txt にアクセスします。これにより、システム コマンド date の実行結果が out.txt ファイルに書き込まれていることを確認できます。
脆弱性修復ソリューション
の バックアップ移行プラグインの最新バージョン この問題は修正されており、できるだけ早く最新バージョンにアップデートすることをお勧めします。
脆弱性の最小化: CDNetworks のクラウド セキュリティ 2.0
CDNetworksのクラウドWAF この脆弱性の悪用に対して即時の保護を提供します。他のさまざまな攻撃方法やさまざまなコンポーネントの脆弱性を継続的に調査および分析し、保護ルールを迅速に展開して、企業の「脆弱性の窓」を最小限に抑えます。
CDNetworksは先月、クラウドセキュリティソリューションをアップグレードしました。 クラウドセキュリティ 2.0WAF のいくつかの主要な機能を紹介します。
- 組み込みルールセット: 0-day/N-day 攻撃および OWASP Top 10 攻撃に対する 1,000 を超えるルールセット。
- インテリジェント分析(セルフチューニング): AI によるユーザー行動の学習により、ルールの例外が自動的に生成され、誤検知が削減されます。
- ゼロデイ攻撃に対する仮想パッチ: 脆弱性を継続的に監視し、1 時間ごとに新しいルールを生成します。
- AI テクノロジーによる管理保護モード: 強化された脅威検出と対応。
- スケーラビリティと導入の容易さ: 簡単な導入でオンデマンドで拡張できます。
CDNetworks は、これらの機能を統合することで、APAC 地域の企業の進化するセキュリティ ニーズに応え、競争の激しい市場において組織が保護された状態を維持できるようにすることを目指しています。