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。
最近我读了一些关于 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。