
Hardware Hacking CTF hcon2026hwctf - Explotación de RISCV Hazard3 (@Wren6991) por @b1n4ri0 @antoniovazquezblanco & @therealdreg
Si te gustan los CTF de hardware, aquí tienes el primer desafío público del HC0N CTF 2026 con desafíos de explotación RISC-V RP2350 (bajo nivel)
Hemos intentado que el desafío no sea demasiado elitista ni difícil, para que los cientos de asistentes a la conferencia tengan la oportunidad de resolver los desafíos. Espero que lo hayamos conseguido.
Si quieres ejecutar el CTF en casa, consigue una Raspberry Pi Pico 2, flashea este firmware y ¡no leas los write-ups! -> ctf.uf2
Nota para cualquiera que use una placa (RP2350/RP2354...) diferente a la del CTF:
El PCB del CTF tiene un LED SMD en el GPIO 25, debes tener un LED en ese GPIO

Cuando termines este CTF, si te ha gustado, aquí tienes otro similar con desafíos diferentes: https://github.com/therealdreg/ctfhardwarehackingcon2026
ADVERTENCIA: Los siguientes write-ups contienen spoilers de los desafíos. Si quieres resolverlos por tu cuenta, te recomendamos no leerlos hasta que hayas completado el CTF.
Primer Ganador: @mrexodia (Duncan Ogilvie) writeups/first_winner.md

Premio: kit keylogger de hardware okhi USB/PS2 + CWP (Certified WifiChallenge Professional) https://github.com/therealdreg/okhi
Segundo Ganador: @M3RINOOOOO (Cristobal Merino Saez) writeups/second_winner.md

Premio: Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, PICO2 H, CWP (Certified WifiChallenge Professional)
Tercer Ganador: @p4bl0vx (Pablo Moya Lopez) writeups/third_winner.md

Premio: Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, CWP (Certified WifiChallenge Professional).
Aquí te proporcionaremos algo de ayuda para que el Hardware Hacking CTF en HCON 2026 sea más fácil.

Un host Linux debería ser tu primera opción ;-), el depurado funciona mejor.
TeraTerm: Setup -> Terminal -> Transmit: CR+LF y [x] Local echo

Otros:
cutecom:``` sudo apt-get update sudo apt-get install cutecom
# ADVERTENCIA
Uno de los retos requiere depuración de hardware. Si estás haciendo el reto desde casa (sin un compañero de equipo que tenga otra placa), entonces para resolver ese reto también necesitarás comprar estos dos artículos. (Si no los compras, no pasa nada, pero no podrás resolver ese reto específico.)
- https://www.tiendatec.es/raspberry-pi-pico/2025-raspberry-pi-debug-probe-5056561803265.html
- https://www.tiendatec.es/raspberry-pi-pico/1979-cable-depuracion-pico-jtag-jst-sh-1-0-a-dupont-hembra-15cm-8472496024846.html
# Acerca de los scripts
Las herramientas incluidas en este repositorio fueron desarrolladas por @b1n4ri0 para la comunidad y específicamente para el HCON 2026 Hardware Hacking Challenge.
# Explotando el procesador RP2350 RISCV Hazard3 (@Wren6991) de 3 etapas RV32IMACZb* con depuración
RISCV Hazard3 es un procesador RV32IMACZb* de 3 etapas con soporte de depuración. Se utiliza en el microcontrolador RP2350 que se encuentra en la placa HCON2026HWCTF.
# Volcado de firmware RISCV Hazard3 usando picotool
Volcar firmware de dispositivos RP2350 con `picotool` es un proceso sencillo. En esta sección, aprenderás a hacerlo de manera eficaz.
Nota: `picotool` interactúa con dispositivos RP2350 (y RP2040) solo cuando están en modo BOOTSEL o si el firmware en ejecución incluye soporte USB stdio del Pico SDK.
## Compilando picotool
Instala las herramientas de compilación y las librerías necesarias mediante tu gestor de paquetes favorito.```bash
sudo apt-get update
sudo apt install build-essential pkg-config libusb-1.0-0-dev cmake -y
Crea un directorio dedicado para mantener tus herramientas organizadas. Esto asegura que las rutas utilizadas en pasos posteriores sean correctas.```bash cd $HOME mkdir rptools cd rptools
Clona los proyectos `picotool` y `pico-sdk`; necesitamos tanto la herramienta en sí como el SDK. Ten en cuenta que `picotool` requiere `pico-sdk` para compilar correctamente.```bash
git clone https://github.com/raspberrypi/picotool.git
git clone https://github.com/raspberrypi/pico-sdk.git
cd picotool
Crea el directorio de compilación y ejecuta CMake.
Importante: Debemos usar la bandera -DPICO_SDK_PATH para decirle a CMake exactamente dónde descargamos el SDK en el paso anterior, o podemos establecer la variable de entorno PICO_SDK_PATH.```bash
mkdir build
cd build
cmake -DPICO_SDK_PATH=$HOME/rptools/pico-sdk ..
sudo make install
Por defecto, acceder a dispositivos USB requiere privilegios de root. Copia el archivo de reglas de udev para permitir ejecutar `picotool` sin usar `sudo`.```bash
sudo cp ../udev/60-picotool.rules /etc/udev/rules.d/
Recarga las reglas de udev (o desconecta y vuelve a conectar tu dispositivo) y comprueba la versión ejecutando picotool version para asegurarte de que todo funciona:```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-15.2.0, Release)
## Uso del binario precompilado
Si prefieres omitir el proceso de compilación, puedes descargar el binario precompilado desde el [repositorio oficial](https://github.com/raspberrypi/pico-sdk-tools/releases).```bash
gunzip picotool-2.2.0-a4-x86_64-lin.tar.gz
tar -xf picotool-2.2.0-a4-x86_64-lin.tar
cd picotool
Ejecutar picotool version debería funcionar como se espera:```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-11.4.0, Release)
## Habilitar el modo BOOTSEL en RP2350
Para realizar operaciones como volcar firmware, `picotool` requiere que el dispositivo esté en modo BOOTSEL. Sin embargo, `picotool` también puede interactuar con el dispositivo si el firmware que se está ejecutando incluye soporte de USB stdio del Pico SDK.
A continuación, mencionaré varias formas de activar este modo. Elige la que te parezca más adecuada para tu caso o simplemente la que te funcione.
Si tu placa **no está en modo BOOTSEL**, pero contiene el soporte de USB stdio**,** verás una salida como esta al intentar ejecutar comandos de `picotool`:```bash
$ ./picotool info
No accessible RP-series devices in BOOTSEL mode were found.
but:
RP2350 device at bus 1, address 23 appears to have a USB serial connection, so consider -f (or -F) to force reboot in order to run the command.
Este es el método de hardware estándar utilizado:
BOOTSEL o BOOT.BOOTSEL.Alternativa (si no quieres desenchufar la placa):