WordPress『WPCode』に任意コード実行の脆弱性 2.3.6以降なら安全
WordPressサイト300万件以上で利用されているコードスニペット管理プラグイン『WPCode』に、編集者(Author)以上の権限を持つアカウントからサーバー上で任意のコードを実行できる脆弱性 CVE-2026-8832(CVSS 8.8)が見つかった。Wordfenceが2026年5月27日に公開、ベンダーは前日の5月26日にv2.3.6を緊急リリース済み。
目次
WordPressサイト300万件以上で利用されているコードスニペット管理プラグイン『WPCode』に、編集者(Author)以上の権限を持つアカウントからサーバー上で任意のコードを実行できる脆弱性 CVE-2026-8832(CVSS 8.8)が見つかった。Wordfenceが2026年5月27日に公開、ベンダーは前日の5月26日にv2.3.6を緊急リリース済み。
300万サイトで使われているプラグインに任意コード実行の穴
WordPressサイト300万件以上に導入されているコードスニペット管理プラグインWPCode(旧名 Insert Headers and Footers)には、投稿者(Author)以上の権限を持つアカウントから、WordPressのサーバー上で任意のPHPコードを実行できる脆弱性 CVE-2026-8832 があります。対象はバージョン2.3.5以前で、2.3.6で修正済み。現在の最新安定版は2.3.8なので、いま使っているWPCodeが2.3.6以降なら追加の対応は不要、それより古ければ更新すれば塞がります。
修正版2.3.6は2026年5月に公開され、その後も2.3.7・2.3.8と更新が続いています(2.3.8では「スニペットを編集するには専用の有効化権限が必要」という追加の権限強化が入りました)。本稿の更新時点(2026-07-23)で、CISAのKEVカタログ(実際に攻撃が確認された脆弱性の米政府リスト)には未登録で、実環境での大規模な悪用報告も確認されていません。ただし公開から約2か月がたち、第三者がGitHubで実際に動く攻撃ツールを公開しているため、未修正のまま放置するのは危険です。なお深刻度スコアは、Wordfence/NVDがCVSS 8.8、WPScanが7.2(いずれも4段階の上から2番目「重要(High)」)と評価が分かれています。
300万サイトを乗っ取る人間が、本当に持っていくもの
CVSSの数字や攻撃ベクトル表記の裏で、寄稿者アカウント1つでPHPが書ける穴を実際に欲しがるのは誰なのか、その人たちはサイトの何を盗んで現金化するのか——この視点で本CVEを眺めると、WordPressサイトのオーナーに突き刺さる方向が見えてきます。
300万サイトの稼働中WordPressにAuthor権限から潜り込んで儲ける人間は、技術自慢の若者ではありません。中心にいるのは、乗っ取ったサイトでマルウェア配布キャンペーンを張る犯罪グループ、検索結果を汚染して偽通販・偽医薬品サイトへ誘導するSEOスパム業者、訪問者のブラウザに無断で暗号通貨マイナーを仕込むコインジャッカー、スキミングコードを決済画面に注入して顧客のクレジットカード番号を抜くMagecart系のスキマー、寄稿者として正規に潜り込んでから昇格を狙うインサイダー型の詐欺グループです。彼らが欲しがるのは、サイトの管理者権限そのもの、ホスト共有環境の隣接サイトへの足場、サイト訪問者のCookieとセッション、購読者リストとメールアドレスのデータベース、そしてWooCommerce稼働サイトであれば顧客の氏名・住所・カード情報です。本CVEを叩けば、寄稿者1人を抱えるだけのWordPressサイトが、その日のうちにwebshell設置済みの配信拠点に化けます。Author権限1つでPHPスニペット作成APIが通るので、寄稿者を1人引き入れた瞬間にwp-config.phpごと外へ流れ、DBの読み書き権限まで一式持っていかれます。
サイバーセキュリティの構造で言うと、これは「権限昇格による任意PHP実行」と「サプライチェーン的な二次被害」の組み合わせです。WordPressのAuthor権限は、外注ライター・寄稿者・会員制サイトの登録ユーザーを通じて、運用者の想定よりも広く配られています。さらに本CVEはxmlrpc.php経由でも到達できるため、管理画面のログイン履歴を見ているだけでは攻撃の兆候を捉えられません。一度PHPスニペットが書き込まれれば、サイト全体の.htaccessが書き換わり、サイトは「正規SEOで上位表示されるマルウェア配布拠点」に転用されます。WPCodeは300万サイトに導入されているので、攻撃を自動化するツールが出回れば、スキャン対象は一気に膨れ上がります。実際、第三者がGitHubで動作する攻撃ツールを公開済みで、攻撃コードを一から書く手間はもう省かれています。
8.8というスコアはサーバ側の被害を測る目盛ですが、WordPressオーナーが背負う傷は別の場所に残ります。それは、読者や顧客が「信頼して開いたあなたのドメイン」経由でマルウェアやスキマーを掴まされ、その配布元として運営者の名前と独自ドメインが各種ブロックリストに載り続けることです。サイトを復旧してもブラックリストの削除申請には数週間かかり、その間に検索流入と購読者の信頼が同時に消えていきます。
WPCodeとは何か——「functions.phpを触らずに済む」ためのプラグイン
WPCodeは、WPBeginnerのSyed Balkhi氏が2011年に作ったコードスニペット管理プラグインです。Google AnalyticsのタグやFacebook Pixel、独自のPHPコードといった「テーマのfunctions.phpに書き足すと面倒なもの」を、WordPress管理画面のフォームから登録するだけで挿入できる定番ツール。当初は「Insert Headers and Footers」という素直な名前で、2022年に「WPCode」へ改名しています。
WordPress公式プラグインディレクトリの表記では「Active installations 3+ million」、Wordfenceの数字では「2 million websites」が使われています。32ロケールに翻訳済みで日本語版も整備されており、日本国内のWordPressサイトでも採用例が多い部類の人気プラグインです。
いま使っているWordPressサイトに導入されているかは、管理画面の「プラグイン」一覧で「WPCode」または「Insert Headers and Footers」の表記を探せば確認できます。
攻撃成立の条件——「投稿者を1人でも引き入れたら詰む」設計
CVE-2026-8832の本体は、コードスニペットを作成・編集する処理に対する権限チェックが甘く、Author(投稿者)レベルの権限しかないアカウントからも、本来は管理者だけが触れるはずのPHPスニペット作成APIが叩けてしまうことです。WordPressのAuthor権限は「自分の記事を投稿・公開できる」ところまで、サーバー側のコードを書ける権限ではありません。それがバイパスされて任意PHPの実行に至る、というのが今回の構造です。
CVSS 8.8の内訳は AV:N / AC:L / PR:L / UI:N / S:U / C:H / I:H / A:H(この8.8はWordfence/NVDの評価で、WPScanは同じ穴を7.2と採点しています)。ネットワーク経由、攻撃複雑度低、必要権限「低」、ユーザー操作不要、機密性・完全性・可用性すべて高インパクト。必要権限が「低」(Author 以上)というのが、このCVEの厄介な部分です。「未認証ではない」ので一見ハードルがあるように見えますが、WordPressのAuthor権限は次のような場面でいつの間にか持たれているケースが少なくありません。
- 外注ライターや寄稿者を招き入れる時に、深く考えずに付与してしまうデフォルトの権限
- 会員制サイトで「自分のプロフィール記事を書ける」目的で配布される権限
- 他のプラグインや認証バイパス脆弱性で乗っ取られた一般ユーザーアカウントが、何かの拍子に昇格していたケース
- 古いプラグインのフォーム経由で勝手に作られてしまったゴーストアカウント
攻撃経路にはXML-RPCも含まれており、WordPressのxmlrpc.phpを無効化していないサイトでは、管理画面のログインを経由せずにこのコードインジェクションへ到達できます。WordPress標準でxmlrpc.phpを塞ぐ運用は意外と浸透していないので、ここも見落としやすいポイントです。
自分のサイトが影響を受けているか1分で確認する3つの方法
いま動いているWordPressサイトでWPCodeのバージョンを確認する方法を3つ並べます。管理画面が開けるなら方法1、サーバーにSSH/コマンドで入れるなら方法2、何らかの理由で管理画面が開けない場合は方法3でございます。
| 方法 | 手順 | v2.3.6以上ならOK |
|---|---|---|
| 1. 管理画面 | wp-adminにログイン → 「プラグイン」>「インストール済みプラグイン」 → 「WPCode」または 「Insert Headers and Footers」の バージョン表記を確認 | パッチ済み |
| 2. WP-CLI | wp plugin get insert-headers-and-footers --field=versionをサーバー上で実行 | パッチ済み |
| 3. ファイル直接 | wp-content/plugins/insert-headers-and-footers/ihaf.phpを開き先頭の Version: 行を確認 | パッチ済み |
バージョンを確認したうえで、サイト構成によってリスクの高さがどれくらい違うかを大まかに整理すると以下のようになります。同じv2.3.5以下を動かしていても、外部から到達可能なAuthorアカウントの数とXML-RPCの状態でリスクは大きく変わります。
| あなたのサイトの状態 | リスク | 優先度 |
|---|---|---|
| v2.3.5以下 + 外注Authorあり + XML-RPC有効 | 高 | 速やかに更新+棚卸し |
| v2.3.5以下 + 外注Authorあり + XML-RPC無効 | 中〜高 | 速やかに更新 |
| v2.3.5以下 + Author自分のみ + XML-RPC無効 | 中 | 早めに更新 |
| v2.3.6以上 (最新は2.3.8) | 低 | 不審なスニペットの 有無のみ確認 |
XML-RPCの状態は、サイトURLの末尾に /xmlrpc.php を付けてブラウザでアクセスした際に「XML-RPC server accepts POST requests only.」と表示されたら有効、404やアクセス拒否なら無効です。Author以上のユーザー数は、WordPress管理画面の「ユーザー」>「ユーザー一覧」で役割フィルタを使えば確認できます。
対処法——v2.3.6に上げるか、author権限を棚卸しする
WPCode開発元は2026年5月にバージョン2.3.6を公開しました。changelogには「Tweak: We added extra permission checks around snippet creation and editing to ensure only authorized users can make changes.」と明記されており、これが本CVEの修正に該当します。その後も2.3.7・2.3.8と更新が続いているので、いま上げるなら最新の2.3.8にしておくのが確実です(下表の「v2.3.6以降に更新」は2.3.8を含みます)。
対処は以下の順で確認するのが現実的です。
| 優先度 | 作業 | 確認方法 |
|---|---|---|
| 1 | WPCodeをv2.3.6以降に更新 | 管理画面のプラグイン一覧で バージョン表記を確認 |
| 2 | Author以上の権限を持つ ユーザー一覧を棚卸し | 「ユーザー」>「ユーザー一覧」で 役割フィルタを「Author」「Editor」「Administrator」 |
| 3 | XML-RPCを使っていなければ無効化 | プラグイン「Disable XML-RPC」 または .htaccessでの遮断 |
| 4 | 不審なPHPスニペットが 追加されていないか確認 | WPCode管理画面の 「Code Snippets」一覧で更新日順にソート |
サイトの自動更新を有効にしている場合は、すでにv2.3.6への更新が走っている可能性があります。それでも、棚卸しと不審スニペットの確認は手動で一度やっておく価値があります。攻撃が成立すると、攻撃者は「いまもサイトを乗っ取り続けるための裏口」をスニペットとして埋め込んで、その後v2.3.6に更新されても裏口は残るためです。
WordPressの「権限分離」の脆さがまた出た
WordPress本体には「Administrator / Editor / Author / Contributor / Subscriber」という5段階の権限ロールがありますが、プラグインが独自に追加する機能はこの権限境界を必ずしも守ってくれません。今回のWPCodeの不具合は、PHPコードスニペットの作成・編集APIに対する権限チェックが緩く、Authorに対しても通ってしまっていた、という単純なミスです。
構造的には、5月19日にWordPress.orgで一斉閉鎖された「Login with OTP」(CVE-2026-8760)や「Firebase Support & Chat Management」(CVE-2026-8787)と同種の問題、つまり「プラグインが独自APIで権限境界を再実装したつもりが、本家の権限ロールと整合していない」というパターンです。違いは規模で、今回は300万サイトの定番プラグインで起きた、という点に重みがあります。
運用側の教訓としては、Author権限の付与基準を改めて見直しておくと、今後この種の「Author以上で成立する脆弱性」が出るたびに対処範囲を絞り込みやすくなります。WordPressの権限ロールは、本体の使い方の前提では十分に細かいのですが、「外注ライターには記事だけ書かせたい」目的にはAuthorは強すぎる場面が多く、必要ならUser Role Editorのような細粒度ロールプラグインで「投稿のみ・公開不可」のような独自ロールを用意するほうが、こうしたCVEに対する耐性は上がります。
緊急度の評価——影響は大、未修正なら早めに更新を
本CVEの緊急度を整理すると、以下のようになります。
| 観点 | 評価 | 補足 |
|---|---|---|
| 影響範囲 | 大 | 300万サイト導入、 日本語ロケール対応済み |
| 攻撃の手軽さ | 中 | Author権限が必要だが、 XML-RPC経由で到達可能 |
| 被害の深刻度 | 大 | 任意コード実行=サイト乗っ取り、 マルウェア配布の踏み台化 |
| 悪用実績 | 確認なし (2026-07-23時点) | KEV未登録、 大規模な実環境悪用の報告なし |
| 攻撃ツールの公開 | あり | 第三者がGitHubで 動作する攻撃ツールを公開済み |
公開から約2か月がたち、パッチの差分から攻撃手法を割り出す準備段階はすでに過ぎています。第三者がGitHubで動作する攻撃ツールを公開済みで、WordPressの管理画面ログインへの総当たりでAuthor権限のアカウントを取得→XML-RPC経由でコードインジェクション、という攻撃チェーンは、いつ自動化されてもおかしくない状態です。300万サイトという母集団の広さを考えると、未修正のサイトが自動化された大規模スキャンの対象になる前提で動くべきです。
運用者は、自動更新が有効ならまずバージョンを確認し、無効なら2.3.6以降(現在の最新は2.3.8)への手動更新を早めに済ませることを推奨します。緊急度の体感としては「影響は大」で、IBM 2026年5月のWebSphere RCE(CVE-2026-8633)のような「未認証ネットワーク経由」のCVSS 9.8級ほどではないものの、影響規模では引けを取りません。
なお、2026年7月に「WordPressのRCE(サーバー上で任意コードを実行される穴)が実際に悪用されCISAのKEVに登録された」というニュースが流れましたが、あれはWordPress本体側の別の脆弱性(通称wp2shell、CVE-2026-63030/CVE-2026-60137)で、本記事のWPCodeプラグインの脆弱性とは別物です。混同しないでください。
参照元

堀川 慎
Backend Engineer / AWS / Django / Go