All in One SEOの検索結果ページに、カスタムフィールドに入れたAPIキーが出てしまう脆弱性

OVERVIEW

SEO プラグイン All in One SEO 5.0.3 以前に、脆弱性 CVE-2026-109367 が記録されました。ログインしていない人がサイト内検索を通じて、投稿のカスタムフィールドに入れた非公開の値を、検索結果ページに出させられるというものです。カスタムフィールドに API キーや社内向けのメモを入れていると、それがページのタイトルや検索エンジン向けのデータにそのまま書き出されるおそれがあります。

原因は、検索語をタイトルに差し込んだあとで、その文字列をもう一度 All in One SEO のタグとして読み直していたことです。修正は All in One SEO 5.0.4 に入っていて、2026年11月7日時点の現行は All in One SEO 5.0.5 です。

この記事では、サイト内検索の検索語から、なぜ非公開の値までたどり着けたのかと、この修正が見落とされやすい理由を書きます。根拠にしたのは、公開された脆弱性の記録、開発元の変更履歴、それに WordPress.org で配られている All in One SEO 5.0.3 と All in One SEO 5.0.4 のコードです。

All in One SEOとは

All in One SEO

All in One SEO は、検索エンジンに見せるページのタイトルや説明文、サイトマップ、構造化データ(ページの中身を検索エンジンに伝えるためのデータ)をまとめて管理する SEO プラグインです。WordPress.org では2007年から配られていて、有効インストールは200万以上あります。

今回の脆弱性に関わるのが、投稿のカスタムフィールドです。カスタムフィールドは、本文とは別に投稿ごとに保存できる項目で、価格や担当者名などを入れたり、Advanced Custom Fields のようなプラグインで入力欄を作ったりして使います。テーマが表示しない限り、訪問者の目には触れません。All in One SEO は、このカスタムフィールドの値もタイトルや説明文に差し込めます。

All in One SEO 5.0.3以前では、サイト内検索を通じて非公開のカスタムフィールドの値が検索結果ページに出た

CVE-2026-109367 の記録によると、All in One SEO 5.0.3 以前では、ログインしていない人がサイト内検索の検索語を通じて、公開していない投稿メタ(カスタムフィールドの値)を取り出せました。取り出された値は、検索結果ページの HTML のタイトルと、検索エンジン向けの構造化データ(JSON-LD の SearchResultsPage)にそのまま書き出されます。

記録は、出てしまう値の例として API キーや内部メモを挙げています。何が出るかは、そのサイトがカスタムフィールドに何を入れているかで決まります。公開して困らない値しか入れていなければ、出ても困ることはありません。外部サービスの API キーやパスワードを入れていれば、それが第三者に読まれます。

  • CVE:CVE-2026-109367。WordPress のセキュリティ企業 Wordfence が2026年10月31日に公開。開発元への連絡は10月12日
  • 対象:All in One SEO 5.0.3 以前。修正は All in One SEO 5.0.4。記録に有料の Pro のバージョンは書かれていない
  • 深刻度:CVSS は10点満点の5.3(中)。ログインも、管理者などの操作も要らない一方、値を読まれるだけで、改ざんやサイトの停止にはつながらないと評価されている
  • 悪用:米国の CISA の評価(11月2日時点)は「none(確認なし)」。ただし攻撃は自動化しやすく、影響は「partial(一部)」とされている

原因は、検索語をタイトルに差し込んだあと、もう一度タグとして読み直していたこと

All in One SEO は、ページのタイトルをタグの組み合わせで作ります。サイト名や区切り記号、投稿のタイトルといったタグを並べておくと、ページを表示するたびにそれぞれの中身が差し込まれる仕組みです。

All in One SEO の検索での見え方の設定画面。トップページのタイトルを Site Title、Separator、Tagline の3つのタグで組んでいる
All in One SEO の検索での見え方の設定(WordPress.org の公式スクリーンショット)。タイトルを3つのタグで組んでいます

サイト内検索の結果ページでは、初期設定のタイトルが「検索語+区切り+サイト名」の3つのタグでできています。検索語は、訪問者が検索窓に打ち込んだ文字そのものです。誰でも好きな文字を入れられる値を、タイトルの部品として使っていたことになります。

開発元は All in One SEO 5.0.4 のコードに、問題の箇所の説明を残しています。検索語を差し込んだあとの文字列は、カスタムフィールドのタグの処理などで、もう一度タグとして読み直されていました。そのため、検索語の中にタグの形をした文字が入っていると、読み直しのときに本物のタグとして扱われ、中身が差し込まれていました。それがカスタムフィールドのタグなら、差し込まれるのは投稿メタの値です。

同じ検索語の差し込みには、少し前にも手が入っています。開発元の変更履歴によると、All in One SEO 5.0.2.1(2026年10月1日)で検索ページのショートコードの保護を強めました。All in One SEO 5.0.3 のコードにも、検索語をショートコードとして実行しない処理が入っています。ショートコードは塞いでいたものの、All in One SEO 自身のタグは素通りしていたということです。

修正はAll in One SEO 5.0.4に入っているが、開発元の変更履歴には書かれていない

All in One SEO 5.0.4 は、開発元の変更履歴では2026年10月21日に出たバージョンです。配布されているコードを All in One SEO 5.0.3 と比べると、検索語を差し込む前に、タグの目印になる文字を、見た目は同じで中身の違う書き方(HTML の文字参照)に置き換える処理が加わっています。読み直しのときにはタグとして扱われず、ページに表示されるときには元の文字に戻ります。

ところが、All in One SEO 5.0.4 の変更履歴には、この修正が書かれていません。並んでいるのは、TruSEO(記事の SEO を採点する機能)のページビルダー対応や、リダイレクトの不具合の修正などです。脆弱性の記録が公開されたのは、All in One SEO 5.0.4 が出てから10日後でした。変更履歴を読んで「機能の追加だけ」と判断し、All in One SEO 5.0.4 を見送ったサイトには、この脆弱性が残っています。

前の節のショートコードの件で All in One SEO 5.0.2.1 や All in One SEO 5.0.3 に上げたサイトも、今回の記録ではまだ対象です。2026年11月3日に出た現行の All in One SEO 5.0.5 にも同じ修正が入っています。必須条件は WordPress 5.7 以上と PHP 7.4 以上で、All in One SEO 5.0.3 から変わっていません。

カスタムフィールドにAPIキーを入れていたサイトは、更新に加えてキーを発行し直す

プラグインの画面で All in One SEO のバージョンが 5.0.3 以下なら、現行の All in One SEO 5.0.5 に上げます。WordPress 本体を更新しても All in One SEO のバージョンは替わらないので、プラグインの更新は別に要ります。本体の更新については【脆弱性修正】WordPress 7.1.4がリリースされましたに書きました。

更新でふさがるのは、これから先の読み出しです。カスタムフィールドに API キーやパスワードを入れていたなら、更新に加えて、そのキーやパスワードを発行元で発行し直します。記録には実際に読まれた件数が出ておらず、修正の前に読まれていなかったとは言い切れないためです。秘密にすべき値を入れていなければ、この記録を理由に発行し直す必要はありません。

更新したあとは、サイト内検索で結果が出ることと、検索結果ページのタイトルが崩れていないことを見ておきます。なお、2025年に報告された All in One SEO の権限確認の不備(All in One SEOに重大な脆弱性発見!300万サイト以上に影響か)は別の脆弱性で、そのとき上げたバージョンでは今回の分は直っていません。

参考にした一次情報


今回の修正は、開発元の変更履歴に書かれないまま All in One SEO 5.0.4 に入っていました。変更履歴だけを見て更新するかどうかを決めていると、脆弱性の記録が出るまでのあいだ、古いバージョンが残ったままになります。

サイト番では、プラグインやテーマの定期更新、バックアップ、表示の確認、障害のときの復旧を、担当者が内容を見て行います。

WordPress更新などの保守管理に手が回らない場合は、是非サイト番にお任せください。

サイト番