Armoris日記 CVE-2020-24389編

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

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

CVE-2020-24389 の検証をしてみる

今週の Armoris日記は久しぶりの検証編になります。
脆弱性の検証は自身で管理するサーバー以外にはしないでください。

今回検証するのは 2020/09/21 に公開された CVE-2020-24389 の脆弱性になります。
この脆弱性は一部のファイル拡張子が無効化されていなかったため、任意の PHP コードをアップロードすることができるようになるというものです。

つまり自作のプログラムファイルがサイト管理者に無断でアップロードされてしまいます。

2020/10/01 時点で既にいくつか PoC に関する情報が出ていますが、WPScan に公開されていないため PoC に関する説明は行いません。

脆弱性情報 : WPScan WordPress Vulnerability Database
該当プラグイン : Drag and Drop Multiple File Upload – Contact Form 7
関連プラグイン : Contact Form 7

影響を受けるバージョン : < 1.3.5.5

検証環境

検証に使用した環境と各種バージョンは以下のとおりです。
今回の脆弱性Drag and Drop Multiple File Upload – Contact Form 7 というプラグインに存在するものですが、これは Contact Form 7 というプラグインに機能を追加するもののため、検証には両方をインストールする必要があります。

Name Version
Ubuntu Server 20.04
WordPress 5.5.1
Drag and Drop Multiple File Upload – Contact Form 7 1.3.5.1
Contact Form 7 5.2.1

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

まずは必要なプラグインの zip をダウンロードします。

$ wget https://downloads.wordpress.org/plugin/drag-and-drop-multiple-file-upload-contact-form-7.1.3.5.1.zip && wget https://downloads.wordpress.org/plugin/contact-form-7.5.2.1.zip
--2020-10-01 04:29:37--  https://downloads.wordpress.org/plugin/drag-and-drop-multiple-file-upload-contact-form-7.1.3.5.1.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: 35452 (35K) [application/octet-stream]
Saving to: ‘drag-and-drop-multiple-file-upload-contact-form-7.1.3.5.1.zip’

drag-and-drop-multiple-file-upload-cont 100%[=============================================================================>]  34.62K  --.-KB/s    in 0.07s

2020-10-01 04:48:00 (529 KB/s) - ‘drag-and-drop-multiple-file-upload-contact-form-7.1.3.5.1.zip’ saved [35452/35452]

--2020-10-01 04:29:43--  https://downloads.wordpress.org/plugin/contact-form-7.5.2.1.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: 185814 (181K) [application/octet-stream]
Saving to: ‘contact-form-7.5.2.1.zip’

contact-form-7.5.2.1.zip                100%[=============================================================================>] 181.46K   198KB/s    in 0.9s

2020-10-01 04:29:45 (198 KB/s) - ‘contact-form-7.5.2.1.zip’ saved [185814/185814]

$ ls
contact-form-7.5.2.1.zip  drag-and-drop-multiple-file-upload-contact-form-7.1.3.5.1.zip

zip のダウンロードが完了したら zip を解凍し、プラグインディレクトリに配置します。

$ sudo unzip contact-form-7.5.2.1.zip && sudo unzip drag-and-drop-multiple-file-upload-contact-form-7.1.3.5.1.zip
~~~~~~~~~~~~~~~~
  inflating: drag-and-drop-multiple-file-upload-contact-form-7/languages/dnd-upload-cf7-ru_RU.mo
  inflating: drag-and-drop-multiple-file-upload-contact-form-7/languages/dnd-upload-cf7-ru_RU.po
  inflating: drag-and-drop-multiple-file-upload-contact-form-7/readme.txt
  inflating: drag-and-drop-multiple-file-upload-contact-form-7/uninstall.php
$ sudo cp -r drag-and-drop-multiple-file-upload-contact-form-7 /var/www/wordpress/wp-content/plugins/ && sudo cp -r contact-form-7 /var/www/wordpress/wp-content/plugins/
$ ls /var/www/wordpress/wp-content/plugins/
akismet  contact-form-7  drag-and-drop-multiple-file-upload-contact-form-7  hello.php  index.php

プラグインファイルを配置したら /wp-content/uploads/wp_dndcf7_uploads/wpcf7-files というディレクトリを作成しておきます。

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

$ ls -l
total 8
drwxr-xr-x 2 root     root     4096 Sep 28 08:59 html
drwxr-xr-x 5 www-data www-data 4096 Sep 30 09:04 wordpress

最後に WordPressのサイトを開いてプラグインを有効化すれば準備は完了です。

PoC を実際に実行してみる

準備が完了したら実際に PoC を実行します。
今回は以下の PHP コードをアップロードしてみます。

<?php
    phpinfo();
?>

以下の画像は PoC 実行時の結果です。
f:id:Armoris:20201001141618j:plain

以下は実際に phpinfo の実行が確認されています。 f:id:Armoris:20201001142026p:plain

最後に

今回検証した脆弱性は攻撃が非常に簡単なため、実際に攻撃事例が報告されています。
脆弱性の対象バージョンは比較的新しいもののため、導入されている方はすぐにアップグレードすることをお勧めします。

また、プラグインがファイルをアップロードするディレクトリ に不審なファイルがないかを確認してみるのもいいと思います。

自分が管理するサーバー以外では絶対に試さないでください。
また、検証は自己責任で行ってください。