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 のページ・キャッシュ機構に存在し、未認証でのコマンド・インジェクションを引き起こす。
| Field | Details |
|---|---|
| CVE ID | CVE-2025-9501 |
| Affected Product | W3 Total Cache Plugin for WordPress |
| Affected Versions | Versions prior to patch (1M+ installations) |
| Vulnerability Type | Unauthenticated Command Injection / Remote Code Execution |
RCE Security のセキュリティ研究者である Julien Ahrens は、WPScan の簡潔なアドバイザリを分析し、研究者 wcraft により最初に発見された脆弱性 CVE-2025-9501 を悪用する、実用的なエクスプロイトを開発した。
このコードが実行されるのは、プラグインの PgCache_ContentGrabber クラス内における _parse_dynamic_mfunc 関数である。この関数は、PHP の eval() 関数を使用して、キャッシュされたページ内の特殊な形式のコメントに含まれるコードを実行する。

したがってプラグインは、キャッシュされたコンテンツを処理する際に、これらの動的関数コメントを検索し、そこに含まれるコードを実行する。このエクスプロイトは、mfunc タグ形式を含む WordPress コメントを通じて、悪意のコードを挿入することで機能する。
ページがキャッシュされると、これらのコメントを処理するプラグインは、キャッシュされたページが訪問者に表示されるたびにコードを実行する。この脆弱性は技術的には単純だが、悪用を成功させるには、いくつかの条件を満たす必要がある。
まず、攻撃者は WordPress のコンフィグ・ファイルで定義された一意のセキュリティ文字列である、W3TC_DYNAMIC_SECURITY 定数の値を知っている必要がある。つまり、この秘密の値がなければ攻撃を続行できない。
次に、WordPress のコメント機能が、未認証のユーザーに対して有効化されている必要がある。つまり、コメント機能が無効化されている場合や、認証が必要な場合には、この脆弱性を悪用できるのはコメント権限を持つ認証済みユーザーのみとなる。

最後に、W3 Total Cache でページ・キャッシュ機能が有効化されている必要がある。これはプラグインのコア機能だが、新規インストール時にはデフォルトで無効化されている。
これらの前提条件により、攻撃対象領域は大幅に縮小されるが、これらの条件を満たすサイトは依然としてシステム全体の侵害に対して脆弱である。
この脆弱性が悪用されると、攻撃者は影響を受ける WordPress インストールを完全に制御できるようになり、機密データの窃取/バックドアのインストールなどに加えて、さらなる攻撃の実行が可能になる。
W3 Total Cache を使用している Web サイト管理者にとって必要なことは、このプラグインの最新パッチ版へと直ちにアップデートすることだ。
なお、迅速なアップデートが不可能な場合は、ページ・キャッシュ機能の無効化もしくは、認証済みユーザーへの制限により、一時的な緩和策を講じることができる。
ユーザー組織にとって必要なことは、W3TC_DYNAMIC_SECURITY 定数の設定を確認し、デフォルトやドキュメントに記載されている値ではなく、予測不可能な値の使用を確認することである。
W3 Total Cache の脆弱性は、キャッシュ機構がコメント内のコードを処理する仕組みに起因しており、本来は信頼すべきでない入力が、そのまま eval に渡ってしまう点に問題があります。特に、未認証ユーザーのコメントが利用されるケースでは攻撃範囲が広がりやすく、設定次第で影響が大きく変わる点も注意が必要です。また、秘密値である W3TC_DYNAMIC_SECURITY が漏れてしまうと防御が機能しなくなるため、設定管理や公開範囲のケアも重要だと、この記事は指摘しています。ご利用のチームは、ご注意ください。よろしければ、2025/11/20 の「WordPress W3 Total Cache の脆弱性 CVE-2025-9501 が FIX:認証不要のリモート・コマンド実行」も、ご参照ください。
You must be logged in to post a comment.