10月21日の夜、自分のサイトを一晩止めました。
理由はPHPの緊急セキュリティ更新です。
同じ日にNode.jsの更新も出ていて、こっちはMacのほうを更新しました。
どっちも「更新しよう」で済む話に見えますが、影響する場所が違います。
PHPは公開中のWordPressサイト。
Node.jsは自分のMacの制作環境。
何を見て、どこまで対処できたのか、急いで残しておきます。
PHPの穴は、ログインしてなくても狙える
PHP公式の10月21日の告知で、CVE-2026-109618とCVE-2026-109619の2件が修正されました。
条件がそろうと、ログインしていない相手がサーバー上でコードを実行できるかもしれない、という内容です。
ひとつはメモリ不足が起きたときの後片付けの問題。
もうひとつは、前のリクエストの内部状態が残ってしまう問題。
管理画面のパスワードを知らなくても狙える可能性がある、というのが一番ひっかかりました。
修正版は8.5.12、8.4.27、8.3.36、8.2.35。
PHP 8.1以前は本家のサポートがもう終わっているので、直るかどうかはサーバー会社しだいです。
しかも公式いわく、設定変更だけで完全に防ぐ方法はない。
WordPressをメンテナンスモードにしても、PHPが動く入口は残ります。
つまり、実際に動いているPHPを修正版にするしかないんです。
修正が届くまで、サイトを503で止めた
自分のサイトはXserverのWordPressで、PHP 8.3です。
告知のすぐあとに確認したら、コマンドから見たPHPもWebで動いているPHPも8.3.35。
修正版の8.3.36じゃない。
Xserverの更新を待つ間どうするか、ちょっと迷いました。
サイトを止めると、その間は誰も記事を読めません。
でも、穴が開いたまま開けておくほうがこわい。
なので21日の夜、サイト全体を503で止めることにしました。
WordPressの「メンテナンス中」画面ではなく、PHPに届く前にWebサーバーが503を返す設定です。
トップページだけじゃなく、管理画面やindex.phpも503になるのを確認しました。
翌22日の朝、コマンド側もWeb側も8.3.36になったのを確認。
設定を元に戻して、トップや記事が表示されるのを見てから再開しました。
止めていたのは一晩だけです。
ひとつ、思わぬところに影響がありました。
止めている間にGoogle AdSenseがサイトを見に来たらしく、管理画面に「サイトの停止または利用不可」と出ていたんです。
なのでもう一回審査を申請しました。
サイトを止めると、読者だけじゃなく外のサービスからも「止まってる」と見られる。
当たり前なんですけど、実際に出るまで頭になかったです。
公開ファイルやWordPress本体も、見られる範囲で不審な変更がないか点検しました。
ただ、アクセスログはまだちゃんと見られていません。
Xserverの管理画面がこの日は止まっていたので、再開したら確認します。
なので「侵入はなかった」とはまだ言い切りません。
Node.jsはMacで22.23.4に
同じ21日、Node.jsにもセキュリティ更新が出ました。
自分はNode.jsをMacでのサイト制作や、画像・動画づくりに使っています。
サイトを動かしているPHPとは役割が別です。
22系の修正版は22.23.4。
DNSまわり、TLS証明書の確認、圧縮データの処理など、直った問題は複数あります。
圧縮データ(Brotli)の問題には、リモートでコードを実行されうるものも入っていました。
証明書の信頼リストも更新されていて、先日気になっていたeMudhraの中間CAの件もここに含まれます。
これはPHPの2件とは別の話です。
Macでは、nvmで入れているNode.jsを22.23.3から22.23.4にしました。
ダウンロードのチェックサムが一致するのを確認して、新しく開いたターミナルでnode -vがv22.23.4になるのも見ています。
やってみて分かったこと
一番大事だったのは、ニュースのバージョンと「自分のサイトで今動いてるバージョン」を別々に確かめたことです。
コマンドで見たPHPと、Webで動いてるPHPが同じとは限らない。
なので両方見ました。
サーバー会社の「対応しました」を待つだけじゃなく、自分で見える範囲は自分で測る。
止めるかどうかも、測った数字で決める。
今回はそれで一晩止めて、朝に戻せました。
残っているのは2つ。
Xserverのログ確認と、ローカル開発用のMAMPです。
MAMPは古いPHPのままなので、今は止めてあります。
再開する前に更新方法を調べます。
WordPressを運用しているなら、まずはサーバー会社のお知らせと、サイトで動いているPHPのバージョンを見てみてください。
Node.jsを使っている人は、ターミナルでnode -vを打てばすぐ分かります。