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は非ログインだと見えない」が本来は期待されています。

実際に試してみました。
  1. 投稿AのURLを見に行くと投稿Aの内容を閲覧できる
  2. パーマリンク設定が日時なので、投稿Aも投稿Bも同じURL
  3. 投稿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で改善された
  • 「日時だけのパーマリンク設定」にしていた場合は、アップデート後にパーマリンク設定変更する必要がある
アップデートは自動で行われるけど、パーマリンク設定は自動では変更されないよ。
記事公開日: 2020年05月02日