【脆弱性対策】WordPressの人気記事ランキング表示プラグインの修正方法

本日より、メシオプレス公式サイトにてWordPress関連記事の執筆を
担当することになりました「菊池」と申します(プロフィールはこちら)。
正確にわかりやすくお届けしていきますので、よろしくお願いいたします。

さて、最近Javaの脆弱性やTwitterのセキュリティが問題になっていましたが、
WordPressの人気記事ランキング表示プラグイン「WordPress Popular Posts」
にも脆弱性があるようなので、その対応策を解説しておきます。

WordPress Popular Postsイメージ画像

Javaは緊急性の高い脆弱性があったので使わないほうが安全

先月、Javaに重大な脆弱性が見つかり、話題になりました。
Javaは、マルチプラットフォームなどの特徴を持ち、
様々なジャンルで幅広く利用されているプログラミング言語なので影響範囲も広い上、
今回の脆弱性は緊急性の高い危険なものだったため、大きなニュースになりました。

このレベルの脆弱性は放置しておくと、
個人情報の漏洩や悪意のあるソフトウェアを実行されたりする危険性があるので、
緊急に対策する必要があります。

開発元であるOracle Corporationから、
今回の問題に対応した修正ファイルが配布されましたが、
この修正にも脆弱性があるという発表もありました。
(参考:Java最新版に新たな脆弱性情報

すでに修正済ですが、Javaには去年の9月にも緊急性の高い脆弱性が見つかっています。
(参考:Javaに新たな脆弱性、全バージョンに影響か[2012年9月]

状況的に今後もこのような脆弱性がでてくる可能性があるので、
よほど必要でない限り、
Javaはアンインストールしてしばらく様子を見るのが安全でしょう。

ちなみにJavaと名前が似ているので勘違いされている人もいますが、
「Javascript」はJavaとは別物なので、今回の問題には全く関係がありません。

WordPress Popular Postにも脆弱性が見つかっています。

脆弱性の問題はJavaだけでなくあらゆるプログラムで起こりえます。
Wordpressでも、人気記事を表示するために使われているプラグイン、
「WordPress Popular Posts」に対応が必要な脆弱性が見つかっています。

WordPress Popular Postsでサムネイルを表示している方は要注意! | PLUS

以前から第三者が任意のコードを実行できてしまう脆弱性が指摘されていた、
「timthumb.php」という画像をリサイズする機能等を持つライブラリが、
「WordPress Popular Posts」で使用されているのが原因です。

対応方法として一番簡単なのはプラグインを削除することですが、
「WordPress Popular Posts」は優秀なプラグインなので、
できれば使い続けるようにしたいという人も多いと思います。

そこで今回は、WordPress Popular Postsを使用したまま、
問題の「timthumb.php」のみを削除して
timthumb.phpの脆弱性から身を守る方法をご紹介します。

WordPress Popular Postsの脆弱性対策方法

参考にさせていただいたのは下記のブログです。

[Я]Wordpress Popular Postsでカテゴリ毎の人気記事ランキングを作る : りくまろぐ

※今回の修正方法はソースコードを直接編集します。
必ずバックアップをとり自己責任での編集をお願いします。

管理画面からプラグインを選択し、「WordPress Popular Posts」の編集画面を開きます。

WordPress Popular Posts編集画面

そして、出てきたソースコードの下記の部分。
[html firstline=”1078″]$thumb .= "<img src=\"". $this->pluginDir ."/timthumb.php?src={$path}&h={$tbHeight}&w={$tbWidth}\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" alt=\"{$title}\" border=\"0\" class=\"wpp-thumbnail wpp_fi\" />";[/html]

これを下記のように修正します。
[html firstline=”1078″]$thumb .= "<img src=\"{$path}\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" alt=\"{$title}\" border=\"0\" />";[/html]

この変更点にある、「tbWidth」「tbHeight」は、
それぞれウィジェットの設定で設定したサムネイル設定の横幅・縦幅なので、
表示されるサムネイルはウィジェット設定画面で設定したサイズが反映されます。

このあとFTPで、/wp-content/plugins/wordpress-popular-postsフォルダにある、
「timthumb.php」を削除してしまえば、
脆弱性の対応としても動作的にもひとまず問題はありません。

類似コード「~wpp-thumbnail wpp_fp」は何なのか調べてみた

しかし、よく見ると1089行目にも同じようなコードがあります。
[html firstline=”1089″]$thumb .= "<img src=\"". $this->pluginDir ."/timthumb.php?src={$path}&h={$tbHeight}&w={$tbWidth}\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" alt=\"{$title}\" border=\"0\" class=\"wpp-thumbnail wpp_fp\" />";[/html]

1078行目との違いは、最後の方の一文字(iとp)だけですね。

1078行目: class=\”wpp-thumbnail wpp_fi\”
1089行目: class=\”wpp-thumbnail wpp_fp\”

「wordpress Popular Posts」のコードを確認したところ、
これはどちらもCSSのクラスを指定していて、
表示されるサムネイルのデザインが変わるだけのようです。
念のため、これらデザインのどちらが選択されるかを調べてみます。

wordpress Popular Postsは、
インストールと同時に「wp_options」というWordpressのデータベーステーブルに、
「wpp_settings_config」という名前のレコードを作成します。

そこにデフォルトの設定を保存するようになっているのですが、
そのレコードの「source」という項目が「featured」になっていると1078行目、
「first_image」になっていると1089行目の処理が実行されることがわかりました。

WordPress Popular Postsデータベース画面

つまり、1089行目も修正しないとエラーが発生する可能性があります。

WordPress Popular Postsの設定画面から「Tools」をクリックすると、
sourceを「Featured image」にするか「First image」にするか選択できます。

WordPress Popular Postsの設定画面2

もし、timthumb.phpを削除した後に1089行目を修正せず、
「First image on post」を選択してしまうと、
存在しないファイルを呼びだそうとしてPHPがエラーを吐き出す可能性があります。

一応デフォルトで「Featured image」が選択されていますが、
今後、この部分を変更しないとも限りませんので、
1089行目も1078行目と同じように修正しておくと安全でしょう。

ちなみに、これ以外の対応策として
「timthumb.php」を使用しているプラグインを検索するツール、
Timthumb Vulnerability Scanner」を使用して、
「timthumb.php」をアップデートするというものがありました。

そこで、この方法も確認してみましたが、
アップデート後も下記サイトで指摘があった脆弱性部分がそのまま残っているようでした。
Vulnerability Found in timthumb.php

ですので、timthumb.phpのアップデートではなく、最初にご紹介しました
「timthumb.phpを削除する方法」での修正対応をおすすめします。

●本日のまとめ
Wordpressの人気記事表示プラグインである「WordPress Popular Posts」は
コードを2箇所修正してtimthumb.phpを使用しないようにすれば、
脆弱性の恐れもなくなり、今後も安心して使用できる。