针对MTK设备的证书利用。MTK证书验证过程中存在逻辑缺陷。类似于CVE-2023-20696。 已修补。 CVE-2023-20696 CVE-2025-20730
架构检测存在一些问题。等我有空时需要修复。或者任何人都可以提交pull request。 这是一个vibe编码的版本,我稍后会重写。但目前是可用的。
本项目仅用于研究目的。 请确保在使用前已获得授权。 不允许用于非法用途。 不允许使用此漏洞提供付费服务。
对于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或GZ的验证。 然后修补LK以移除对lk_main_dtb的验证(否则会崩溃)。 你还需要修补LK以移除所有引导加载程序锁,包括set_lock_state,以避免重新锁定或某些崩溃。
python parse-part-img.py [原始镜像文件] --split -o out
然后你可以看到分离出的镜像(例如lk, bl2_ext, lk_main_dtb, aee)
修补后: 对于新的V6设备: python sign_mtk_cert.py [单个镜像文件] -w 对于旧的V6/V5设备: python sign_mtk_cert.py [单个镜像文件] -w --legacy
然后将新的已签名镜像插回: python build-part-img.py replace [原始镜像文件] --name [要插回的单个镜像名称] --file [新的已签名单个镜像]
