针对MTK设备的证书漏洞利用。MTK证书验证过程中存在一个逻辑缺陷。类似于CVE-2023-20696。可能已在6月被修补。
本项目仅用于研究目的。使用前请确保已获得授权。禁止非法使用。不允许使用此漏洞利用程序提供付费服务。
对于MTK设备,预加载器(preloader)会验证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 [the original image file] --split -o out
然后你可以看到分离出的镜像(例如lk, bl2_ext, lk_main_dtb, aee)
python parse_preloader.py [preloader image]
你可以通过此脚本获取lk/bl2_ext的加载地址
修补后 对于新的V6设备 python sign_mtk_cert.py [single image file] -w 对于旧的V6设备/V5设备 python sign_mtk_cert.py [single image file] -w --legacy
然后将新的已签名镜像插回
python build-part-img.py replace [original image file] --name [the single image name you want to insert back] -- file [the new signed single image]