
CVE-2022-38694 Exploit durci - Flasheur automatique USB Host RP2350 pour appareils Unisoc
Exploitation de la vulnérabilité BootROM Unisoc CVE-2022-38694 via l'hôte USB Raspberry Pi RP2350 pour envoyer automatiquement le SPL Loader au démarrage et lancer un u-boot arbitraire.
Déplace la chaîne d'exploitation — qui nécessitait à l'origine un PC + spd_dump — sur un microcontrôleur RP2350. Branchez l'appareil, flashez automatiquement, prend en charge le flashage en continu.
CVE-2022-38694 est un contournement ponctuel de la vérification de signature dans le BootROM Unisoc. En envoyant un exec stub à une adresse mémoire spécifique, l'adresse de retour est écrasée, contournant les contrôles de signature et permettant au BootROM d'accepter et d'exécuter un FDL1 arbitraire.
Point clé : FDL1 et SPL Loader partagent la même adresse de chargement (0x28007000), de sorte qu'un SPL Loader patché peut être envoyé à la place de FDL1, démarrant ainsi un u-boot arbitraire.
La configuration initiale nécessite un PC avec spd_dump :
┌──────────────────────────────────────────────────────────────────────────┐
│ Stage 1: PC-side Initial Unlock │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ Step 1: Exploit CVE-2022-38694 to boot patched SPL │
│ ┌────────────┐ ┌────────────┐ ┌─────────────────┐ │
│ │ Exec Stub │───►│ spl-unlock │───►│ Device boots │ │
│ │ @0x3F28 │ │ @0x28007000│ │ into DL mode │ │
│ └────────────┘ └────────────┘ └────────┬────────┘ │
│ │ │
│ Step 2: Send patched FDL2 via spd_dump, flash u-boot without │
│ secure boot, erase splloader │
│ │ │
│ ┌─────────────────┐ ┌──────────────────────▼───────────┐ │
│ │ Send fdl2-dl │───►│ Write u-boot (secure boot removed│ │
│ │ (patched FDL2) │ │ + Erase splloader partition) │ │
│ └─────────────────┘ └──────────────────────────────────┘ │
│ │
│ ★ After erasing splloader, device enters BootROM DL mode on every boot │
└──────────────────────────────────────────────────────────────────────────┘
Étapes :
spl-unlock.bin et démarrer l'appareilfdl2-dl.bin patché (FDL2 dont la vérification du démarrage sécurisé est supprimée)Une fois la splloader effacée, l'appareil entre en mode de téléchargement BootROM à chaque mise sous tension. L'hôte USB RP2350 gère automatiquement la chaîne d'exploitation :
┌──────────────────────────────────────────────────────────────────────────┐
│ Stage 2: RP2350 Automated Boot │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ Power on → no splloader → BootROM download mode │
│ │
│ ┌─────────┐ ┌────────────┐ ┌─────────────┐ ┌──────────────┐ │
│ │ BootROM │───►│ Exec Stub │───►│ spl-unlock │───►│ U-Boot │ │
│ │ Handshk │ │ Bypass sig │ │ as FDL1 │ │ (no secboot) │ │
│ └─────────┘ └────────────┘ └─────────────┘ │ Boot OK ✓ │ │
│ └──────────────┘ │
│ │
│ ★ Fully automatic. Unplug → auto-reset → ready for next device. │
└──────────────────────────────────────────────────────────────────────────┘
Pourquoi effacer splloader ?
┌─────────────┐ ┌──────────────────┐ ┌───────────────────┐ ┌──────────────┐
│ BootROM │ │ Exec Stub │ │ SPL Loader │ │ U-Boot │
│ Handshake │ ──► │ @0x3F28 (136B) │ ──► │ @0x28007000 │ ──► │ Boot OK │
│ CHECK_BAUD │ │ Bypass sig chk │ │ Replaces FDL1 │ │ │
└─────────────┘ └──────────────────┘ └───────────────────┘ └──────────────┘
CHECK_BAUD + CONNECT, établir la communication BSL0x3F28, exploiter CVE-2022-38694 pour écraser l'adresse de retour, contourner la vérification de signature0x28007000, signature déjà contournéeCe projet n'inclut pas de micrologiciel patché universel. Vous devez patcher vous-même le micrologiciel de votre appareil.
Référez-vous au wiki de TomKing062 :
| Micrologiciel | Patch | Sortie | Objectif |
|---|---|---|---|
| FDL2 (u-boot/lk) | NOP les contrôles d'écriture de partition sécurisée | fdl2-dl.bin | Étape 1 : envoyé via spd_dump pour les écritures de partitions |
| U-Boot | Patcher do_cboot() pour supprimer le démarrage sécurisé | u-boot modifié | Étape 1 : écrit sur l'appareil, remplace l'uboot d'origine |
| SPL Loader | NOP signcheck() et contrôles de résultat | spl-unlock.bin | Étapes 1 et 2 : envoyé via CVE-2022-38694 |
xxd -i spl-unlock.bin > fdl1_data.h
Mettez à jour le nom du tableau et les macros dans fdl1_data.h pour correspondre aux références du code.
Ce projet utilise actuellement l'exec stub UDX710 (custom_exec_3f28.bin).
Pour adapter à d'autres puces, remplacez l'exec stub et l'adresse de chargement dans custom_exec_data.h :