Shikata Ga Nai

Private? There is no such things.

Arbitrary code execution on Facebook for Android through a download featureを訳してみた

Hello there, ('ω')ノ

 

Facebook for Android上での任意のコード実行:ダウンロード機能を通じてを。

 

脆弱性:

 コード実行

 

記事:

 https://dphoeniixx.medium.com/arbitrary-code-execution-on-facebook-for-android-through-download-feature-fb6826e33e0f

 

要約

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, (^^ゞ