セキュリティ PHP セキュリティ対策 脆弱性

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

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

カスタマイズに関するお問い合わせはこちら