Ранее я рассказал, как отключить Selinux, пропатчив ядро. Теперь опишу второй шаг - как пропатчить ядро, чтобы иметь возможность, в нужный нам момент, поднять приоритет своего процесса до root. Как известно, большинство эксплоитов "превращают" текущий процесс в процесс с uid=0, gid=0 с помощью вызова ядром такой конструкции: commit_creds(prepare_kernel_cred(NULL)); Почитать как это работает можно, например, тут.
Почему-то commit_creds(&init_cred) (тоже встречается в некоторых эксплоитах) у меня не заработало. Идея следующая: найти в ядре редкоиспользуемую функцию, пропатчить ее, чтобы она вызывала commit_creds(...) и обратиться к ней из своей программы. Какую функцию выбрать, я "подсмотрел" в эксплоитах от securitylab. Они выбрали sel_read_enforce, которая вызывается при чтении файла "/sys/fs/selinux/enforce". Вот так функция выглядит в оригинале: Кроме адреса этой функции, нужны адреса commit_creds: и prepare_kernel_cred: Так как я не силен в ARM64 ассемблере - то код своего эксплоит