Skip to content

Embedded & IoT Systems

At a Glance

Embedded and IoT software is deployed across billions of devices in critical infrastructure, healthcare, transportation, and consumer electronics, yet it receives disproportionately less security research than server or desktop software. Proprietary codebases, specialized hardware requirements, limited debug interfaces, and the absence of modern exploit mitigations (ASLR, stack canaries, NX) create significant barriers to entry. This category covers 8 targets spanning bootloaders, real-time operating systems, router firmware, and industrial protocol implementations.

Category Overview

Embedded systems power routers, industrial controllers, vehicles, medical devices, and consumer IoT products. Unlike general-purpose computing platforms, embedded targets typically run with full privileges (often as a single flat binary with no process isolation), lack modern memory-safety mitigations, and are difficult or impossible to update after deployment. Many run on architectures (ARM Cortex-M, MIPS, RISC-V) where tooling support lags behind x86.

The vulnerability patterns in embedded software differ from desktop and server targets. Firmware often contains hardcoded credentials, unauthenticated management interfaces, and memory corruption bugs in custom protocol parsers. Industrial protocols were designed for closed networks and lack authentication or integrity checks entirely, making any network-reachable implementation a potential entry point. Automotive systems process safety-critical data on bus architectures with no sender authentication.

The combination of high deployment volume, high privilege context, and low research coverage makes this category especially important for vulnerability research prioritization. The gap between risk and research investment is wider here than in any other category covered in this section.

Target Analysis

U-Boot

U-Boot (Das U-Boot) is the most widely used open-source bootloader for embedded Linux systems. It initializes hardware, loads the kernel, and provides a boot environment for ARM, MIPS, RISC-V, PowerPC, and x86 platforms. U-Boot runs before any operating system protections are active, meaning a vulnerability at this level permits persistent, pre-OS compromise that survives reinstallation.

Criterion Score Rationale Weighted
Deployment Scale 4 Runs on hundreds of millions of embedded devices, routers, SBCs, and development boards 12
Cross-Platform Presence 5 Supports ARM, MIPS, RISC-V, PowerPC, x86, and others 5
Protocol/Input Exposure 3 Parses boot images, device trees, environment variables; network boot (TFTP, HTTP) when enabled 9
Privilege Level 5 Executes with full hardware access before any OS is loaded 10
Dependency Footprint 3 Not a library, but deeply embedded in device boot chains 6
Codebase Complexity 4 ~1.5M lines of C, supports hundreds of board configurations 4
Historical CVE Density 3 Moderate CVE count; notable vulnerabilities in verified boot bypass and buffer overflows in image parsing 6

Composite Score: 52 (High)

U-Boot is integrated into Google's OSS-Fuzz with limited harness coverage. Most fuzzing effort has focused on image parsing (FIT images, ext4 filesystem), leaving network boot protocols and device tree parsing largely untested.

Verified Boot Bypass Research

U-Boot's verified boot implementation is a high-value target. Bypass vulnerabilities enable persistent firmware compromise on devices that otherwise enforce secure boot chains. Research into FIT image signature verification and chain-of-trust logic is under-explored.

EDK II / UEFI Firmware

EDK II is the open-source reference implementation for UEFI firmware, used in virtually all modern PCs and servers. UEFI firmware executes before the operating system and persists in SPI flash, making vulnerabilities at this level capable of surviving OS reinstallation and disk replacement.

Criterion Score Rationale Weighted
Deployment Scale 5 Present on nearly every x86 PC and server manufactured in the past decade 15
Cross-Platform Presence 3 Primarily x86/x64, with growing ARM server support (AArch64) 3
Protocol/Input Exposure 3 Parses UEFI variables, boot images, PXE/network boot, USB device descriptors 9
Privilege Level 5 Runs in SMM (System Management Mode) and pre-OS context with unrestricted hardware access 10
Dependency Footprint 4 Reference implementation used by all major BIOS vendors (AMI, Insyde, Phoenix) 8
Codebase Complexity 5 ~3M lines of C, complex driver model, hundreds of protocol interfaces 5
Historical CVE Density 4 Regular high-severity CVEs including SMM callouts, variable parsing overflows, and PixieFail network stack vulnerabilities (PixieFail, 2024) 8

Composite Score: 58 (Critical)

EDK II has received increasing research attention following high-profile vulnerability disclosures. Intel's HBFA (Host-Based Firmware Analyzer) and the HBFA-FL project have demonstrated fuzzing of UEFI modules, but coverage remains limited relative to the codebase size. The SMM attack surface is particularly under-tested due to the difficulty of emulating the SMM environment.

FreeRTOS

FreeRTOS is the most widely deployed real-time operating system, running on microcontrollers in IoT devices, industrial sensors, medical equipment, and consumer electronics. AWS acquired FreeRTOS in 2017 and extended it with cloud connectivity libraries (coreMQTT, coreHTTP, AWS IoT Device SDK).

Criterion Score Rationale Weighted
Deployment Scale 5 Deployed on billions of microcontrollers; most popular RTOS by survey data 15
Cross-Platform Presence 5 Supports 40+ microcontroller architectures (ARM Cortex-M, RISC-V, Xtensa, others) 5
Protocol/Input Exposure 3 Core kernel has limited direct exposure; FreeRTOS+TCP and AWS IoT libraries parse network protocols 9
Privilege Level 4 Runs in privileged mode on most MCUs; no MMU-based isolation on Cortex-M class devices 8
Dependency Footprint 4 Foundational OS layer for thousands of IoT products and industrial devices 8
Codebase Complexity 2 Small, focused kernel (~15k lines); complexity increases with add-on libraries 2
Historical CVE Density 3 Notable CVEs in FreeRTOS+TCP stack (Zimperium, 2018); kernel itself has fewer issues 6

Composite Score: 53 (High)

FreeRTOS+TCP and AWS IoT Libraries

The FreeRTOS kernel is well-audited, but the networking and cloud connectivity libraries (FreeRTOS+TCP, coreMQTT, coreHTTP) present significant untested attack surface. These libraries parse complex protocols on devices with no memory protection, making vulnerabilities directly exploitable.

Zephyr RTOS

Zephyr is a Linux Foundation project providing a scalable RTOS for resource-constrained IoT devices. It includes a full networking stack (Bluetooth, Wi-Fi, Thread, 6LoWPAN), USB support, and a growing ecosystem of drivers.

Criterion Score Rationale Weighted
Deployment Scale 3 Growing adoption but significantly smaller installed base than FreeRTOS 9
Cross-Platform Presence 4 Supports ARM, RISC-V, x86, ARC, Xtensa; 450+ board configurations 4
Protocol/Input Exposure 4 Built-in Bluetooth, Wi-Fi, CoAP, LwM2M, and USB stacks parse untrusted input directly 12
Privilege Level 4 Runs in privileged mode; optional MPU-based isolation on supported hardware 8
Dependency Footprint 3 Increasing use in commercial IoT products; NXP, Nordic, Intel reference designs 6
Codebase Complexity 3 ~500k lines of C; complex subsystem architecture but modern codebase with CI 3
Historical CVE Density 3 Regular CVE disclosures in Bluetooth, USB, and network stacks 6

Composite Score: 48 (High)

Zephyr has a dedicated security process and some fuzzing via OSS-Fuzz, primarily targeting the Bluetooth stack. The USB, CoAP, and LwM2M protocol implementations remain under-fuzzed.

OpenWrt

OpenWrt is an open-source Linux distribution for embedded devices, primarily routers and access points. It runs on millions of consumer and enterprise networking devices and is the upstream basis for many vendor-customized router firmwares.

Criterion Score Rationale Weighted
Deployment Scale 4 Millions of active installations; basis for vendor firmwares on many more devices 12
Cross-Platform Presence 3 Primarily MIPS and ARM, with some x86 support 3
Protocol/Input Exposure 5 Network-facing by design: handles routing, DNS, DHCP, firewall, VPN, and web admin interface 15
Privilege Level 5 Runs as the entire operating system with root-equivalent access 10
Dependency Footprint 3 Basis for downstream vendor firmwares; packages used across embedded Linux 6
Codebase Complexity 4 Full Linux distribution with custom init system (procd), web interface (LuCI), and package management 4
Historical CVE Density 3 Regular CVEs in LuCI web interface, uhttpd, and included network services 6

Composite Score: 56 (Critical)

LuCI Web Interface and uhttpd

OpenWrt's LuCI administration interface and uhttpd web server are directly network-reachable on millions of routers. These components parse HTTP requests, JSON-RPC, and multipart form data, yet have received minimal systematic fuzzing compared to mainstream web servers.

OPC UA Implementations

OPC UA (Open Platform Communications Unified Architecture) is the dominant interoperability standard for industrial automation and SCADA systems. Open-source implementations include open62541 (C), Eclipse Milo (Java), and the OPC Foundation's reference stack (.NET/C).

Criterion Score Rationale Weighted
Deployment Scale 3 Widely deployed in industrial environments, but limited to ICS/SCADA sector 9
Cross-Platform Presence 3 Runs on Windows, Linux, and embedded platforms in industrial controllers 3
Protocol/Input Exposure 5 Network-facing protocol server parsing complex binary-encoded messages and X.509 certificates 15
Privilege Level 3 Typically runs as a service with elevated privileges; controls physical processes 6
Dependency Footprint 3 Core integration point for industrial systems; compromise affects physical process control 6
Codebase Complexity 3 open62541 is ~100k lines of C; specification is large and complex 3
Historical CVE Density 3 Growing number of CVEs as research attention increases; Claroty and Nozomi Networks have disclosed multiple issues 6

Composite Score: 48 (High)

Knowledge Gap

Deployment data for OPC UA implementations is difficult to verify. Industrial environments are opaque to external researchers, and many deployments use proprietary vendor stacks rather than open-source implementations. The true attack surface may be significantly larger than what is visible through open-source analysis.

Modbus/DNP3 Implementations

Modbus and DNP3 are legacy industrial protocols used extensively in power grids, water treatment, manufacturing, and building automation. Open-source implementations include libmodbus (C), pymodbus (Python), and OpenDNP3 (C++).

Criterion Score Rationale Weighted
Deployment Scale 3 Ubiquitous in industrial control but limited to ICS sector 9
Cross-Platform Presence 2 Primarily embedded controllers and Windows/Linux SCADA workstations 2
Protocol/Input Exposure 4 Network-facing; Modbus/TCP and DNP3 over TCP parse binary frames from potentially untrusted sources 12
Privilege Level 3 Controls physical processes (valves, breakers, pumps); compromise has physical consequences 6
Dependency Footprint 2 Used in industrial integrations; not a general-purpose library 4
Codebase Complexity 2 Protocol implementations are relatively small; libmodbus is ~5k lines 2
Historical CVE Density 2 Limited public CVE history for open-source implementations; vendor stacks are a different matter 4

Composite Score: 39 (Medium)

Modbus and DNP3 were designed for trusted, isolated networks and include no authentication, encryption, or integrity checking. As industrial networks converge with IP networks, these protocols are increasingly exposed to adversarial input.

Industrial Protocol Fuzzing

Systematic fuzzing of Modbus and DNP3 implementations is a high-opportunity area. Grammar-aware fuzzing techniques (AFLNet, Boofuzz) are well-suited to these binary protocols, but few published fuzzing campaigns target them. The physical consequences of vulnerabilities in these implementations (disruption of power grids, water systems) make this a critical gap.

Automotive CAN Bus Implementations

The Controller Area Network (CAN) bus is the primary in-vehicle network used for communication between electronic control units (ECUs) in automobiles. CAN bus implementations appear in engine management, braking systems, airbag controllers, and infotainment systems. Open-source stacks include Linux SocketCAN and various AUTOSAR-compliant implementations.

Criterion Score Rationale Weighted
Deployment Scale 4 Present in virtually every modern vehicle worldwide; billions of ECUs in active use 12
Cross-Platform Presence 2 Primarily automotive-specific microcontrollers; Linux SocketCAN for testing/gateway use 2
Protocol/Input Exposure 3 Processes messages from the vehicle bus; traditionally air-gapped but increasingly connected via telematics 9
Privilege Level 4 Direct control over safety-critical vehicle systems (braking, steering, engine) 8
Dependency Footprint 3 Foundational bus protocol for automotive electronics; AUTOSAR stack widely reused 6
Codebase Complexity 3 CAN protocol itself is simple, but ECU firmware stacks and AUTOSAR middleware are complex 3
Historical CVE Density 2 Limited public CVE data; notable research includes Miller and Valasek's Jeep Cherokee work (2015) and follow-on studies 4

Composite Score: 44 (High)

Knowledge Gap

Automotive CAN bus research is constrained by the proprietary nature of ECU firmware and the specialized hardware required for testing. Public vulnerability data significantly underrepresents the true risk. Most research is conducted by automotive OEMs and Tier 1 suppliers internally, with limited disclosure.

Category Summary

Target Score Tier
EDK II / UEFI Firmware 58 Critical
OpenWrt 56 Critical
FreeRTOS 53 High
U-Boot 52 High
Zephyr RTOS 48 High
OPC UA Implementations 48 High
Automotive CAN Bus 44 High
Modbus/DNP3 Implementations 39 Medium

The embedded and IoT category contains two Critical-tier targets, five High-tier targets, and one Medium-tier target. The concentration in the High tier reflects the combination of significant deployment and impact with moderate-to-low research coverage that characterizes this category.

Implications

Firmware analysis tools are maturing but automated fuzzing remains challenging. Tools such as Ghidra (NSA's open-source reverse engineering framework), EMBA (firmware security analyzer), and firmware-mod-kit have improved static analysis of firmware images. However, dynamic analysis and automated fuzzing of embedded targets still require significant manual effort to set up rehosting environments.

Rehosting and emulation are improving accessibility. Projects like QEMU, Unicorn Engine, and PANDA enable partial or full emulation of embedded targets, reducing the need for physical hardware. AFL++'s Unicorn mode supports fuzzing of firmware code in emulation. These approaches are narrowing the gap between embedded and desktop/server targets for fuzzing workflows, though significant per-target engineering effort is still required.

Industrial protocol implementations are particularly under-researched. OPC UA, Modbus, and DNP3 implementations control physical processes in critical infrastructure. The convergence of operational technology (OT) with IP networking has expanded the attack surface of these protocols, but security research has not kept pace. Grammar-aware fuzzing and stateful protocol fuzzing techniques are directly applicable here.

Automotive security research faces unique barriers. The proprietary nature of ECU firmware, the cost of test vehicles, and the legal complexity of automotive security research limit the pool of active researchers. Standardization efforts around AUTOSAR and ISO/SAE 21434 may improve research accessibility over time.

For related discussion of hardware-level security research and side-channel analysis techniques applicable to embedded targets, see Hardware & Side-Channel.


tags: - glossary


Glossary

Term Definition
AFL American Fuzzy Lop, coverage-guided fuzzer
ASan AddressSanitizer, memory error detector
CVE Common Vulnerabilities and Exposures
AFL++ Community-maintained successor to AFL, the de facto standard coverage-guided fuzzer
AEG Automatic Exploit Generation, automated creation of working exploits from vulnerability information
ANTLR ANother Tool for Language Recognition, parser generator used by grammar-aware fuzzers like Superion
AST Abstract Syntax Tree, tree representation of source code structure used by static analyzers
BOD Binding Operational Directive, mandatory cybersecurity directives issued by CISA
BOF Buffer Overflow, writing data beyond allocated memory bounds, a common memory safety vulnerability
CFG Control Flow Graph, directed graph representing all possible execution paths through a program
CGC Cyber Grand Challenge, DARPA competition for autonomous vulnerability detection and patching
ClusterFuzz Google's distributed fuzzing infrastructure that powers OSS-Fuzz
CodeQL GitHub's query-based static analysis engine that treats code as a queryable database
CFAA Computer Fraud and Abuse Act, US federal law governing computer security violations
CNA CVE Numbering Authority, organization authorized to assign CVE IDs
CNNVD China National Vulnerability Database of Information Security
CNVD China National Vulnerability Database
Concolic Concrete + Symbolic, execution that runs concrete values while tracking symbolic constraints
Corpus Collection of seed inputs used by a coverage-guided fuzzer as the basis for mutation
Coverity Synopsys commercial static analysis platform with deep interprocedural analysis
CPG Code Property Graph, unified representation combining AST, CFG, and data-flow graph, used by Joern
CVSS Common Vulnerability Scoring System, standard for rating vulnerability severity
CWE Common Weakness Enumeration, categorization of software weakness types
DAST Dynamic Application Security Testing, testing running applications for vulnerabilities
DBI Dynamic Binary Instrumentation, modifying program behavior at runtime without recompilation
DFG Data Flow Graph, graph representing how data values propagate through a program
DPA Differential Power Analysis, extracting cryptographic keys by analyzing power consumption variations
Frida Dynamic instrumentation toolkit for injecting scripts into running processes
Harness Glue code connecting a fuzzer to its target, defining how fuzzed input is delivered
HWASAN Hardware-assisted AddressSanitizer, ARM-based variant of ASan with lower overhead
IAST Interactive Application Security Testing, combines elements of SAST and DAST during testing
Infer Meta's open-source static analyzer based on separation logic and bi-abduction
JVN Japan Vulnerability Notes, Japanese vulnerability information portal
KLEE Symbolic execution engine built on LLVM for automatic test generation
LLM Large Language Model, neural network trained on text/code, used for bug detection and code generation
LSAN LeakSanitizer, detector for memory leaks, often used alongside AddressSanitizer
Meltdown CPU vulnerability exploiting out-of-order execution to read kernel memory from user space
MITRE Non-profit organization that maintains CVE, CWE, and ATT&CK frameworks
MTTR Mean Time to Remediate, average duration from vulnerability disclosure to patch deployment
MSan MemorySanitizer, detector for reads of uninitialized memory
NVD National Vulnerability Database, NIST-maintained repository of vulnerability data
NIST National Institute of Standards and Technology, US agency maintaining security standards and NVD
OpenSSF Open Source Security Foundation, Linux Foundation project for open-source security
OSS-Fuzz Google's free continuous fuzzing service for open-source software
OWASP Open Worldwide Application Security Project, community producing security guides and tools
RCE Remote Code Execution, vulnerability allowing an attacker to run arbitrary code on a target system
RL Reinforcement Learning, ML paradigm where agents learn through reward-based feedback
S2E Selective Symbolic Execution, whole-system analysis platform combining QEMU with KLEE
SARIF Static Analysis Results Interchange Format, standard for exchanging static analysis findings
SAST Static Application Security Testing, analyzing source code for vulnerabilities without execution
SCA Software Composition Analysis, identifying known vulnerabilities in third-party dependencies
Seed Initial input provided to a fuzzer as the starting point for mutation
Semgrep Lightweight open-source static analysis tool using pattern-matching rules
Side-channel Attack vector exploiting physical implementation artifacts rather than algorithmic flaws
SMT Satisfiability Modulo Theories, solver used by symbolic execution to find inputs satisfying path constraints
Spectre Family of CPU vulnerabilities exploiting speculative execution to leak data across security boundaries
SQLi SQL Injection, injecting malicious SQL into queries via unsanitized user input
SSRF Server-Side Request Forgery, tricking a server into making requests to unintended destinations
SymCC Compilation-based symbolic execution tool that is 2--3 orders of magnitude faster than KLEE
Taint analysis Tracking the flow of untrusted data from sources to security-sensitive sinks
VDP Vulnerability Disclosure Program, formal process for receiving vulnerability reports
TOCTOU Time-of-Check-Time-of-Use, race condition between validating a resource and using it
TSan ThreadSanitizer, detector for data races in multithreaded programs
UAF Use-After-Free, accessing memory after it has been deallocated
UBSan UndefinedBehaviorSanitizer, detector for undefined behavior in C/C++
Valgrind Dynamic binary instrumentation framework for memory debugging and profiling
XSS Cross-Site Scripting, injecting malicious scripts into web pages viewed by other users
Fine-tuning Adapting a pre-trained ML model to a specific task using additional training data
AUTOSAR Automotive Open System Architecture, standardized software framework for automotive ECUs
CAN Controller Area Network, vehicle bus standard for microcontroller communication
DNP3 Distributed Network Protocol, used in SCADA and utility systems
EDK II EFI Development Kit II, open-source UEFI firmware development environment
OPC UA Open Platform Communications Unified Architecture, industrial automation protocol
RTOS Real-Time Operating System, OS designed for real-time applications with deterministic timing
Abstract interpretation Mathematical framework for approximating program behavior using abstract domains
Dataflow analysis Tracking how values propagate through a program to detect bugs like taint violations