timthumb.phpの脆弱性について

プロバイダから、脆弱性のあるコードが見受けられるので、対処するようにと連絡が来た。問題なのは、timthumb.php。少し調べてみたのでその覚え書き。

WordPressの画像サイズ変更ユーティリティ「timthumb.php」には2011年8月に発見された脆弱性が存在する。この脆弱性は、リモートからtimthumbのキャッシュディレクトリに任意のPHPコードをアップロードし、実行できてしまうというもの。
timthumb.phpは非常に便利なユーティリティコードなので、Wordpressのテーマやプラグインに広く使われている。そのため、被害が拡大しつつある。脆弱性が発見された当初は、timthumb.phpの作者のサイトもやられている。

【脆弱性に関するレポート】

(ニュースリリースなど(英語))

(ニュースリーリースなど(日本語))

【対応方法】
何通りかの方法がでている。
この脆弱性は、基本的にゼロデイ攻撃で行われるので、対処してしまえば問題なし。対処前にすでに攻撃されてしまっている場合(バックドアとか仕掛けられている)は、対処しても手遅れ。

  1. timthumb.phpが「現在使用していないテーマ」や「現在使用していないプラグイン」に含まれる場合:該当テーマやプラグインを削除する。
  2. timthumb.phpを利用しているテーマの配布元が、 脆弱性に対応したバージョンを提供している場合:該当テーマの最新版へのアップデートをおこなう。
  3. 上記に該当しない場合や個別対応を行う場合:専用のプラグイン(timthumb vulnerability scanner)を用いてTimThumbスクリプトの設置状況確認および最新化をおこなう。または、timthumb.php自体を書き直す。

(3)の場合の手順

基本は、Wordpressのプラグインであるtimthumb vulnerability scannerを使って、自分のサイト内にあるtimthumb.phpを探し、安全版(修正済み版)にアップデートする。

アップデートなどができない場合、あるいは書き直す場合は以下の通り。

(古いヴァージョン(ver1.33)を書き直す場合)
*脆弱性が発見されて直ぐ発表された方法。当時の最新版である1.33用の修正方法。修正版が出る前の方法。

  1. 自分のディレクトリ内のtimthumb.phpを探す
  2. テキストエディタでを開く
  3. 27行目の $allowedSites = array (  の文を見つける
  4. ( )内に記述されているサイトのドメイン名を全部削除し $allowedSites = array();  に変更する
  5. 次行の28行目が空白行で、29行目が  STOP MODIFYING HERE となっているはずなので、保存して終了

(現在の一般的な方法)
問題が発覚してまもなく修正済みのバージョンが出た。これが2.0。従って、古いヴァージョンのtimthumb.phpを使っている人は、2.0にヴァージョンアップするようにアナウンスされている。

その上で、外部サイトの画像を引用して使わない人は、ソーススクリプトの中の下記のところを書き直すように、2.0が発表された当時はアナウンスされた。

これにより、外部サイトからの画像読み込みはできなくなる。その機能が必要な人は、別のphpをつかうという選択肢もあるが、最新版のtimthumb.phpでは解決しているかも?(2012.3.16時点でver 2.8.10までアップグレードしている)(プラグインであるtimthumb vulnerability scannerでは、ver2.8.2〜2.8.5が安全が確認された版であるとしている(2012.3.16時点))。

(timthumb.phpの中のコードを修正する方法;外部サーバーからの引用機能をオフにする)
(1)ALLOW_EXTERNAL True から false へ書き直す
[php]
define( ‘ALLOW_EXTERNAL’, true );
[/php]
↓ 書き直す
[php]
define( ‘ALLOW_EXTERNAL’, false );
[/php]
(2)外部サーバーのリストを空にする。
[php]
$allowedSites = array (
‘flickr.com’,
‘picasa.com’,
‘img.youtube.com’,
‘upload.wikimedia.org’,
);
[/php]

↓ 書き直す
[php]
$allowedSites = array();
[/php]

「timthumb.phpの脆弱性について」への1件のフィードバック

コメントは停止中です。