CVE-2018-6389 WordPressにDoSの脆弱性があるとされる情報とその対処方法について

海外のサイト及び日本のいくつかのサイトでも取り上げられていますが、WordPress本体にDoSの脆弱性がある(ところで「DoSの脆弱性ってなんか違和感あるんですがどういう言い方が正しいの?笑)との情報が流れております。

日本語での情報は以下が詳しいですね。

http://knqyf263.hatenablog.com/entry/2018/02/07/103705

先に書いておきますが個人的には慌てるような内容ではないと思っています。ためしに僕の個人のブログではほっときます。w

脆弱性の概要

WordPressの管理画面では膨大な数のCSSやJavaScriptファイルを使用しており、これらのTCP接続のオーバーヘッド等をおさえるために wp-admin/load-(scripts|styles).php というURLでひとまとめにして出力するようにしています。

これは引数に渡された jquery-core とか dashicons とかのキーワードを元にそれらに該当するファイルを探して、一つにまとめるということをしています。

WordPressのプラグインを開発したことがあるなら wp_enqueue_script() という関数を使用したことがあると思いますが、上でいうキーワードとはこの関数に渡す第一引数の  $handle  と同意であると言うとわかりやすいかもですね。

この、wp-admin/load-(scripts|styles).php は、ユーザー認証等を通っていないこと、引数に渡された $handle に一致されるものがあれば、それらすべてを読み込もうとすることなどの理由により、この引数に膨大な数の $handle を渡すことで、このスクリプトの負荷を増大させ、結果的に DoS 攻撃が可能になるというのが CVE-2018-6389 の趣旨です。

ただし、あくまでも  wp_enqueue_script()wp_enqueue_style() で定義されたスクリプトやCSSのみを読み込みに行くだけなので(WordPress本体のデフォルトでは181個?)、無制限にたくさんのファイルをよみこめるわけではありません。

WordPressコアチームの対応

公式なアナウンスは特になにもないので、これは個人的に見聞きした情報に基づいていますが、WordPressのコアチームはこれを脆弱性とは解釈していません。

以下はあくまでもコアチームの意見ということではありませんが、ディスカッションの中で出てきた意見はだいたい以下のような感じです。

  • これは脆弱性というよりもとんでもなく重い処理が見つかったということだと思う。
  • 今後、Gutenbergの導入等によりJavaScriptへの依存度が高まる中で、そもそもこの仕組を抜本的に考え直す必要がある。

とはいえ、意図せず重い処理を増やされるのはめんどくさいし、かといってCSSやJSのロードに認証をいれると即座にWordPressのデータベースアクセスが増大するし、サードパーティのプラグインとの後方互換性的にも困るし、うーんって感じじゃないかなと思います。

対処方法

攻撃者が手当たり次第に DoS 攻撃をあっちこっちに仕掛けることがあるのかどうかはよくわかりませんが、エンタープライズなサイトではなんらかの対処をしたいということもあるかもしれません。

そこで、対処方法を紹介します。

即座に対応が必要というほどのことでもないと思いますので、対処するならあくまでもオウンリスクでお願いします。

SSL+HTTP/2を導入する

この機会にぜひ。いまどきSSL+HTTP/2を導入することにハードルはなにもないはず!

これができないなら大して重要なサイトでもないはずだからDoS攻撃なんかくらわないんじゃないですかね。

wp-config.php の修正

wp-config.php に以下の行を追加して、CSSやJSの連結を停止しましょう。SSL+HTTP/2 を導入済みであればほとんど実害がないと思います。

define( 'CONCATENATE_SCRIPTS', false );

wp-admin/load-(scripts|styles).php へのアクセス拒否

次に該当するURLへのアクセスをウェブサーバーの設定ファイルで拒否します。

Nginx:

location ~ ^/wp-admin/load-(scripts|styles)\.php {
  deny all;
  break;
}

Apache:

<FilesMatch "load-scripts\.php|load-styles\.php">
  Order allow,deny
  Deny from all
</FilesMatch>

Apacheの場合は、.htaccess に書いてもいいです。

国内のレンタルサーバーについて

日本国内のいくつかのレンタルサーバーでは、WAFを提供しているサービスがあり、WAFをONにしている場合はこの問題の影響をうけないとの情報を得ていますが詳細をまだ確認できておりません。

情報を入手次第詳細を追記していこうと思います。

会員募集中

実はこのやりとりは先にキャッピー会員向けのSlackでやりとりしてたりしました。ブログでは明かされないWordPressの裏の情報を知りたい人はぜひ会員になりましょう!

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください