Estoy trabajando en mi tesis escolar.
Estoy tratando de inyectar algo de código shell en una biblioteca compartida utilizando la vulnerabilidad de Vaca Sucia en Android x86.
Mi shellcode está escrito en ensamblado y solo llama a sys_execve
con un argumento touch /sdcard/FILE.txt
. El código de shell debe estar bien, no estoy usando ninguna dirección absoluta para los argumentos de cadena: todo se crea en la pila y se dirige al puntero de la pila. Estoy tratando de inyectar este código de shell en libc.so
(en la función time
), que creo que tiene éxito, antes de esto probé un código de shell más simple que funcionó perfectamente ( xor eax, eax; ret
).
Pero justo después del ataque, el programa falla:
01-29 15:56:40.305 3255-3255/com.example.vitek.bakalarka A/libc: Fatal signal 11 (SIGSEGV) at 0x00000000 (code=128), thread 3255 (vitek.bakalarka)
Y cuando intento comunicarme con el dispositivo a través de adb
, solo obtengo esto:
$ adb shell ls -la /sdcard/
CANNOT LINK EXECUTABLE: could not load library "libcutils.so" needed by "/system/bin/touch"; caused by library "libcutils.so" not found
No entiendo por qué falla. Pensé que el syscall execve
crea un subproceso que ejecuta todo lo que recibe como un argumento.
¿Por qué no carga la biblioteca libcutils.so
?
¿Puedo agregar algo a mi código de shell para que funcione este ataque? Si no, ¿hay algún otro objetivo adecuado que sea más fácil de atacar?
He visto algunos PoC de vaca sucia que atacaban a vDSO
, pero en mi caso el sistema no usa vDSO
. También intenté inyectar eso, funcionó perfectamente (lo vi en objdump
y hexdump
de las páginas vDSO
que escribí en un archivo), pero la función que atacé ( clock_gettime
) parece que nunca se llama (ni por el sistema ni por mí directamente).
Gracias por sus respuestas.