EmbedFuzz: High Speed Fuzzing Through Transplantation
Florian Hofhammer, Qinying Wang, Atri Bhattacharyya, Majid Salehi, Bruno Crispo, Manuel Egele, Mathias Payer, Marcel Busch
TL;DR
EmbedFuzz tackles the core challenge of fuzzing MCU firmware by transplanting Cortex-M binaries to Cortex-A hosts for native-speed execution, preserving address space layout and essential MCU semantics through static binary rewriting and a specialized runtime. Its hybrid design combines transplantation with HAL-based high-level peripheral modeling, enabling scalable fuzzing while maintaining fidelity in instruction execution and interrupt handling. Evaluated against state-of-the-art MCU fuzzers, EmbedFuzz achieves up to 8x throughput and substantial energy savings, while still enabling OS-like introspection and robust crash triage. The approach reduces hardware dependency and engineering effort for test campaigns, offering practical gains for security testing of embedded firmware across many devices and HAL libraries.
Abstract
Dynamic analysis and especially fuzzing are challenging tasks for embedded firmware running on modern low-end Microcontroller Units (MCUs) due to performance overheads from instruction emulation, the difficulty of emulating the vast space of available peripherals, and low availability of open-source embedded firmware. Consequently, efficient security testing of MCU firmware has proved to be a resource- and engineering-heavy endeavor. EmbedFuzz introduces an efficient end-to-end fuzzing framework for MCU firmware. Our novel firmware transplantation technique converts binary MCU firmware to a functionally equivalent and fuzzing-enhanced version of the firmware which executes on a compatible high-end device at native performance. Besides the performance gains, our system enables advanced introspection capabilities based on tooling for typical Linux user space processes, thus simplifying analysis of crashes and bug triaging. In our evaluation against state-of-the-art MCU fuzzers, EmbedFuzz exhibits up to eight-fold fuzzing throughput while consuming at most a fourth of the energy thanks to its native execution.
