WordPress 本体に、ログインしていない第三者が更新中の数秒を突いて外部からコードを実行できる脆弱性があります。修正版の 7.1.4 は 10/28(日本時間 29 日の未明)に WordPress.org から公開されました。

今回のリリースは Patchstack の数えで 22 件のセキュリティ修正をまとめたものです。ログインなしで成立するのはこの 1 件と、Customizer の公開前の変更内容が外から見える 1 件。残りは投稿者以上のアカウントを持つ相手が前提なので、上げれば一緒に閉じます。
とはいっても、穴が開くのは更新が走っている数秒の間だけで、Patchstack もこの窓を突く難しさから、現実的に悪用できるとは言わない、という評価でした。それでも窓は自動更新を含む更新のたびに開くので、7.1.3 以下のまま次の更新を走らせるサイトは、その間だけ攻撃対象になります。
https://patchstack.com/articles/wordpress-7-1-4-security-release/
WordPress.org のリリース告知と Patchstack の解説をもとに、やることだけ整理しました。
取るべき対応
- 管理画面の「ダッシュボード」にある「更新」で、WordPress のバージョンを見る
- 7.1.4 なら対応済みです。自動更新が有効なサイトは、10/28 の公開から順に上がっています
- 1 つ前の 7.0 から 6.6 までは、下の表の修正版になっていれば対応済みです
- 更新を走らせる前に、ブラウザで
https://サイトのドメイン/wp-content/upgrade/を開き、ファイルの一覧が出ないことを確かめる- 「Index of」で始まる一覧ページが出たら一覧表示が有効で、Patchstack はこの場所へのアクセスを Web サーバー側で止めることを勧めています。WordPress.org の告知に回避策の記載はありません
- 修正前のバージョンなら、同じ画面の「今すぐ更新」で上げる
- 上げ先は使っている系列の修正版で足ります。6.5 以前の系列は 10/29 時点で修正版が出ておらず、WordPress.org は準備中と案内しています
- レンタルサーバーのパネルや制作会社に更新を任せているサイトは、反映されたかを同じ画面で確かめる
対象者
対象は 7.1.3 以下の WordPress を動かしているサイトです。修正版は下の表のとおりで、6.6 の系列まで出ています。
| 使っている系列 | 修正版 |
|---|---|
| 7.1 | 7.1.4 |
| 7.0 | 7.0.8 |
| 6.9 | 6.9.11 |
| 6.8 | 6.8.12 |
| 6.7 | 6.7.11 |
| 6.6 | 6.6.11 |
| 6.5 〜 4.7 | 10/29 時点で修正版なし(WordPress.org は準備中と案内) |
成立条件は Patchstack の説明に 2 つ。更新が走っている数秒の間に攻撃者がたどり着くことと、wp-content/upgrade/ に Web から到達できることです。自動更新を止めているサイトも、次に手で更新を走らせた瞬間は同じ条件に入ります。外れられるのは、修正版に上げたサイトと、このディレクトリへのアクセスをサーバー側で止めているサイトだけ。
起こったこと
WordPress は本体を更新するとき、新しいパッケージを wp-content/upgrade/ に展開してから本体のファイルを置き換える作りです。この場所は公開ページと同じように Web から見えます。Patchstack によると、展開された WordPress 一式には、本体の設定なしに単体で動くインストーラー(setup-config.php)が入っていました。更新が終わるまでの数秒の間にそこへたどり着いた攻撃者は、自分の用意したデータベースにつないだ状態で、他人のサーバーの中でインストールを走らせられる。ログインは要りません。
深刻度の採点は、10/29 時点でどこからも出ていません。Patchstack は攻撃の難しさを AC:H(攻撃条件が複雑)と置いています。
もう 1 件のログインなしの脆弱性は、Customizer で保存した公開前の変更内容(changeset)が、ログインしていない人のプレビュー要求で読めるものでした。
原因
原因は Patchstack の解説に 3 点書かれています。1 つ目は、展開先のフォルダー名がパッケージ名から決まっていて、予測できました。2 つ目は、展開前の掃除が一覧表示を止める index.php まで消していたこと。3 つ目は、作業ディレクトリに置かれた wp-config.php が本体へのコピーから除かれていなかったことです。7.1.4 はフォルダー名に 16 文字のランダムな文字列を足し、index.php を残して無ければ作り直し、wp-config.php をコピーしないようにしました。


