Android GC使用了哪些权限

时间:2016-10-14 02:40:00

标签: java android garbage-collection

最近我读了一些关于CVE-2014-7911的文章,漏洞PoC无论如何都使用对象的反序列化值创建了BinderProxy类的实例并将其发送到system_server。当GC处理它时,将使用系统权限(system_server具有的权限)调用PoC

但是,当我尝试将正常的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
}

1 个答案:

答案 0 :(得分:0)

  

为什么我的代码在GC时无法获得系统权限?

你的类在system-server中不存在,所以当system-server去反序列化你的类时,它只会抛出一个ClassNotFoundException并且没有任何反应。该漏洞依赖于使用已存在于system-server中的类。