WordPress でアップデートがあり、最新版 5.4.1 が公開されました。このリリースにはいくつかの脆弱性改善がありますので、今すぐ更新が必要です。今回はその中の一つ、
Props to ka1n4t for finding an issue where certain private posts can be viewed unauthenticated
を取り上げます。

何が問題だった?
WordPress5.4以前では、特定の条件で、非公開記事がログインしなくても閲覧できる、という脆弱性がありました。この記事を執筆している時点(5月2日午前8時)では、条件の詳細は公開されていませんが、こちらで検証すると、少なくとも以下の状態だと発生しました。
パーマリンク設定を日時だけにしている(= ID・スラッグなど一意にする項目が無い) AND 同じ日時で、公開記事と非公開記事を投稿する
パーマリンク設定は、通常は投稿IDやスラッグなどを入れて、記事が一つだけ選ばれるようにするのですが、
/%year%/%monthnum%/%day/%hour%%minute%%second%/
のように、日時だけでもWordPress5.4以前は動いていました。このパーマリンク設定(日時だけの設定)だと、情報漏洩が起こり得ます。
非公開記事はログインしないと見れない
WordPressでは、投稿を非公開にすることができます。ログインしたユーザーだけ見ることができる記事を作成できます。この場合、ログインしていない人がその記事を閲覧しようとしてもnot found となります。
ブラウザ2つをキャプチャした画像の、左側はログイン状態。右側は非ログイン状態です。
これが、望ましい状態です。
パーマリンク設定が日時だけの場合
では、「パーマリンク設定を日時だけにする」「同じ日時で、公開記事(投稿A)と非公開記事(投稿B)を投稿する」場合を調べてみます。
この場合は、「投稿Aは非ログインでも見える、投稿Bは非ログインだと見えない」が本来は期待されています。

- 投稿AのURLを見に行くと投稿Aの内容を閲覧できる
- パーマリンク設定が日時なので、投稿Aも投稿Bも同じURL
- 投稿B(非公開記事)の内容も閲覧できる
という結果になりました。
キャプチャ画像は、バージョンアップする前のWordPressをローカルにインストールし、無線LANを無効化した状態で撮影しています。
5.4.1で改善された
この脆弱性に対して、WordPress5.4.1では、日時だけのパーマリンク設定を認めない、という変更により対処されました。WordPress5.3.3等、以前のバージョンにもアップデートが行われています。(以前のバージョンでは、「日時だけのパーマリンク設定をしないように」という説明はあるものの、動作自体はしていた)
なので、バージョンアップすれば、この脆弱性には対処できることになります。WordPressフォーラムではバグ報告カテゴリーに「wordpress 5.4.1 からの障害について」が投稿されていますが、脆弱性修正と思われます。
日時だけのパーマリンク設定をしていた場合は設定変更が必要
WordPress5.4.1のバージョンアップでは、日時だけのパーマリンク設定を認めないようになりました。しかし、日時だけのパーマリンク設定をしていた場合に、パーマリンク設定を初期化はしないようです。このため、WordPressの管理画面から、パーマリンク設定を変更する必要があります。
日時だけのパーマリンク設定から変更しないままだと、許可されていないパーマリンク設定のため、ウェブサイトが正しく表示されなくなります。
まとめ
- WordPress5.4.1は脆弱性対策アップデート
- 「日時だけのパーマリンク設定」だと情報漏洩リスクがあり、バージョン5.4.1で改善された
- 「日時だけのパーマリンク設定」にしていた場合は、アップデート後にパーマリンク設定変更する必要がある
