ワードプレスのプラグインの脆弱性をプラグインをアップデートせずに直接プラグイン等を編集してふさいでみる方法を解説いたします。
ワードプレスの脆弱性に直接コーディングしてパッチを当てる
ワードプレスの脆弱性は、一般的にそのプラグインやテーマの製作者がパッチを当てて、アップデートが公開されますので、アップデートを適応すればふさぐことができます。
しかし、何らかの事情プラグイン等をデップデートできなかったり、すでに開発が終了していてパッチが当てられないことや、PHPバージョンやワードプレスのバージョンによってはアップデートでプラグインが動作不全を起こす場合があります。
こういった場合は、代替えのプラグインを探すのも一つの手ですが、直接プラグイン等のPHPコードを編集して脆弱性をふさぐことも可能です。
この事例と方法論をご紹介いたします。
試しにFile Managerプラグインの70万サイトに影響をあえた脆弱性CVE-2020-25213を直接ふさいでみます
脆弱性情報はこちら → https://nvd.nist.gov/vuln/detail/CVE-2020-25213
脆弱性をふさぐには、その脆弱性の情報や、どのような脆弱性なのかを理解する必要があります。この脆弱性についてググったところ、下記のような情報がネット上に見つかりました。
700,000 WordPress Users Affected by Zero-Day Vulnerability in File Manager Plugin
CVE-2020-25213の脆弱性は下記のような内容のようです。
1 wp-content/plugins/wp-file-manager/lib/files/ フォルダに任意のファイルをハッカーがアップロードできる
2 この脆弱性はFile Managerプラグインに不使用であるにもかかわらず放置されているファイルconnector.minimal.phpのpublic function run()関数に含まれている
3 このアップロードされた実行可能ファイルに不正なコードを仕込まれていたら、任意のプログラムをハッカーがそのファイルにアクセスすることでサーバー上で実行できてしまう。
このconnector.minimal.phpのrun関数はプラグインでは使用されていないと記載があるので、脆弱性をふさぐにはこの関数を実行できなくすればよいという事になります。
public function run() { return; //何もしないで処理を終わる $isPost = $this->reqMethod === 'POST'; $src = $isPost ? array_merge($_GET, $_POST) : $_GET; $maxInputVars = (!$src || isset($src['targets'])) ? ini_get('max_input_vars') : null; ....
この例では最も簡単なパッチを当てれる例をご紹介しましたが、脆弱性はプラグインやテーマ内の複数の関数を経て複雑な処理で発現するものもございます。
このような脆弱性を直接ふさぐには、かなりのスキルや脆弱性の知識、どういった流れで関数が実行されているかなどの調査と理解、また、脆弱性をふさいだ後は安全なテスト環境等での動作テストも必要となるかと思います。
この為脆弱性を個別に塞ぐのは多くの場合極めて難易度が高い作業と言えます。
※脆弱性検査やマルウェア駆除は【無料】ワードプレス:マルウェアスキャン&セキュリティープラグイン [マルウェア・ウィルス検出と駆除] をぜひご利用ください。
WordPress ワードプレスの安全なアップデートや脆弱性対策・マルウェア駆除のご依頼・ご相談はWPドクターまでお送りください