Armoris日記 CVE-2020-14207編

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

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

CVE-2020-14207の検証

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

今回のArmoris日記では、とあるサイトでPoCを発見したCVE-2020-14207についての検証を行います。
CVE-2020-14207はWordPressのDiveBookというプラグインに存在する脆弱性です。現在、このプラグインの開発は止まっており、当該脆弱性の修正はなされていない状態です。

脆弱性の概要はプラグインのfilter_diverパラメーターが適切にサニタイズされていなかったためSQLiが発生するというものです。

脆弱性情報:WPScan
該当プラグインDiveBook

影響を受けるバージョン:DiveBook <= 1.1.4 latest version

検証環境

検証に使用した環境と各種バージョンは以下のとおりです。

Name Version
UbuntuServer 20.04
DiveBook 1.1.4
WordPress 5.6

検証環境の準備

まずはVagrantを使用してUbuntuServerとWordPressの環境を構築します。

$ cat Vagrantfile 
Vagrant.configure(2) do |config|

config.vm.box = "generic/ubuntu2004"
config.vm.provider "libvirt"
config.vm.network "forwarded_port", guest: 80, host: 6588, host_ip: "172.20.100.120"
end
$ vagrant up

次に仮想環境のIPアドレスを確認してhostファイルを編集後にAnsibleを実行します。

$ vagrant ssh-config
Host default
  HostName 192.168.121.138
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/ubuntu/DiveBook/.vagrant/machines/default/libvirt/private_key
  IdentitiesOnly yes
  LogLevel FATAL
$ cat host
[server]
192.168.121.138 ansible_ssh_user=vagrant ansible_ssh_private_key_file=./.vagrant/machines/default/libvirt/private_key ansible_python_interpreter=/usr/bin/python3
$ ansible-playbook -i host wp.yml -v

今回も普段使用している以下のymlファイルを用いてWordPressの環境を構築します。

WordPressの構築が完了したらDiveBookプラグインを導入します。

vagrant@ubuntu2004:~$ wget https://downloads.wordpress.org/plugin/divebook.1.1.4.zip
vagrant@ubuntu2004:~$ unzip divebook.1.1.4.zip
vagrant@ubuntu2004:~$ sudo cp -r divebook /var/www/wordpress/wp-content/plugins/

WordPressにログイン後プラグインを有効化して準備完了です。

検証

現在脆弱性が修正されていない状態であり、WPScanでPoCが公開されていないためArmoris日記で詳しいPoCの解説は行いません。

まずはデフォルトのHello World!ページを編集して以下の内容を入力し、DiveBookプラグインを使用できる状態にします。

[divebook]divebook_display();[/divebook]

以下の画像はプラグインを埋め込んだ状態です。 f:id:Armoris:20201218185614p:plain

次にパラメーターを変更したURLにアクセスすることで以下のように使用しているDBのバージョン情報が表示されます。 f:id:Armoris:20201218185934p:plain
f:id:Armoris:20201218185953p:plain

その他にも別のパラメーターを使用することで以下のようにDBのデータを表示することができます。 f:id:Armoris:20201218190508p:plain

おわりに

今回検証したように、プラグインの開発が終了しているなどの理由により、見つかった脆弱性が修正されていないことが多くあります。
プラグインやソフトウェアを導入する際は使いやすさだけでなく、開発が継続的に行われているか、コミュニティが活発に活動しているかなども気にかけるようにすると良いのではないでしょうか。

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