
CVE-2022-38694 Exploit reforzado - Autoflasher USB Host RP2350 para dispositivos Unisoc
Explotando la vulnerabilidad CVE-2022-38694 del BootROM de Unisoc mediante un Raspberry Pi RP2350 como USB Host para enviar automáticamente el SPL Loader al arrancar e iniciar un u-boot arbitrario.
Traslada la cadena del exploit — originalmente requería un PC + spd_dump — a un microcontrolador RP2350. Conecta el dispositivo, flashea automáticamente y admite flasheo continuo.
CVE-2022-38694 es un bypass de verificación de firma de un solo uso en el BootROM de Unisoc. Al enviar un exec stub a una dirección de memoria específica, se sobrescribe la dirección de retorno, se omiten las comprobaciones de firma y se permite que BootROM acepte y ejecute un FDL1 arbitrario.
Dato clave: FDL1 y SPL Loader comparten la misma dirección de carga (0x28007000), por lo que se puede enviar un SPL Loader parcheado en lugar de FDL1, arrancando un u-boot arbitrario.
La configuración inicial requiere 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 │
└──────────────────────────────────────────────────────────────────────────┘
Pasos:
spl-unlock.bin e iniciar el dispositivofdl2-dl.bin parcheado (FDL2 sin verificación de arranque seguro)Con el splloader borrado, el dispositivo entra en modo de descarga BootROM cada vez que se enciende. El RP2350 USB Host gestiona automáticamente la cadena del 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. │
└──────────────────────────────────────────────────────────────────────────┘
¿Por qué borrar splloader?
┌─────────────┐ ┌──────────────────┐ ┌───────────────────┐ ┌──────────────┐
│ BootROM │ │ Exec Stub │ │ SPL Loader │ │ U-Boot │
│ Handshake │ ──► │ @0x3F28 (136B) │ ──► │ @0x28007000 │ ──► │ Boot OK │
│ CHECK_BAUD │ │ Bypass sig chk │ │ Replaces FDL1 │ │ │
└─────────────┘ └──────────────────┘ └───────────────────┘ └──────────────┘
CHECK_BAUD + CONNECT, establece la comunicación BSL0x3F28, explota CVE-2022-38694 para sobrescribir la dirección de retorno y omitir la verificación de firma0x28007000, la firma ya está omitidaEste proyecto no incluye firmware parcheado universal. Debes parchear el firmware de tu dispositivo tú mismo.
Consulta la wiki de TomKing062:
| Firmware | Parche | Salida | Propósito |
|---|---|---|---|
| FDL2 (u-boot/lk) | NOP en las comprobaciones de escritura de particiones seguras | fdl2-dl.bin | Etapa 1: se envía mediante spd_dump para escribir particiones |
| U-Boot | Parchear do_cboot() para eliminar el arranque seguro | uboot modificado | Etapa 1: se escribe en el dispositivo y reemplaza el uboot de serie |
| SPL Loader | NOP en signcheck() y en las comprobaciones de resultado | spl-unlock.bin | Etapas 1 y 2: se envía mediante CVE-2022-38694 |
xxd -i spl-unlock.bin > fdl1_data.h
Actualiza el nombre del array y las macros en fdl1_data.h para que coincidan con las referencias del código.
Este proyecto utiliza actualmente el exec stub UDX710 (custom_exec_3f28.bin).
Para adaptarlo a otros chips, reemplaza el exec stub y la dirección de carga en custom_exec_data.h: