HI Cyber Con CTF 2026. Hardware.

GhostBus

The secure element was called locked. It sent its nonce in clear, and the lab opened the sealed record in 3 minutes.

Published 2 November 2026. Challenge by Hidden Investigations.

The brief

The vendor insists the secure element is locked and the sealed region cannot be read. A field engineer probed the hub's internal UART bus between the MCU and the secure element, and separately dumped the hub's external SPI NOR flash. Recover the hidden read, reverse the key derivation and open the sealed region. No brute force needed: all crypto is standard, and every byte you need is in the provided evidence.

  • ghost_bus.zip, 48 KB

In short

A smart lock hub kept a 48 byte sealed record in its flash. Its secure element sent the record nonce in clear over the internal UART, and the firmware built the AES key from that nonce and one constant. The lab joined the three pieces and decrypted the record.

Three files from one hub

The lab had three files from one smart lock hub. One captures the UART between the MCU and its secure element, one is a 1 MiB dump of the SPI flash, and one is the MCU firmware.

The nonce crossed the wire in clear

Decoded at 115,200 baud, each frame is AA 55, a length, a command, the payload and a CRC16. The hub sent command 0x10, and the secure element answered with the 16 byte record nonce. Every CRC checks out.

48 sealed bytes at 0x6A000

The board metadata at 0x7F000 names the sealed region, 48 bytes at 0x6A000. There the lab found three AES blocks of ciphertext, followed by the marker SEALED v2.

The key recipe in the firmware

The firmware hashes a 24 byte constant from its read only data, then the nonce, with SHA-256. The first 16 bytes of that digest are the AES-128 key, and the nonce doubles as the IV.

Swap every word, then CBC

Before decrypting, the firmware reverses the bytes of every 32 bit word, then runs AES in CBC mode. The lab confirmed both by running the firmware's own routines. Out came 41 flag bytes and 7 bytes of padding, an exact fit.

The insight

The locked secure element guarded nothing. It sent the nonce over the wire in clear, and the only other key input was a constant in the firmware.

The flag

hiCTF{gh0st_bu5_uart_n0nc3_r3v3al_9c3f12}

Loading