
MTKデバイス向け証明書エクスプロイト。MTKの証明書検証プロセスにはロジック上の欠陥があります。CVE-2023-20696に類似。
MTK デバイス向けの証明書エクスプロイト。MTK の証明書検証プロセスにはロジック上の欠陥があります。CVE-2023-20696 に類似しています。 6月にパッチが適用される可能性があります。
このプロジェクトは研究目的のみで使用されます。 使用する前に必ず許可を取得してください。 不正使用は許可されません。 このエクスプロイトを使用して有料サービスを提供することは許可されません。
mtk デバイスでは、preloader は bl2_ext/lk/atf を検証してから、それらにジャンプします。
これらのイメージは ASN.1 証明書で署名されています。
しかし、ASN.1 解析プロセスにはロジック上の欠陥があります。
古い V5/V6 デバイスでは、証明書コンテンツは bypass_mode 1 によって識別されます。
このモードでは、すべてのオブジェクトが走査されます。
そのため、0x3(ビット列)オブジェクトを持つ偽の証明書を作成できます。
偽の証明書は変更されていないため、検証を通過できます。
実際の証明書は偽の証明書の下にあります。そして、実際の証明書の先頭にイメージハッシュとイメージ hdr ハッシュを配置できます。
新しい V6 デバイスでは、証明書コンテンツは bypass_mode 0 によって識別されます。
このモードでは、0x30 を除くすべてのオブジェクトがスキップされます。
そのため、証明書の先頭にイメージハッシュとイメージ hdr ハッシュを配置できます。
その他の部分は変更せずに保持します。
その後、イメージの内容を変更できます。
これにより、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]