
CTF di hacking hardware hcon2026hwctf - Exploit di RISCV Hazard3 (@Wren6991) a cura di @b1n4ri0 @antoniovazquezblanco e @therealdreg
Se ti piacciono i CTF hardware, ecco la prima sfida pubblica dell'HC0N CTF 2026 con sfide di exploitation su RISC-V RP2350 (basso livello)
Abbiamo cercato di rendere la sfida non troppo elitaria o difficile, così che le centinaia di partecipanti alla conferenza avessero la possibilità di risolverla. Speriamo di esserci riusciti.
Se vuoi eseguire il CTF a casa, prendi un Raspberry Pi Pico 2, flasha questo firmware e non leggere i write-up! -> ctf.uf2
Nota per chiunque usi una board (RP2350/RP2354...) diversa da quella del CTF:
Il PCB del CTF ha un LED SMD sul GPIO 25, devi avere un LED su quel GPIO

Quando finisci questo CTF, se ti è piaciuto, ecco un altro simile con sfide diverse: https://github.com/therealdreg/ctfhardwarehackingcon2026
ATTENZIONE: I seguenti write-up contengono spoiler sulle sfide. Se vuoi risolverle da solo, ti consigliamo di non leggerli finché non hai completato il CTF.
Primo Vincitore: @mrexodia (Duncan Ogilvie) writeups/first_winner.md

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

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

Premio: Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, CWP (Certified WifiChallenge Professional).
Qui ti forniremo alcuni aiuti per rendere più facile il Hardware Hacking CTF all'HCON 2026.

Un host Linux dovrebbe essere la tua prima scelta ;-), il debug funziona meglio.
TeraTerm: Setup -> Terminal -> Transmit: CR+LF & [x] Local echo

Altri:
cutecom:``` sudo apt-get update sudo apt-get install cutecom
# AVVERTENZA
Una delle sfide richiede il debug hardware. Se stai affrontando la sfida da casa (senza un compagno di squadra che abbia un'altra board), per risolverla dovrai anche acquistare questi due componenti. (Se non li acquisti, nessun problema—ma non potrai risolvere quella specifica sfida.)
- 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
# Informazioni sugli script
Gli strumenti inclusi in questo repository sono stati sviluppati da @b1n4ri0 per la community e specificamente per la HCON Hardware Hacking Challenge 2026.
# Sfruttare il processore RP2350 RISCV Hazard3 (@Wren6991) a 3 stadi RV32IMACZb* con supporto debug
RISCV Hazard3 è un processore RV32IMACZb* a 3 stadi con supporto debug. Viene utilizzato nel microcontrollore RP2350 presente sulla board HCON2026HWCTF.
# Estrarre il firmware RISCV Hazard3 con picotool
Estrarre il firmware dai dispositivi RP2350 con `picotool` è un processo semplice. In questa sezione imparerai come farlo in modo efficace.
Nota: `picotool` interagisce con i dispositivi RP2350 (e RP2040) solo quando sono in modalità BOOTSEL o se il firmware in esecuzione include il supporto USB stdio del Pico SDK.
## Compilazione di picotool
Installa gli strumenti di compilazione e le librerie necessari tramite il tuo gestore di pacchetti preferito.```bash
sudo apt-get update
sudo apt install build-essential pkg-config libusb-1.0-0-dev cmake -y
Crea una directory dedicata per mantenere organizzati i tuoi strumenti. Ciò garantisce che i percorsi utilizzati nei passaggi successivi siano corretti.```bash cd $HOME mkdir rptools cd rptools
Clona i progetti `picotool` e `pico-sdk`, ci servono sia il tool stesso che l'SDK. Nota che `picotool` richiede `pico-sdk` per compilare correttamente.```bash
git clone https://github.com/raspberrypi/picotool.git
git clone https://github.com/raspberrypi/pico-sdk.git
cd picotool
Crea la directory di build ed esegui CMake.
Importante: dobbiamo usare il flag -DPICO_SDK_PATH per dire a CMake esattamente dove abbiamo scaricato l'SDK nel passaggio precedente, oppure possiamo impostare PICO_SDK_PATH nell'ambiente.```bash
mkdir build
cd build
cmake -DPICO_SDK_PATH=$HOME/rptools/pico-sdk ..
sudo make install
Per impostazione predefinita, l'accesso ai dispositivi USB richiede privilegi di root. Copiare il file delle regole udev per consentire l'esecuzione di `picotool` senza usare `sudo`.```bash
sudo cp ../udev/60-picotool.rules /etc/udev/rules.d/
Ricarica le regole udev (o scollega e ricollega il tuo dispositivo) e controlla la versione eseguendo picotool version per assicurarti che tutto funzioni:```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-15.2.0, Release)
## Utilizzo del binario precompilato
Se preferisci saltare il processo di compilazione, puoi scaricare il binario precompilato dal [repository ufficiale](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
L'esecuzione di picotool version dovrebbe funzionare come previsto:```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-11.4.0, Release)
## Abilitare la modalità BOOTSEL su RP2350
Per eseguire operazioni come il dump del firmware, `picotool` richiede che il dispositivo sia in modalità BOOTSEL. Tuttavia, `picotool` può anche interagire con il dispositivo se il firmware attualmente in esecuzione include il supporto USB stdio del Pico SDK.
Di seguito, menzionerò diversi modi per attivare questa modalità. Scegli quello che sembra più adatto al tuo caso o semplicemente quello che funziona per te.
Se la tua scheda **non è in modalità BOOTSEL**, ma include il supporto USB stdio**,** vedrai un output come questo quando provi a eseguire i comandi `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.
Questo è il metodo hardware standard utilizzato:
BOOTSEL o BOOT.BOOTSEL.Alternativa (se non vuoi scollegare la scheda):
BOOTSEL.RESET o RST.BOOTSEL.