WordPress プラグイン String Locator の脆弱性(CVE-2026-97188)が、WPScan から 10/5 に公開されました。ファイルやデータベースの中の文字列を探すプラグインで、有効インストールは 10 万あります。ログインしていない第三者がデータベースの行に仕込んだ PHP のオブジェクトが、管理者が後からその行をプラグインの編集画面で開いて保存した時点で実体化するものです。修正版の 2.6.8 は公開の 6 日前、9/29 に出ています。
2.6.8 は影響なし。2.6.7 以下のサイトが攻撃の対象で、上げる期限は WPScan が再現手順を公開する 10/26 です。2025 年 1 月の修正で止まっている 2.6.7 も、今回は対象に入ります。
https://wpscan.com/vulnerability/cfb495ac-32fc-43e2-81b4-74faa8c164a4/
WPScan の公開情報と String Locator の変更履歴をもとに、やることだけ整理しました。
取るべき対応
- プラグイン一覧で String Locator のバージョンを見る
- 2.6.8 なら対応済みで、9/29 に出た現行版です
- 2.6.7 は 1 つ前のバージョンで、今回は対象です
- 2.6.7 以下なら 2.6.8 に上げる
- 上げるまでは、データベース検索の結果から行を開いて保存しない
- WPScan は回避策を示していません。管理者が行を開いて保存した時点で成立する、という成立条件の裏返しです
対象者
対象は 2.6.7 以下を入れているサイトで、WPScan が挙げる条件はバージョンだけです。成立するのは、第三者がデータベースの行に残した serialize したデータを、管理者が後から String Locator のデータベース検索から開いて保存したとき。serialize したデータとは、PHP のオブジェクトを文字列の形で保存したものです。データベース検索を普段使っていないサイトも、バージョンがそこにあれば対象で、WPScan の条件に機能を使う頻度は入っていません。
起こったこと
String Locator には、データベースの中を検索して、見つかった行をその場で書き換えて保存する機能があります。この保存の場面で、ログインしていない第三者があらかじめ行に残しておいた serialize したデータが元のオブジェクトに戻され、PHP 上で実体化します(CVSS 8.8)。実体化したオブジェクトで何ができるかは、同じサイトに入っている他のプラグインやテーマの中に、それを起点に動くコードの連なり(POP チェーン)があるかで決まります。WPScan は、揃えば任意のファイルの削除・機密情報の読み出し・リモートコード実行に至ると書いています。
原因
WPScan によると、データベースの行を保存するときに内容を文字列からオブジェクトに戻す処理(unserialize)で、プラグインが戻してよいクラスを制限していませんでした。2.6.8 の変更履歴には、シリアライズしたデータの処理を強化した、とだけ書かれています。



