最近我读了一些关于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
}
答案 0 :(得分:0)
为什么我的代码在GC时无法获得系统权限?
你的类在system-server中不存在,所以当system-server去反序列化你的类时,它只会抛出一个ClassNotFoundException并且没有任何反应。该漏洞依赖于使用已存在于system-server中的类。