
CVE-2022-38694 Exploit irrobustito - Flasher automatico USB Host RP2350 per dispositivi Unisoc
Sfruttando la vulnerabilità CVE-2022-38694 del BootROM Unisoc tramite Raspberry Pi RP2350 USB Host per inviare automaticamente l'SPL Loader all'avvio e avviare un u-boot arbitrario.
Sposta la catena di exploit — originariamente richiedeva un PC + spd_dump — su un microcontrollore RP2350. Collega il dispositivo, flash automatico, supporta flash continuo.
CVE-2022-38694 è un bypass una tantum della verifica della firma nel BootROM Unisoc. Inviando un exec stub a uno specifico indirizzo di memoria, l'indirizzo di ritorno viene sovrascritto, aggirando i controlli di firma e consentendo al BootROM di accettare ed eseguire FDL1 arbitrario.
Concetto chiave: FDL1 e SPL Loader condividono lo stesso indirizzo di caricamento (0x28007000), quindi un SPL Loader patchato può essere inviato al posto di FDL1, avviando un u-boot arbitrario.
La configurazione iniziale richiede un PC con 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 │
└──────────────────────────────────────────────────────────────────────────┘
Passaggi:
spl-unlock.bin e avviare il dispositivofdl2-dl.bin patchato (FDL2 con verifica del secure boot rimossa)Con splloader cancellato, il dispositivo entra in modalità download BootROM a ogni accensione. L'USB Host RP2350 gestisce automaticamente la catena di exploit:
┌──────────────────────────────────────────────────────────────────────────┐
│ 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. │
└──────────────────────────────────────────────────────────────────────────┘
Perché cancellare splloader?
┌─────────────┐ ┌──────────────────┐ ┌───────────────────┐ ┌──────────────┐
│ BootROM │ │ Exec Stub │ │ SPL Loader │ │ U-Boot │
│ Handshake │ ──► │ @0x3F28 (136B) │ ──► │ @0x28007000 │ ──► │ Boot OK │
│ CHECK_BAUD │ │ Bypass sig chk │ │ Replaces FDL1 │ │ │
└─────────────┘ └──────────────────┘ └───────────────────┘ └──────────────┘
CHECK_BAUD + CONNECT, stabilire la comunicazione BSL0x3F28, sfrutta CVE-2022-38694 per sovrascrivere l'indirizzo di ritorno, aggira la verifica della firma0x28007000, firma già aggirataQuesto progetto non include firmware patchato universale. Devi patchare tu stesso il firmware del tuo dispositivo.
Fai riferimento alla Wiki di TomKing062:
| Firmware | Patch | Output | Scopo |
|---|---|---|---|
| FDL2 (u-boot/lk) | NOP sui controlli di scrittura delle partizioni secure | fdl2-dl.bin | Fase 1: inviato tramite spd_dump per la scrittura delle partizioni |
| U-Boot | Patch do_cboot() per rimuovere il secure boot | Uboot modificato | Fase 1: scritto sul dispositivo, sostituisce l'uboot originale |
| SPL Loader | NOP signcheck() e controlli dei risultati | spl-unlock.bin | Fase 1 e 2: inviato tramite CVE-2022-38694 |
xxd -i spl-unlock.bin > fdl1_data.h
Aggiorna il nome dell'array e le macro in fdl1_data.h per corrispondere ai riferimenti nel codice.
Questo progetto attualmente usa l'exec stub UDX710 (custom_exec_3f28.bin).
Per adattarlo ad altri chip, sostituisci l'exec stub e l'indirizzo di caricamento in custom_exec_data.h:
| Piattaforma | Indirizzo Exec | Riferimento |
|---|---|---|
| UDX710 | 0x3F28 | Questo progetto (predefinito) |
| UMS312 / UMS512 | 0x3EE8 | exec_addr_v2 |
| UMS9230 | 0x65017F08 | exec_addr_v2 |
| SC9820E / SC9832E | 0x4F18 / 0x4EE8 | CVE-2022-38694 |