最近、私はCVE-2014-7911に関するいくつかの記事を読んで、PoCオブジェクトの逆シリアル化された値を持つBinderProxyクラスのインスタンスを作成し、system_serverに送信します。 GCがそれを扱うとき、PoCはシステム権限で呼び出されます(system_serverが持つ権限)Android GCで使用できるアクセス
しかし、通常のSerializableクラスをsystem_serverに送信しようとすると、PoCと同じ方法を使用します。システム権限を必要とするfinalize()メソッドは実行されません。
質問:なぜ私のコードはGCであるときにシステム権限を取得できませんでしたか?
これは私のJavaコードです:
public class Seria implements Serializable {
private static final long serialVersionUID = 0;
static {
System.loadLibrary("gc-permission");
}
@Override
protected void finalize() throws Throwable {
destroy();
}
private native void destroy();
}
そして、私のCコード:
#include <jni.h>
#include <stdlib.h>
JNIEXPORT void JNICALL
Java_android_study_gcpremission_Seria_destroy(JNIEnv *env, jobject instance) {
// TODO
int a = -1;
a = system("echo 'a' > /sdcard/test/b.txt"); // normal premission
a = system("echo 'a' > /data/b.txt"); // need system permission
a = system("chmod 777 /data/b.txt"); // need system permission
}
ガベージコレクションの際にあなたのコード*がシステム権限を取得すると思われるのはなぜですか? – immibis
まあ、それほど感謝していません。Android GCについての記事を読んでいます。 –