Armoris日記 File Manager RCE検証編

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が書いています。

あるもりすぶろぐの内容は個人の意見です。

File Manager Plugin Zero-Day

今週の Armoris日記は WordPress Plugin の一つで人気の高い File Manager に存在する脆弱性について検証します。

この脆弱性は 2020/09/01 に情報が出た新しいものになります。
ここ数日で話題になっている本脆弱性ですが、簡単に言えば認証されていない第三者が悪意のあるファイルをアップロードし実行することで、サイト上で任意のコードを実行する可能があるというものです。
また、この脆弱性を利用してアクセスできるのはwp-content/plugins/wp-file-manager/lib/files/以下のみです。

詳しい脆弱性情報については以下を参照してください。
Wordfence
JPCERT/CC

2020/09/03時点で WPScan WordPress Vulnerability Database で PoC が公開されていないため、PoC については記載しません。

今回検証するのは WordPressFile Managerプラグイン です。

検証環境

以下は今回検証するにあたって用意した環境になります。

WordPressVagrant と Ansible を使用して環境構築を行なっています。

Name Version
WordPress 5.5.1
File Manager 6.0

Server情報
f:id:Armoris:20200903115326p:plain

プラグインインストールと準備

WordPress のインストールが完了したらプラグインのインストールを行います。
今回はバージョン 6.0 をプラグイン公式サイトからダウンロードして使用します。

$ wget https://downloads.wordpress.org/plugin/wp-file-manager.6.0.zip
--2020-09-02 20:01:42--  https://downloads.wordpress.org/plugin/wp-file-manager.6.0.zip
Resolving downloads.wordpress.org (downloads.wordpress.org)... 198.143.164.250
Connecting to downloads.wordpress.org (downloads.wordpress.org)|198.143.164.250|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3675292 (3.5M) [application/octet-stream]
Saving to: 'wp-file-manager.6.0.zip'

wp-file-manager.6.0.zip                 100%[=============================================================================>]   3.50M   278KB/s    in 15s

2020-09-02 20:01:58 (247 KB/s) - 'wp-file-manager.6.0.zip' saved [3675292/3675292]
$ ls
wp-file-manager.6.0.zip

プラグインがダウンロードできたら次にプラグインの zip ファイルを展開します。
今回使用するプラグインは二重に zip 化されていたため2回解凍します。

$ sudo unzip wp-file-manager.6.0.zip
Archive:  wp-file-manager.6.0.zip
   creating: wp-file-manager/
 extracting: wp-file-manager/wp-file-manager-6.O.zip
$ cd wp-file-manager
wp-file-manager$ sudo unzip wp-file-manager-6.O.zip
~~~~~~~~~~~~~~~~
  inflating: wp-file-manager/languages/wp-file-manager-gd.mo
  inflating: wp-file-manager/languages/wp-file-manager-hi_IN.po
  inflating: wp-file-manager/languages/wp-file-manager-fi.mo
wp-file-manager$ ls
wp-file-manager  wp-file-manager-6.O.zip

プラグインファイルの解凍が完了したら WordPressプラグインディレクトリに移動させます。

wp-file-manager$ sudo cp -r wp-file-manager /var/www/wordpress/wp-content/plugins/

この時ディレクトリの所有者とグループがwww-dataになっている事を確認します。
rootなどになっている場合は所有者とグループを変更します。

$ cd /var/www/wordpress/wp-content/plugins/
/var/www/wordpress/wp-content/plugins$ ls -la
total 24
drwxr-xr-x 4 nobody nogroup 4096 Sep  2 20:09 .
drwxr-xr-x 4 nobody nogroup 4096 Sep  1 11:54 ..
drwxr-xr-x 4 nobody nogroup 4096 Sep  1 11:54 akismet
-rw-r--r-- 1 nobody nogroup 2578 Mar 18  2019 hello.php
-rw-r--r-- 1 nobody nogroup   28 Jun  5  2014 index.php
drwxr-xr-x 9 root   root    4096 Sep  2 20:09 wp-file-manager
/var/www/wordpress/wp-content/plugins$ sudo chown -hR www-data:www-data wp-file-manager/
/var/www/wordpress/wp-content/plugins$ ls -la
total 24
drwxr-xr-x 4 nobody   nogroup  4096 Sep  2 20:09 .
drwxr-xr-x 4 nobody   nogroup  4096 Sep  1 11:54 ..
drwxr-xr-x 4 nobody   nogroup  4096 Sep  1 11:54 akismet
-rw-r--r-- 1 nobody   nogroup  2578 Mar 18  2019 hello.php
-rw-r--r-- 1 nobody   nogroup    28 Jun  5  2014 index.php
drwxr-xr-x 9 www-data www-data 4096 Sep  2 20:09 wp-file-manager

プラグインディレクトリの所有者とグループがwww-dataになっている事を確認したら WordPress にアクセスしてプラグインを有効化します。
f:id:Armoris:20200903121735p:plain

実際に検証してみる

まずは脆弱性を利用してコマンドを実行するためのトリガーとなるファイルをアップロードします。
f:id:Armoris:20200904160650p:plain 次にアップロードしたファイルをトリガーにしてmkdir hogeを実行してlsコマンドで作成されたかを確認します。
f:id:Armoris:20200904160734p:plain 画像のように、実際に hoge ディレクトリが作成されlsコマンドで確認することができました。

ブラウザからもアップロードしたファイルをトリガーにcat /etc/passwdコマンドの実行が可能であり攻撃者は簡単に脆弱性を利用できることがわかります。
f:id:Armoris:20200904161021p:plain

最後に

今回検証した脆弱性CVSS Score: 10.00 (Critical)が割り当てられており危険度が高いです。攻撃者が干渉できるのは特定ディレクトリのみですが、ここに何らかのファイルをアップロードしていた場合攻撃者によって削除されたり、閲覧される可能性もあり非常に危険だと感じました。
また、今回のプラグインが導入されているサイトはGoogle検索で簡単に見つけることができ、現時点で PoC がいくつか出回っているため、実際に脆弱性を利用した攻撃が行われています。

皆さんも自身で運営しているサイトのログを確認したり、CMSプラグインに関する情報を調べて確認してみてください。