
Адаптация CVE-2023-6241 для Google Pixel 7 с Google Pixel 8, взятая из securitylab/SecurityExploits/Android/Mali/CVE_2023_6241
Этот репозиторий покажет, как адаптировать эксплойт, опубликованный securitylab в его GitHub-репозитории, работающий для Google Pixel 8, под Google Pixel 7.
Перед началом модификации эксплойта предположение о том, что исходный эксплойт также работает для устройств Google Pixel 7 (после необходимых исправлений), было сделано на основе статьи, связанной с CVE-2023-6241. Это было необходимо, поскольку два устройства кажутся разными (с точки зрения аппаратного обеспечения) (сравнение).
Здесь перечислены инструменты, использованные для анализа и извлечения информации или файлов.
Ниже описано, как была достигнута цель, начиная с самого начала.
Включите параметры разработчика на устройстве.
Прошейте устройство с правильным патчем безопасности (в данном случае одним из UP1A.231105.003, Nov 2023 и UQ1A.240205.002, Feb 2024, оба включены), желательно используя Google Chrome и Android flash tool, нажав «Flash» в нужной записи на странице Factory Images for Nexus and Pixel Devices.
Примечание 1: использование Android flash tool для прошивки устройств может помочь решить проблемы, связанные с версией загрузчика. Эти проблемы могут возникнуть во время операции прошивки с помощью скрипта, предоставляемого вместе с сжатым файлом, загружаемым по ссылке «Link» на странице Factory Images for Nexus and Pixel Devices.
Примечание 2: перед прошивкой устройства в Android flash tool отметьте «Force Flash all partition», чтобы получить тот же результат, что и при использовании скрипта.
Загрузите желаемый образ Android, нажав «Link», и извлеките файл boot.img из сжатого файла «image-panther.zip», находящегося внутри основного сжатого файла «panther-<release>-factory-<первые 8 символов SHA-256>.zip».
Выполните ./imjtool.ELF64 boot.img extract. Будет создана новая папка «extracted» с двумя файлами внутри. 
Выполните vmlinux-to-elf ./extracted/kernel.decompressed <filename>.elf (для дальнейшего использования <filename>.elf будет Pixel7-kernel.elf). Будет создан новый файл с указанным именем.
Дополнительную информацию можно получить из статьи GitHub и репозитория GitHub, упомянутых в начале.

Откройте файл «Pixel7-kernel.elf» в Ghidra. Нет необходимости выполнять автоматический анализ, так как это занимает много времени, а информацию всё равно можно извлечь.
Откройте окно «Symbol table» и найдите интересующие поля (в данном случае avc_den|sel_read_enforce$|init_cred|^commit_creds$). Результат должен выглядеть примерно так: 
Перейдите по адресу расположения и получите «Imagebase Offset» для всех найденных полей.

Установите все смещения в эксплойте в соответствии с найденными значениями.

Вычислите значения ADD_COMMIT_2311 и ADD_INIT_2311, найдя шестнадцатеричное значение следующих операций: соответственно add x8, x8, #0xXXX и add x0, x0, #0xYYY с помощью Онлайн-ассемблера и дизассемблера. Чтобы найти значения XXX и YYY, достаточно скопировать младшие 12 бит из COMMIT_CREDS_2311 и ADD_INIT_2311 соответственно (например, если ADD_COMMIT_2311 равно 0x17f0c8, то шестнадцатеричный код add x8, x8, #0x0c8 — 0x91032108).
Обратите внимание, что значения представлены в формате big-endian, поэтому полученные байты необходимо перевернуть.
Скопируйте GLES_mali.so из /vendor/lib64/egl/libGLES_mali.so (т.е. adb pull /vendor/lib64/egl/libGLES_mali.so) и скомпилируйте всё командой /home/gobbo/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang -g -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.
Примечание: для согласованности временных меток в эксплойте использовалась версия библиотеки OpenCL, доступная непосредственно перед патчем безопасности, исправляющим уязвимость (т.е. версия 2023.04.17).
Загрузите и выполните эксплойт
adb push ./mali_jit_csf /data/local/tmp
export LD_LIBRARY_PATH=/vendor/lib64/egl
./data/local/tmp/mali_jit_csf