Armoris日記 CVE-2019-6447編

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

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

Androidアプリの脆弱性を初めて検証してみる

脆弱性の検証は自己責任で行ってください。また、自身で管理する端末以外ではやらないでください

今週の Armoris日記は Androidアプリの脆弱性検証をやってみたというものです。
今回初めて Androidアプリの脆弱性検証を行うので、わかりやすく試しやすそうな CVE-2019-6447 ES File Explorer について取り上げます。

CVE-2019-6447 は外部から特定のポートに http リクエストを投げることによって Android端末内部の情報を認証なしに取得することができるというものです。
実際に使える PoCがいくつか出回っており、脆弱性のあるバージョンのアプリがインストールされた端末と同一ネットワーク内にいることで攻撃が可能になります。

Description参考:JVN

脆弱性情報:NVD
影響を受けるバージョン:ES File Explorer <= 4.1.9.7.4
CVE番号:CVE-2019-6447

検証環境

今回は検証にあたり手元にあった実機 (Lenovo TB-8) を使用しています。

Name Version
Android 7.0
ES File Explorer 4.1.9.7.4

検証用端末の準備

まずは脆弱性のあるバージョンの apk ファイルを以下からダウンロードします。

apk のダウンロードが完了したら検証端末を USB で接続し、Android File Transfer を使用して Downloadフォルダにコピーします。
f:id:Armoris:20201113160406p:plain

ファイルのコピーが完了したら端末から apk ファイルをタップし、インストールを選択します。
f:id:Armoris:20201113162233j:plain:w400

インストールが完了したらアプリを開いてストレージへのアクセスを許可します。
これでアプリを使う準備が完了しました。
f:id:Armoris:20201113162616j:plain:w400

いよいよ実際に PoC を試してみます

まずは Port 59777 が open になっているか nmap を使用して確認します。
f:id:Armoris:20201113163118p:plain

ポートが open になっていることを確認したので次は画像の一覧を取得してみます。
f:id:Armoris:20201113163449p:plain
実行結果は以下のようになっており、Downloadフォルダの下に4枚の画像があることが確認できました。
このコマンドは Downloadフォルダ以外にも画像があれば全て表示されるようになっています。

user@kali-linux:~/Desktop$ python3 poc.py --cmd listPics --ip 192.168.249.10
[*] Executing command: listPics on 192.168.249.10
[*] Server responded with: 200

{"name":"file1.jpg", "time":"2020/04/22 04:53:47 åå¾", "location":"/storage/emulated/0/Download/file1.jpg", "size":"507.22 KB (519,389 ãã¤ã)", },
{"name":"file2.jpg", "time":"2020/04/22 04:53:59 åå¾", "location":"/storage/emulated/0/Download/file2.jpg", "size":"363.92 KB (372,657 ãã¤ã)", },
{"name":"file3.jpg", "time":"2020/04/22 06:36:37 åå¾", "location":"/storage/emulated/0/Download/file3.jpg", "size":"1.17 MB (1,224,704 ãã¤ã)", },
{"name":"Screenshot.jpg", "time":"2020/11/13 04:00:32 åå¾", "location":"/storage/emulated/0/Download/Screenshot.jpg", "size":"175.26 KB (179,465 ãã¤ã)"}

次は先ほどの一覧の中からScreenshot.jpgというファイルをダウンロードしてみます。
f:id:Armoris:20201113164202p:plain
ダウンロードが完了した Screenshot.jpg を開くと問題なく表示されています。
f:id:Armoris:20201113164439p:plain

ここまでで一切の認証を必要とせず、同一ネットワーク内の Android端末から画像ファイルの取得に成功しました。
他にもインストールされているアプリの一覧取得やデバイス情報の取得が可能なことを確認しました。

おわり

今回検証した脆弱性は少し古いものですが、これで Androidアプリの脆弱性検証を行う際の手順を把握することができたと思っています。
今後はエミュレーター上で今回の脆弱性を再現し、トレーニングなどに再利用しやすくしたり、他の Androidアプリの脆弱性検証も試していきたいと思います。

**今回検証した脆弱性は同一ネットワークに所属しているだけで攻撃が可能なため、自身で管理するネットワーク環境及び端末以外ではやらないでください。