FCKeditorにファイルアップロードの脆弱性が発見されました

セキュリティ

Geeklogに標準で同梱されているFCKeditorに、ファイルブラウザ経由でファイルの不正なアップロードが可能になる脆弱性が発見されました。本家の記事はこちらからどうぞ。

この脆弱性を悪用すると、Geeklogによるチェックを回避してファイルを直接アップロードすることが可能になりますが、FCKeditorの方でファイルタイプのチェックを行いますので、PHPファイルのアップロードは阻止されます。とはいえ、本来、あってはならない状態です。

影響を受けるGeeklogのバージョンは1.4.1, 1.5.0ですが、他のバージョンでも影響を受ける可能性があります。対策としては、以下の3つのうちのどれかを実行してください。

  1. FCKeditorを全く使用しない場合
    公開領域/fckeditor 以下のディレクトリを削除してください。この場合、「コンフィギュレーション」(Geeklog-1.4.1の場合はconfig.php)で「アドバンストエディタを使用しない」と設定しても対策にはなりません。
  2. ファイルの「アップロード」を使用しない場合
    FCKeditorは使いたいが、ファイルのアップロードを行わない場合は、次のファイルを見つけてください。
    • Geeklog 1.4.1 (FCKeditor 2.3.1)の場合: 公開領域/fckeditor/editor/filemanager/upload/php/config.php
    • Geeklog 1.5.0 (FCKeditor 2.6)の場合: 公開領域/fckeditor/editor/filemanager/connectors/php/config.php

    それぞれのファイルの中で、
    $Config['Enabled'] = true ; となっている箇所を探し、 truefalse に変更してください。旧バージョンからアップグレードしている場合、古い設定ファイルが残っている可能性があるので、上記の両方のファイルを探してください。
    なお、Geeklog-1.5.0日本語版では、一部のサーバで動作が不安定になるという理由で、「アップロード」は無効になっています。
  3. FCKeditorもファイルアップロードの機能もどちらも使用したい場合は、アップロード用のスクリプトが直接アクセスされるの防ぐことで対応できます。アップロード用のスクリプトの位置はつぎのいずれかです。
    • Geeklog 1.4.1 (FCKeditor 2.3.1)の場合: 公開領域/fckeditor/editor/filemanager/upload/php/upload.php
    • Geeklog 1.5.0 (FCKeditor 2.6)の場合: 公開領域/fckeditor/editor/filemanager/connectors/php/upload.php

    upload.phpの先頭部分、著作権表示の後でかつ、最初の require(...) の前に次のコードを追加します。
    if (strpos($_SERVER['PHP_SELF'], 'upload.php') !== false) {
        die('This file can not be used on its own!');
    }
    

    旧バージョンからアップグレードしている場合、古い設定ファイルが残っている可能性があるので、上記の両方のファイルを探してください。

まもなく正式に公開されるGeeklog-1.5.0日本語版では、上記3.の対策を行っています。