Description
A missing immutable root of trust in the hardware results in the ability to bypass secure boot or execute untrusted or adversarial boot code.
A System-on-Chip (SoC) implements secure boot by verifying or authenticating signed boot code. The signing of the code is achieved by an entity that the SoC trusts. Before executing the boot code, the SoC verifies that the code or the public key with which the code has been signed has not been tampered with. The other data upon which the SoC depends are system-hardware settings in fuses such as whether "Secure Boot is enabled". These data play a crucial role in establishing a Root of Trust (RoT) to execute secure-boot flows. One of the many ways RoT is achieved is by storing the code and data in memory or fuses. This memory should be immutable, i.e., once the RoT is programmed/provisioned in memory, that memory should be locked and prevented from further programming or writes. If the memory contents (i.e., RoT) are mutable, then an adversary can modify the RoT to execute their choice of code, resulting in a compromised secure boot. Note that, for components like ROM, secure patching/update features should be supported to allow authenticated and authorized updates in the field.
Potential Impact
Authentication, Authorization
Gain Privileges or Assume Identity, Execute Unauthorized Code or Commands, Modify Memory
Demonstrative Examples
...
always_ff @(posedge clk_i) begin
if (req_i) begin
if (!we_i) begin
raddr_q <= addr_i[$clog2(RomSize)-1+3:3];
end else begin
mem[addr_i[$clog2(RomSize)-1+3:3]] <= wdata_i;
end
end
end
...
// this prevents spurious Xes from propagating into the speculative fetch stage of the core
assign rdata_o = (raddr_q < RomSize) ? mem[raddr_q] : '0;
......
always_ff @(posedge clk_i) begin
if (req_i) begin
raddr_q <= addr_i[$clog2(RomSize)-1+3:3];
end
end
...
// this prevents spurious Xes from propagating into the speculative fetch stage of the core
assign rdata_o = (raddr_q < RomSize) ? mem[raddr_q] : '0;
...Mitigations & Prevention
When architecting the system, the RoT should be designated for storage in a memory that does not allow further programming/writes.
During implementation and test, the RoT memory location should be demonstrated to not allow further programming/writes.
Detection Methods
- Automated Dynamic Analysis High — Automated testing can verify that RoT components are immutable.
- Architecture or Design Review High — Root of trust elements and memory should be part of architecture and design reviews.
Related Weaknesses
Frequently Asked Questions
What is CWE-1326?
CWE-1326 (Missing Immutable Root of Trust in Hardware) is a software weakness identified by MITRE's Common Weakness Enumeration. It is classified as a Base-level weakness. A missing immutable root of trust in the hardware results in the ability to bypass secure boot or execute untrusted or adversarial boot code.
How can CWE-1326 be exploited?
Attackers can exploit CWE-1326 (Missing Immutable Root of Trust in Hardware) to gain privileges or assume identity, execute unauthorized code or commands, modify memory. This weakness is typically introduced during the Architecture and Design, Implementation phase of software development.
How do I prevent CWE-1326?
Key mitigations include: When architecting the system, the RoT should be designated for storage in a memory that does not allow further programming/writes.
What is the severity of CWE-1326?
CWE-1326 is classified as a Base-level weakness (Medium abstraction). Its actual severity depends on the specific context and how the weakness manifests in your application.