Android GC使用什么权限

What permission does Android GC use

最近我读了一些关于 CVE-2014-7911 的文章,利用 PoC 创建一个 BinderProxy class 的实例,无论如何使用对象的反序列化值并将其发送到 system_server. GC处理的时候会调用系统权限的PoC(system_server拥有的权限)

但是,当我尝试使用与 PoC 相同的方式将普通的可序列化 class 发送到 system_server 时,我自己的需要系统权限的 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
}

Why couldn't my code get system permission when being GC?

你的 class 在系统服务器中不存在,所以当系统服务器去反序列化你的 class 它只是抛出一个 ClassNotFoundException 而没有任何反应。该漏洞依赖于使用系统服务器中已存在的class。