WordPress W3 Total Cache プラグインの脆弱性 CVE-2025-9501:実用的な PoC が登場

PoC Published for W3 Total Cache Flaw Exposing 1M+ Sites to RCE

2025/11/24 gbhackers — WordPress で人気のキャッシュ・プラグインであり、100 万件以上のアクティブ・インストール数を誇る W3 Total Cache に存在する、深刻なリモート・コード実行の脆弱性 CVE-2025-9501 に対する PoC エクスプロイトを、セキュリティ研究者たちが公開した。この脆弱性を悪用する攻撃者は、特定の条件下において脆弱な Web サイト上で任意のコードを実行できる。

コマンド・インジェクション脆弱性について

この脆弱性は、W3 Total Cache のページ・キャッシュ機構に存在し、未認証でのコマンド・インジェクションを引き起こす。

FieldDetails
CVE IDCVE-2025-9501
Affected ProductW3 Total Cache Plugin for WordPress
Affected VersionsVersions prior to patch (1M+ installations)
Vulnerability TypeUnauthenticated Command Injection / Remote Code Execution

RCE Security のセキュリティ研究者である Julien Ahrens は、WPScan の簡潔なアドバイザリを分析し、研究者 wcraft により最初に発見された脆弱性 CVE-2025-9501 を悪用する、実用的なエクスプロイトを開発した。

このコードが実行されるのは、プラグインの PgCache_ContentGrabber クラス内における _parse_dynamic_mfunc 関数である。この関数は、PHP の eval() 関数を使用して、キャッシュされたページ内の特殊な形式のコメントに含まれるコードを実行する。

Page Cache is enabled in the plugin
Page Cache is enabled in the plugin

したがってプラグインは、キャッシュされたコンテンツを処理する際に、これらの動的関数コメントを検索し、そこに含まれるコードを実行する。このエクスプロイトは、mfunc タグ形式を含む WordPress コメントを通じて、悪意のコードを挿入することで機能する。

ページがキャッシュされると、これらのコメントを処理するプラグインは、キャッシュされたページが訪問者に表示されるたびにコードを実行する。この脆弱性は技術的には単純だが、悪用を成功させるには、いくつかの条件を満たす必要がある。

まず、攻撃者は WordPress のコンフィグ・ファイルで定義された一意のセキュリティ文字列である、W3TC_DYNAMIC_SECURITY 定数の値を知っている必要がある。つまり、この秘密の値がなければ攻撃を続行できない。

次に、WordPress のコメント機能が、未認証のユーザーに対して有効化されている必要がある。つまり、コメント機能が無効化されている場合や、認証が必要な場合には、この脆弱性を悪用できるのはコメント権限を持つ認証済みユーザーのみとなる。

unauthenticated RCE
Unauthenticated RCE

最後に、W3 Total Cache でページ・キャッシュ機能が有効化されている必要がある。これはプラグインのコア機能だが、新規インストール時にはデフォルトで無効化されている。

これらの前提条件により、攻撃対象領域は大幅に縮小されるが、これらの条件を満たすサイトは依然としてシステム全体の侵害に対して脆弱である。

この脆弱性が悪用されると、攻撃者は影響を受ける WordPress インストールを完全に制御できるようになり、機密データの窃取/バックドアのインストールなどに加えて、さらなる攻撃の実行が可能になる。

W3 Total Cache を使用している Web サイト管理者にとって必要なことは、このプラグインの最新パッチ版へと直ちにアップデートすることだ。

なお、迅速なアップデートが不可能な場合は、ページ・キャッシュ機能の無効化もしくは、認証済みユーザーへの制限により、一時的な緩和策を講じることができる。

ユーザー組織にとって必要なことは、W3TC_DYNAMIC_SECURITY 定数の設定を確認し、デフォルトやドキュメントに記載されている値ではなく、予測不可能な値の使用を確認することである。