まったり技術ブログ

Webエンジニアのセキュリティブログ

【WordPress】CVE-2020-25286 "最近のコメント"から保護されているコメントの閲覧可能

はじめに

 本記事では先日(2020/9/13)に公表された WordPress 本体の脆弱性である CVE-2020-25286 について簡単に調べてみました。

 まずNVDには CVE-2020-25286 について下記の説明があります。

In wp-includes/comment-template.php in WordPress before 5.4.2, comments from a post or page could sometimes be seen in the latest comments even if the post or page was not public.

 この説明から「公開されていない記事・固定ページのコメントが閲覧される脆弱性」であることが分かります。

 本記事では、どのような条件下で脆弱性が再現するのかを確認していきます。

CVSS 3.1 (Base Score: 5.3)

 ちなみに本脆弱性の CVSS はこのような評価となっています。

 システムへの影響は 機密性 のみです。
漏れる可能性があるのはコメントだけですので 低 と評価されています。

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

攻撃元区分(AV:Attack Vector) ネットワーク(N)
攻撃条件の複雑さ(AC:Attack Complexity) 低(L)
必要な特権レベル(PR:Privileges Required) 不要(N)
ユーザ関与レベル(UI:User Interaction) 不要(N)
スコープ(S:Scope) 変更なし(U)
機密性への影響(C:Confidentiality Impact) 低(L)
完全性への影響(I:Integrity Impact) なし(N)
可用性への影響(A:Availability Impact) なし(N)

脆弱性の確認

 検証で利用する WordPress のバージョンは 5.4.1 です。ちなみに修正版は 5.4.2 です。

下準備

 WordPress 5.4.1 を下記のサイトからダウンロードし、展開します。 Release Archive | WordPress.org 日本語

 WordPressの自動更新を無効化するために、ディレクトリ直下にあるwp-config.phpを開き下記の一行を追加します。
この設定がないと自動的に修正版にアップデートされてしまいます。

define( 'AUTOMATIC_UPDATER_DISABLED', true );

 そしてサイトにアクセスし、初期設定(DB設定、管理ユーザ設定、サイト設定)を完了させます。

脆弱性の再現手順

 ここからは脆弱性を再現させるために、「パスワード保護された記事(= 公開されていない記事)の作成」と「その記事に対してのコメント書き込み」を行っていきます。

1. パスワード保護の記事を作成

 管理者アカウントでパスワード保護された記事を作成します。
「秘密の記事」というタイトルで作成します。

 右サイドバーからパスワード保護の有無の設定ができますので、「表示状態:パスワード保護」の状態で公開します。

2. 【攻撃】パスワード保護された記事へコメントを書き込み

 「1.」で作成した記事へアクセスして、パスワードを入力する必要があることも確認します。

 パスワードを入力して、記事が表示されたらコメントを書き込みます。

 「⚠️これは秘密記事へのコメントです⚠️」とコメントを書き込みました。
このコメントはパスワードを知っている人のみが閲覧できるものです。脆弱性が再現することでこのコメントが誰でも見れる状態になってしまいます。

3. 未認証ユーザでコメントの確認

 次は、未認証のユーザでパスワード保護された記事へアクセスしてみます。

 このユーザはパスワードを知らない前提ですので、記事を表示させることもできなく、「2.」で書き込んだコメントも閲覧することはできません

この脆弱性は このようなパスワード保護されたコメントが表示されてしまう脆弱性 となっていますが、どこに表示されるのでしょうか?

 NVD の説明にこの記載があり、"最新のコメント"部分に表示されることが分かります。

seen in the latest comments

 "最新のコメント"は下部のウィジットに表示されるはずだったので確認してみます。

 しかし、公開されている記事と共にコメントの内容の表示はありませんでした

4. 「最新のコメント」ブロックを追加

 少し調べてみると記事本文中に「最新のコメント」ブロックを追加できることが判明したので、このブロックを公開記事である「Hello world!」というタイトルに追加します。

 この記事は公開記事なので誰でも記事の内容を閲覧することができます。

 追加するとした下画像のようになりました。

 先ほど確認した"最新のコメント"と異なりコメントの内容も表示されていることが分かります。

 この状態で公開します。

5. 【被害の確認】未認証ユーザでコメントの確認

 未認証ユーザで先ほど編集した「Hello world!」へアクセスします。
前にも記載しましたが、この記事は誰でも内容を閲覧することができます。

 記事の内容には最近のコメントの一覧が表示されるようになっており、その中にはパスワード保護された記事に書き込んだコメントの内容も表示されてしまっています
(⚠️これは秘密記事へのコメントです⚠️という内容が見れてしまっています)

 脆弱性があることでこの事象が再現しました。

 最後にパッチを当ててこの事象が再現しないことを確認します。

6. 修正版にアップデード

 パッチを当てるために、Wordpressを現時点の最新版(5.5.1)にアップデートします。

 アップデートが完了したら、再度未認証ユーザで先ほどの記事にアクセスし、コメントの内容を閲覧できるか確認してみます。

 パスワード保護された記事のコメントには「パスワード保護」と表示されるようになり、元のコメントが閲覧できなく脆弱性は修正されたことが確認できました。

 この脆弱性の修正内容を確認してみても、パスワード保護されている記事のコメントはダミーテキストを表示するようにしていることからこの挙動は正しそうです。

まとめ

 一覧に表示される情報にも気を配る。普段目にしないような機能なら見逃し注意。
今回のWordPressに限らず、一覧を表示するプラグインなどを利用する場合は意図していなかった情報が表示される挙動があるかもしれないと頭に入れていた方がいいかも。

 本脆弱性は、普段使われない機能(埋め込み「最新のコメント」) + 最新5件(デフォルト) なので、影響を受ける可能性は非常に少ないと思ってたり。

参考

更新履歴

  • 2020年9月29日 新規作成