
Эксплойт для сертификатов MTK устройств. Существует логическая ошибка в процессе верификации сертификатов MTK. Похоже на CVE-2023-20696.
Эксплойт сертификатов для устройств MTK. Существует логическая ошибка в процессе верификации сертификатов MTK. Аналогично CVE-2023-20696. Возможно, исправлено в июне.
Этот проект используется только для исследований. Убедитесь, что у вас есть разрешение перед использованием. Запрещено незаконное использование. Не разрешается использовать этот эксплойт для предоставления платных услуг.
Для устройств mtk прелоадер проверяет bl2_ext/lk/atf, а затем переходит к ним. Эти образы подписаны сертификатами ASN.1. Но в процессе разбора ASN.1 есть логическая ошибка. Для старых устройств V5/V6 содержимое сертификата определяется с помощью bypass_mode 1. В этом режиме любой объект будет пройден. Поэтому мы можем создать поддельный сертификат с объектом 0x3 (битовая строка). Поддельный сертификат не изменяется, поэтому он может пройти проверку. Настоящий сертификат находится под поддельным. Мы можем поместить хэш образа и хэш заголовка образа в начало настоящего сертификата. Для новых устройств V6 содержимое сертификата определяется с помощью bypass_mode 0. В этом режиме любой объект будет пропущен, кроме 0x30. Поэтому мы можем поместить хэш образа и хэш заголовка образа в начало сертификата. Затем оставить остальное без изменений. После этого мы можем изменить содержимое образа. Таким образом мы получаем контроль над EL3.
Вам нужно пропатчить BL2_EXT, чтобы удалить проверку lk или atf. А затем пропатчить LK, чтобы удалить проверку lk_main_dtb (иначе произойдет сбой). Также нужно пропатчить LK, чтобы удалить все блокировки загрузчика, включая set_lock_state, чтобы избежать повторной блокировки или некоторых сбоев.
python parse-part-img.py [имя исходного файла образа] --split -o out
Затем вы увидите отдельные образы (например, lk, bl2_ext, lk_main_dtb, aee)
python parse_preloader.py [образ прелоадера]
С помощью этого скрипта вы можете получить адрес загрузки lk/bl2_ext
после патча Для новых устройств v6 python sign_mtk_cert.py [один файл образа] -w Для старых устройств v6/устройств v5 python sign_mtk_cert.py [один файл образа] -w --legacy
Затем вставьте новый подписанный образ обратно
python build-part-img.py replace [исходный файл образа] --name [имя одиночного образа, который вы хотите вставить обратно] --file [новый подписанный одиночный образ]