CVE-2026-87902 は WordPress 4.7.0〜7.1.1 が対象の、ログイン不要でコード実行につながる脆弱性です(CVSS 4.0 で 9.2)。最優先は各系列の修正版への更新で、そのうえで「自分のサイトで攻撃が成立する条件が揃っていたか」「攻撃の痕跡が無いか」を確認します。
修正版は 2026年9月22日公開の 7.1.2 で、旧系列にも 7.0.6、6.9.9、6.8.10 … 4.7.37 までバックポートが出ています。公開当日から攻撃が観測されているため、条件の確認より更新を先に済ませてください。
バージョンを確認する
サーバーに入れる場合は WP-CLI、入れない場合は公開フィードの generator で確認できます。
wp core version
curl -s https://example.com/feed/ | grep -o '<generator>[^<]*'
4.7.0〜7.1.1 で、かつ上記の修正版になっていなければ対象です。「自動更新を有効にしているはず」のサイトも、実際の値を確認してください。wp-config.php の設定によっては自動更新が止まっていることがあります。
攻撃が成立する3つの条件
原因は、ページのテンプレートを選ぶ get_page_template() のパストラバーサルです。細工したリクエストで、テーマの外にある PHP ファイルを読み込ませることができます。Patchstack の分析によると、コード実行まで至るには次の3つが揃う必要があります。
- 有効なテーマ(子テーマ・親テーマ)の直下に、名前が
page-で始まるディレクトリがある - PHP の
register_argc_argvが有効になっている - 有効な固定ページIDが存在する
1つ目と2つ目はサーバー上で確認できます。
find /path/to/wordpress/wp-content/themes/<テーマ名> -maxdepth 1 -type d -name 'page-*'
php -i | grep register_argc_argv
対象はディレクトリだけで、page-about.php のようなテンプレートファイルは条件に含まれません。-type d を付けずに探すとテンプレートファイルまで表示されるので注意してください。また、コマンドラインの PHP と Web サーバーの PHP は読み込む設定ファイルが異なる場合があります。Web 側の値は phpinfo() で確認します。
条件が揃っていなくても更新は必要です。今回公表されているのは現時点の攻撃手法で、別の手法が見つかれば条件は変わります。
アクセスログから攻撃リクエストを探す
Patchstack が公開している攻撃リクエストは、pagename パラメータに templates%2f と、%2e%2e(../)またはそれを二重エンコードした %252e%252e を含みます。ファイルを書き込む段階では PEAR のコマンドラインツール pearcmd.php を呼び出します。調査用ツールのユーザーエージェントもそのまま記録されることがあります。
grep -iE 'pagename=[^ ]*(%2e%2e|%252e)|pearcmd|cve-2026-87902' /path/to/access_log
該当する行があっても、ステータスコードが 403 や 404 なら拒否されています。確認が必要なのは 200 を返している行です。
一時ディレクトリに不審なPHPファイルが無いか
観測されている攻撃は、pearcmd.php の機能を使って /tmp に PHP ファイルを書き込みます。/tmp や /var/tmp は通常 .php ファイルを置く場所ではないので、見つかったら中身を確認してください。
find /tmp /var/tmp -name '*.php'
Patchstack が挙げているファイル名は poc87902.php、wp-pear-rce-flag.php、luci_ または zeta_ で始まるものです。名前は攻撃ツールによって変わるので、ファイル名ではなく「.php ファイルがあるかどうか」で判断します。
参考: Patchstack / Help Net Security