概要

WordPressコア(バージョン4.7.0〜7.1.1)に存在する未認証のリモートコード実行脆弱性CVE-2026-87902(CVSS 9.2)が、9月22日のパッチ公開からわずか数時間後に実際の攻撃で悪用され始めた。Patchstackの観測によれば、最初の偵察は同日11:49 UTC、最初のファイル書き込み攻撃は15:34 UTCに確認されており、9月23日には攻撃トラフィックが前日比10倍以上に急増している。脆弱性はページテンプレート解決を担うget_page_template()関数の処理にあり、pagenameパラメータに対するパストラバーサル攻撃によって、活性テーマディレクトリ外の任意の読み取り可能なPHPファイルをインクルードできてしまう。発見者はセキュリティ研究者のRobert Ressl。

脆弱性の仕組みと悪用条件

悪用にはいくつかの前提条件が必要となる。まず、有効化されているテーマに「page-」で始まるトップレベルディレクトリが存在すること。加えてコード実行まで到達するには、サーバー上に読み取り可能なPHPファイル(典型的には/usr/local/lib/php/pearcmd.php)が存在し、PHPのregister_argc_argvが有効になっている必要がある。この設定は公式PHP Dockerイメージや、PHP 8.5未満を使うデフォルトのcPanel環境などで有効になっているケースが多く、攻撃対象になりやすいと指摘されている。WordPressのサニタイズ処理は単純な../のトラバーサルはブロックするが、パーセントエンコードされたシーケンス(%2e%2eや二重エンコードの%252e%252e)は生き残り、get_page_template()内でデコードされてしまう点が悪用の核心となっている。

3段階の攻撃手口

Patchstackの分析では、攻撃は偵察・PEAR検出・コード実行の3段階で急速に進化したという。第1段階の偵察では、wp-links-opml.phpやwp-includes/feed-rss2.php、wp-login.phpといった無害なコアファイルをインクルード対象に指定し、レスポンスの違いから対象サイトが脆弱かどうかを判定する。第2段階では、PEARのpearcmd.phpが存在し悪用可能かを+config-showのようなコマンドを含むエンコード済みトラバーサル文字列で確認し、register_argc_argvが有効かどうかを見極める。第3段階ではpearcmd.phpのconfig-createパラメータを使い、攻撃者が内容を制御したファイルを任意の場所に書き込ませることで、事実上の任意PHPコード実行を達成する。書き込み先は当初/tmpや/var/tmpが中心で、確認されたファイル名にはwp-pear-rce-flag.php、poc87902.php、luci_<random>.php、zeta_<random>.phpなどがある。The Hacker Newsの報道では、攻撃者がraw.githubusercontent.comでホストされたWebシェル(MrG3P5/web-shell)を取得して展開する手口も確認されている。

攻撃規模と対応状況

攻撃元IPは当初は少数のクラスターに限られていたが、その後数百件規模のソースに拡散した。リクエストにはcve-2026-87902-poc/1.0やnuclei-cve-2026-87902/1.0といった特徴的なUser-Agentが付与されるケースもあり、9月23日には公開されたNucleiテンプレートを使ったスキャンが公開されたことで攻撃量がさらに跳ね上がったとみられる。WordPressは脆弱性に対し、最新版7.1.2に加え7.0.6、6.9.9、6.8.10、さらに4.7.37までさかのぼるバージョンにパッチをバックポートしており、4.6以前は修正対象外となっている。ある研究者は、WordPressの自動更新がデフォルトで有効なことから「大量スキャンは起きても実際の侵害は比較的少数にとどまる」可能性を指摘する一方、Patchstackは「ペイロードが/tmpから再起動後も残る場所やWeb経由でアクセス可能な場所に移動しないか」引き続き監視するとしており、警戒は緩めていない。管理者には、WordPressの即時アップデートに加え、pagenameパラメータ中のトラバーサルシーケンスのブロックやregister_argc_argvの無効化といった暫定緩和策、/tmp・/var/tmp内の不審なPHPファイルの監査が推奨されている。