このブログは、株式会社ArmorisアルバイトのShaderoが書いています。
あるもりすぶろぐの内容は個人の意見です。
はじめに
今回は、2023年3月6日に公開されたCVE-2022-4328の脆弱性を検証します。
この脆弱性は、WooCommerce Checkout Field Managerと呼ばれるWordPressプラグインが、ファイルの拡張子名を正常に検証できていなかったため、アップロードするファイルの拡張子名を工夫すると攻撃者がPHPなどの任意のファイルをアップロードできるようになるというものです。
脆弱性情報 | NATIONAL VULNERABILITY DATABASE |
該当プラグイン | WooCommerce Checkout Field Manager |
関連プラグイン | WooCommerce |
影響を受けるバージョン | < 18.0 |
本情報を用いて悪用は絶対に行わないでください。
WooCommerce Checkout Field Managerとは
WooCommerce Checkout Field Managerとは、WordpressにECを実装するWooCommerceプラグインを使って作る決済ページの中身を変更することが出来るプラグインです。
これを用いることで決済ページに何らかのチェックボックスやテキストボックスなどを設置する事が可能になります。
PoC
検証環境
今回の検証では、検証環境をVagrantを用いて構築しました。 Vagrantファイルの記述例は以下の通りです。
Vagrant.configure("2") do |config| config.vm.box = "generic/ubuntu2204" config.vm.define "cve-2022-4328-wordpress" do |server| server.vm.hostname = "wordpress" server.vm.network "public_network", ip: "172.20.100.146" end end
各ソフトウェアのバージョンは以下の通りです。
Name | Version |
---|---|
Ubuntu | 22.04 |
PHP | 7.4.33 |
MariaDB | 10.6.12 |
Apache | 2.4.52 |
Wordpress | 6.1.1 |
WooCommerce | 7.4.1 |
WooCommerce Checkout Field Manager | 17.1 |
本記事では、WooCommerceとWooCommerce Checkout Field Manager以外の上記ソフトウェアが検証環境に導入済みである事を前提に検証を行います。
1. プラグインの導入
Wordpressに本脆弱性のPoCに必要なプラグインであるWooCommerceとWooCommerce Checkout Field Managerを導入します。
1.1 WooCommerceの導入
WooCommerce Checkout Field Managerの依存プラグインであるため、WooCommerceプラグインを先に導入します。
WooCommerceのプラグインページにアクセスし、バージョンを7.4.1に指定してダウンロードします。
次にWordpressのプラグイン追加ページにアクセスし、プラグインのアップロードを押した後に先程ダウンロードしたzipファイルを指定してインストールし、有効化します。
http://172.20.100.146/wordpress/wp-admin/plugin-install.php
1.2 WooCommerce Checkout Field Managerの導入
WooCommerce Checkout Field Managerプラグインの導入もWooCommerceプラグインと同様の方法でダウンロード・インストールを行います。
WooCommerce Checkout Field Managerのプラグインページにアクセスし、バージョンを17.1に指定してダウンロードします。
次にWordpressのプラグイン追加ページにアクセスし、プラグインのアップロードを押した後に先程ダウンロードしたzipファイルを指定してインストールし、有効化します。
2. PHPファイルの準備
アップロードするPHPファイルを準備して適当なディレクトリに保存します。
ファイルの中身はどのような内容でも問題ありません。今回は以下の内容をアップロードします。
<?php passthru("id"); ?>
このスクリプトが実行されると、Wordpressを実行しているLinuxユーザの情報(ユーザID・所属グループなど)を取得できます。
3. PHPファイルのアップロード
以下のコマンドを実行しPHPファイルを不正にアップロードします。
(悪用を防ぐため一部コマンドを隠して記載しています)
curl -i 'http://172.20.100.146/wordpress/wp-admin/admin-ajax.php?xxxxxxxxxxxxxxxxxxxxxxxx&name=payload.pHp' -F 'file=@/tmp/payload.php'
アップロードするファイルの名前を指定するURLパラメータ(name=payload.pHp
)が本脆弱性の重要な部分です。
通常PHPファイルをアップロードしようとすると弾かれますが、拡張子の任意の箇所を大文字にすることでどのような拡張子のファイルでもアップロードできます。
以下のURLにアクセスするとPHPファイルが正常にアップロード出来た事が確認できます。
http://172.20.100.146/wordpress/wp-content/uploads/cfom_files/
またアップロードしたファイルをクリックするとPHPファイルが実行される事も確認できます。
最新のバージョンでは
なお最新のバージョンでは本脆弱性は修正されており、試しても弾かれるようになっています。
おわりに
今回は2023年3月6日に公開されたCVE-2022-4328の脆弱性を検証しました。
本脆弱性は、簡単に攻撃を実行することができるため非常に危険です。
しかし執筆時点では既に脆弱性を修正した18.0が公開されており、アップデートを行えば対策することが可能です。
該当プラグインを導入している方は早急にアップデートすることをお勧めします。
本情報を用いて悪用は絶対に行わないでください。