Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
spd_flasher — CVE-2022-38694 Exploit reforzado - Autoflasher USB Host RP2350 para dispositivos Unisoc | Kitploit
Herramientas/GitHubGitHub/leochen-coremind/spd_flasher
Seguridad de Sistemas EmbebidosExplotaciónIngeniería InversaHacking de HardwareSeguridad MóvilAprendizaje y Educación
GitHubleochen-coremind/spd_flasher

spd_flasher

CVE-2022-38694 Exploit reforzado - Autoflasher USB Host RP2350 para dispositivos Unisoc

Ver Repositorio
31hace 15 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2022-38694 Exploit Endurecido — Autoflasher USB Host RP2350

README en chino

Tutorial

  • Tutorial de ingeniería inversa de la cadena de arranque de UNISOC UDX710 y de arranque endurecido con RP2350

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.

Cómo funciona

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.

Proceso de endurecimiento (dos etapas)

Etapa 1: Desbloqueo inicial (PC + spd_dump)

La configuración inicial requiere un PC con spd_dump:

root@kitploit:~
┌──────────────────────────────────────────────────────────────────────────┐
│                    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:

  1. Use CVE-2022-38694 para enviar spl-unlock.bin e iniciar el dispositivo
  2. Envíe el fdl2-dl.bin parcheado (FDL2 sin verificación de arranque seguro)
  3. Use FDL2 para escribir u-boot sin arranque seguro en la partición uboot
  4. Borre la partición splloader → el dispositivo pierde el arranque normal y entra en modo DL de BootROM en cada encendido

Etapa 2: Operación endurecida (autoflash RP2350)

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:

root@kitploit:~
┌──────────────────────────────────────────────────────────────────────────┐
│                   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?

  • Cadena de arranque normal: BootROM → SPL Loader → u-boot → Sistema
  • SPL Loader verifica la firma de u-boot: rechazará un u-boot modificado
  • Con el splloader borrado, BootROM no encuentra el SPL y cae en modo de descarga
  • CVE-2022-38694 envía spl-unlock (omite la comprobación de firma) → consigue arrancar u-boot sin arranque seguro

Cadena del exploit (ejecución en RP2350)

root@kitploit:~
┌─────────────┐     ┌──────────────────┐     ┌───────────────────┐     ┌──────────────┐
│  BootROM    │     │  Exec Stub       │     │  SPL Loader       │     │  U-Boot      │
│  Handshake  │ ──► │  @0x3F28 (136B)  │ ──► │  @0x28007000      │ ──► │  Boot OK     │
│  CHECK_BAUD │     │  Bypass sig chk  │     │  Replaces FDL1    │     │              │
└─────────────┘     └──────────────────┘     └───────────────────┘     └──────────────┘
  1. Handshake del BootROM — CHECK_BAUD + CONNECT, establece la comunicación BSL
  2. Enviar exec stub — Carga 136 bytes en 0x3F28, explota CVE-2022-38694 para sobrescribir la dirección de retorno y omitir la verificación de firma
  3. Enviar SPL Loader — FDL1 y SPL Loader comparten la dirección de carga 0x28007000, la firma ya está omitida
  4. Arrancar U-Boot — spl-unlock omite las comprobaciones de firma y arranca u-boot con el arranque seguro eliminado

Requisitos previos: parchear el firmware

Este proyecto no incluye firmware parcheado universal. Debes parchear el firmware de tu dispositivo tú mismo.

Tutorial de parcheo

Consulta la wiki de TomKing062:

  • 🇬🇧 patch_do_cboot — SPL (inglés)
  • 🇨🇳 patch_do_cboot — SPL (chino)

Firmware a parchear

Convertir spl-unlock.bin en cabecera

root@kitploit:~
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.

Plataformas compatibles

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:

Lista de soporte completa: SupportList

Requisitos de hardware

ComponenteDescripción
Placa RP2350p. ej., Raspberry Pi Pico 2
Cable USB HostOTG o modificación de hardware para el USB Host del RP2350
Dispositivo SPD objetivocon splloader borrado, entra automáticamente en modo DL de BootROM al encenderse

Configuración de pines

PinFunción
USB D+/D-Conectar al dispositivo SPD objetivo
GP4 (TX)Salida de depuración UART
GP5 (RX)Entrada de depuración UART

El puerto USB se utiliza para la comunicación Host. Los logs de depuración se emiten por UART1 (GP4/GP5, 115200 bps).

Compilación

Requisitos previos

  • Pico SDK v2.2.0+
  • CMake 3.13+
  • Cadena de herramientas GCC para ARM

Compilar

root@kitploit:~
cd spd_flasher
mkdir build && cd build
cmake .. -DTARGET_CHIP=rp2350
make -j$(nproc)

Salida: spd_flasher.uf2 (arrastrar y soltar vía BOOTSEL) / spd_flasher.bin (programador)

Uso

  1. Completa la Etapa 1 (desbloqueo inicial + borrado de splloader) en el PC
  2. Flashea spd_flasher.uf2 en el RP2350
  3. Conecta el RP2350 al dispositivo objetivo mediante un cable USB Host
  4. Enciende el dispositivo → modo DL de BootROM automático → el RP2350 ejecuta la cadena del exploit
  5. Al terminar se reinicia automáticamente; conecta inmediatamente el siguiente dispositivo

¿Por qué RP2350?

Estructura del proyecto

root@kitploit:~
spd_flasher/
├── main.c               # Main program, USB Host init & device management
├── spd_protocol.c        # SPD BSL protocol (HDLC framing, state machine)
├── spd_protocol.h        # Protocol definitions
├── tusb_config.h         # TinyUSB Host configuration
├── custom_exec_data.h    # Exec Stub data (136B @0x3F28)
├── fdl1_data.h           # SPL Loader data (spl-unlock.bin @0x28007000)
├── spl-unlock.bin        # SPL Loader raw binary
├── CMakeLists.txt        # CMake build configuration
└── signing_key.pem / aes_key.bin / iv_salt.bin  # RP2350 secure boot keys

Agradecimientos

  • CVE-2022-38694 Unlock Bootloader — TomKing062
  • NCC Group Research — Descubrimiento de la vulnerabilidad
  • Raspberry Pi Pico SDK
  • TinyUSB

Descargo de responsabilidad

Este proyecto es únicamente para investigación de seguridad y fines educativos. Los usuarios deben cumplir todas las leyes y normativas aplicables. El autor no asume ninguna responsabilidad por los daños directos o indirectos derivados del uso de esta herramienta.

Licencia

Este proyecto está licenciado bajo la GNU General Public License v3.0.

Descargar herramienta
FirmwareParcheSalidaPropósito
FDL2 (u-boot/lk)NOP en las comprobaciones de escritura de particiones segurasfdl2-dl.binEtapa 1: se envía mediante spd_dump para escribir particiones
U-BootParchear do_cboot() para eliminar el arranque segurouboot modificadoEtapa 1: se escribe en el dispositivo y reemplaza el uboot de serie
SPL LoaderNOP en signcheck() y en las comprobaciones de resultadospl-unlock.binEtapas 1 y 2: se envía mediante CVE-2022-38694
PlataformaDirección de ejecuciónReferencia
UDX7100x3F28Este proyecto (por defecto)
UMS312 / UMS5120x3EE8exec_addr_v2
UMS92300x65017F08exec_addr_v2
SC9820E / SC9832E0x4F18 / 0x4EE8CVE-2022-38694
PC + spd_dumpRP2350 Endurecido
TamañoRequiere PCUn solo MCU
OperaciónComandos manualesEncender = ejecutar
ContinuidadManual por dispositivoReinicio automático
DespliegueIncómodoListo para producción
Coste—~$3