【雑記】WordPress の緊急パッチを横目に、静的サイトへ移しておいてよかったと思った話

WordPress の緊急パッチが降ってきた週末、自分のサイトでやった作業はゼロでした。

バージョン確認すらしていません。そもそも WordPress が無いので。

セキュリティ速報のほうを先に書いたのですが、書いている途中で「あ、これ自分は何もしなくていいんだ」と気づいて、少し変な気持ちになりました。

4ヶ月前に Astro へ移していたおかげです。

ただ、移行した動機はセキュリティではありませんでした。そこも含めて書きます。

何が起きていたのか

ざっくり書くと、WordPress コアだけで未認証のリモートコード実行ができる脆弱性が見つかりました。通称 wp2shell。

REST API の batch エンドポイントに認証バイパスがあり、そこから SQL インジェクションにつなげると、ログインせずに管理者ユーザーを作れてしまう。プラグインは要りません。素の WordPress で成立します。

修正版が出たのが2026年7月17日で、数時間後には PoC が GitHub に並び、週末には実際の攻撃が観測されました。金曜に出たパッチが週末を挟むという、運用する側からするといちばん嫌なパターン。

詳しい影響範囲やログの見方は速報記事のほうに書いたので、ここでは省きます。

自分のサイトは何もしなくてよかった

このサイトは Astro の静的ビルドで、Cloudflare Pages から配信しています。

記事は Markdown ファイルで、ビルドすると HTML が出来上がる。あとはそれを置いているだけです。

PHP が動いていません。データベースもありません。管理画面もありません。/wp-json/batch/v1 を叩いても、そこには何も無い。

攻撃面がどうこう以前に、攻撃の対象になる仕組みが1つも存在しないという状態です。

こういうとき、静的サイトは強い。

でも、セキュリティのために移したわけではない

正直に書いておくと、移行の理由はもっと情けないものでした。

ある日突然サイトが開かなくなって、「このサイトで重大なエラーが発生しました」の画面が出たからです。

Sponsored

原因はメモリ不足とテーマの問題でした。何のリリースもしていないのに勝手に落ちた WordPress に嫌気がさして、その勢いのまま Astro へ全面移行した、というのが実際のところ。

つまり今回の「何もしなくてよかった」は、完全に結果論です。

セキュリティを考えて先手を打っていたわけではなく、別の理由で逃げた先がたまたま安全だっただけ。ここを「静的サイトに移したおかげで守れました」と書くと、話がきれいになりすぎるので。

WordPress 時代に気にしていたこと

WordPress を運用していた頃、REST API まわりはそれなりに気にしていました。

2025年に、ユーザ API のエンドポイントを閉じる話を書いています。

/wp-json/wp/v2/users にアクセスするとユーザー一覧が丸見えになる、という話で、rest_endpoints フィルタで潰す対応を紹介したやつです。

今回の wp2shell も、入口は REST API でした。しかも侵害後の挙動として観測されているものの中には、まさにその /wp-json/wp/v2/users?context=edit へのアクセスが含まれています。

1年以上前に閉じておいた場所を、今また同じ方向から殴られている。

WordPress の攻撃面って、けっこう同じところに居続けるんだなと思いました。

静的サイトなら安全、という話ではない

ここで終わると気持ちのいい記事になるのですが、そうもいきません。

攻撃面は消えたのではなく、移動しただけです。

WordPress を捨てた代わりに、このサイトは npm の依存関係とビルドパイプラインを抱えることになりました。そして、その領域では実際に事故が起きています。

axios が乗っ取られたのが2026年3月末、TanStack が5月。半年足らずで、自分のサイトで速報を2本書いています。どちらも「自分が使っているかもしれない」側の事件でした。

Sponsored

サーバー上で動く PHP を心配しなくてよくなった代わりに、npm install した瞬間に何が走るかを心配することになった。運用の重さがゼロになったわけではありません。

違うのは、事故ったときに何を失うかです。WordPress が乗っ取られると、公開中のサイトそのものが攻撃者のものになります。ビルド環境が汚染された場合、まずやられるのは手元の認証情報で、そこから公開物に波及する。順番も対処も変わってきます。

どちらが軽いかは、正直、抱えているものによると思っています。ただ自分の場合は、24時間インターネットに晒されている PHP を持たなくて済むほうが、精神的にだいぶ楽です。

減ったものと、増えたもの

移行して減ったのは、プラグインの更新確認、テーマの互換性チェック、コア更新のたびの動作確認、そして今回のような緊急パッチ対応です。

公開の手順も変わりました。今は記事を Markdown で書いて PR を出し、main にマージすると Cloudflare Pages が勝手にビルドして公開してくれます。管理画面にログインする作業が、そもそも存在しない。

増えたのは、依存パッケージの更新確認と、Markdown で書くという手間。あとは、思いついたことをスマホからサッと投稿できなくなったこと。

この最後のやつは、人によっては致命的だと思います。エンジニアじゃない人が更新するサイトを Astro に移したら、たぶん更新が止まります。

そこはトレードオフ。自分は Markdown のほうが楽なので気にしていませんが、万人向けの選択ではないなと。

おわりに

移行しましょう、という記事ではありません。

WordPress にはプラグインの厚みも、非エンジニアでも扱える管理画面もあって、それが必要ならそのまま使えばいいと思います。

ただ、動的なものを持ち続けるなら、金曜の夜に critical のパッチが降ってくる前提で運用を組む必要はあります。自動更新を有効にしておくのはもちろん、それが本当に成功したかを確認する経路も用意しておく。今回のように週末を挟むパターンだと、月曜まで気づかない構えだと普通に間に合いません。

自分はその覚悟が続かなかったので、静的サイトに逃げました。

逃げた先で npm の心配をしているので、結局どこかで何かを心配することにはなるんですけどね。