Hello there, ('ω')ノ
Facebook for Android上での任意のコード実行:ダウンロード機能を通じてを。
脆弱性:
コード実行
記事:
要約
Facebook for Android上でACE(任意のコード実行)を発見し。
これは、ファイルを開かずにグループの「Files Tab」から
ファイルをダウンロードすることでトリアージでき。
背景
Facebookがグループからファイルをダウンロードする方法を探っていたところ、
Facebookがファイルをダウンロードするために2つの異なるメカニズムを
使用していることがわかり。
ユーザが投稿自体からファイルをダウンロードする場合、
それは知る限り安全な方法である、組み込みのAndroidサービスである
DownloadManagerを介してダウンロードされ。
ユーザが「Files Tab」からファイルをダウンロードすることを決定した場合、
それは異なる方法でダウンロードされ。
要するに、アプリケーションはファイルをフェッチして、
フィルタなしでDownloadディレクトリに保存して。
注:
選択されたコードは、Facebookがプッシュした修正で。
脆弱性のあるコードはこのコードはなく。
パストラバーサル
脆弱性は2つ目の方法にあり。
ファイルをアップロードする際にサーバサイドでセキュリティ対策が
実施されていましたが、これを簡単にバイパスすることができ。
単純に、アプリケーションはダウンロードファイルを取得し、
例えば/sdcard/Downloads/FILE_NAMEにファイルを保存しますが、
パストラバーサル攻撃に対してFILE_NAMEをフィルタリングすることなく保存して。
私が最初に思いついたのは、パストラバーサルを使用してネイティブライブラリを
上書きし、任意のコードを実行することで。
自分のBurp Suiteプロキシをセットアップし、アップロードファイルリクエストを
インターセプトして、ファイル名を../../../sdcard/PoCに変更し、
リクエストを転送して。
Webアップロードエンドポイント
残念ながら、サーバーサイドのセキュリティ対策のために十分ではなく。
パストラバーサルのペイロードは削除され。
ペイロードを操作してみることにしましたが、残念ながらどのペイロードも機能せず。
セキュリティ対策をバイパスする(バイパス?)
多くのペイロードの後、そのフィルタをバイパスすることができず。
アプリケーションを再度ブラウズすることにし、何か役立つものを
見つけるかもしれないと思い。
初めて、Facebookのモバイルアプリケーションを介してファイルを
アップロードできることに気付き。
自分の携帯電話にBurp Suiteプロキシを設定し、アプリケーションの
ホワイトハット設定を有効にしてSSLピンニングをバイパスし、
アップロードファイルリクエストをインターセプトし、
ファイル名を../../../sdcard/PoCに変更して。フ
ァイルが正常にアップロードされ、ペイロードは今、ファイル名の中にあって。
投稿からファイルをダウンロードしようとしましたが、
DownloadMangerサービスは自分が言ったように安全なので、
攻撃は機能せず。
Files Tabに移動して、ファイルをダウンロードして。
そしてここに自分たちの攻撃があり。
ファイルは/sdcard/PoCに書き込まれていて。
パストラバーサルを実行することができたので、今、ネイティブライブラリを
上書きしてACE攻撃を実行することができて。
エクスプロイト
その攻撃を悪用するために、新しいAndroid NDKプロジェクトを開始して、
ネイティブライブラリを作成し、ライブラリがロードされたときに
邪悪なコードが実行されるように、JNI_OnLoad関数に任意のコードを置き。
#include <jni.h>
#include <string>
#include <stdlib.h>
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
system(“id > /data/data/com.facebook.katana/PoC”);
return JNI_VERSION_1_6;
}
プロジェクトをビルドして、悪意のあるライブラリを取得し。
そして、それをモバイルアップロードエンドポイントでアップロードし、
それを/../../../../../data/data/com.facebook.katana/lib-xzs/libbreakpad.soに
名前を変更して。
Best regards, (^^ゞ