
Bad Spin: Android Binder - эксплуатация повышения привилегий (CVE-2022-20421)
Автор: Moshe Kol
Эксплойт повышения привилегий из приложения unstrusted_app для уязвимости Android Binder (CVE-2022-20421). Уязвимость исправлена в бюллетене безопасности Android за октябрь 2022 года. Эксплойт работает на устройствах с версиями ядра 5.4.x и 5.10.x и предоставляет полные примитивы чтения/записи ядра. Для Google Pixel 6 он также получает полный root и обход SELinux.
Полную статью можно найти здесь.
libbadspin.so, выполнив make push в каталоге src/. Это также отправит библиотеку в /data/local/tmp.adb shell.LD_PRELOAD=/data/local/tmp/libbadspin.so sleep 1. Это загрузит библиотеку и запустит эксплойт.libbadspin.so, выполнив make push в каталоге src/. Это скопирует библиотеку в каталог assets для демо-приложения Android.app/. (Возможно, вам понадобится Android Studio.)adb logcat -s BADSPINВы можете передать следующие переменные в make:
VERBOSE=1 для повышения подробности вывода.TEST_VULN=1 для проверки уязвимости без запуска эксплойта.$ make list
0: Samsung Galaxy S22, Android 12 (6/2022), kernel 5.10.81
1: Samsung Galaxy S21 Ultra, Android 12 (3/2022), kernel 5.4.129
2: Google Pixel 6, Android 12 (5/2022), kernel 5.10.66
3: Google Pixel 6, Android 13 (9/2022), kernel 5.10.107
Адаптировать эксплойт для нового устройства несложно.
Убедитесь, что ваше новое устройство работает на версии ядра 5.4.x или 5.10.x, и что уровень исправлений безопасности Android ниже октября 2022 года.
Добавьте свойства вашего устройства в dev_config.h.
Укажите два указателя на функции:
kimg_to_lm(): Преобразует виртуальный указатель образа ядра в линейное отображение.find_kbase(): Поиск базового адреса ядра из утекшего указателя anon_pipe_buf_ops.Вы можете использовать уже предоставленные функции для этого. (Если ваш производитель не Samsung и вы не уверены, используйте те же функции, что и для Pixel 6.)
Скомпилируйте и запустите.
Если у вас всё работает, пожалуйста, отправьте pull request.