Improper Access Control for Volatile Memory Containing Boot Code

Stable Base
Structure: Simple
Description

This vulnerability occurs when a system's secure-boot process loads bootloader code into volatile memory (like DRAM or SRAM) but fails to properly lock down that memory region afterward. Without strong access controls, an attacker can modify the boot code in memory, bypassing secure boot and running malicious software.

Extended Description

During a secure boot, the initial read-only memory (ROM) code inside a chip fetches the bootloader from external, non-volatile storage and copies it into internal volatile memory for execution. This code is authenticated as it's loaded. However, if the chip's memory protection unit (MPU) or similar hardware mechanisms don't enforce strict write or execute permissions on this volatile memory region after the transfer, the authenticated code becomes a sitting target. An attacker with physical or software access can then overwrite this now-unprotected boot code in volatile memory. This allows them to subvert the entire secure-boot chain, replacing the trusted bootloader with their own malicious payload before the system's main processor executes it, completely undermining the device's security foundation.

Common Consequences 1
Scope: Access ControlIntegrity

Impact: Modify MemoryExecute Unauthorized Code or CommandsGain Privileges or Assume Identity

Detection Methods 2
Manual AnalysisHigh
Ensure the volatile memory is lockable or has locks. Ensure the volatile memory is locked for writes from untrusted agents or adversaries. Try modifying the volatile memory from an untrusted agent, and ensure these writes are dropped.
Manual AnalysisModerate
Analyze the device using the following steps: 1. Identify all fabric master agents that are active during system Boot Flow when initial code is loaded from Non-volatile storage to volatile memory. 1. Identify the volatile memory regions that are used for storing loaded system executable program. 1. During system boot, test programming the identified memory regions in step 2 from all the masters identified in step 1. Only trusted masters should be allowed to write to the memory regions. For example, pluggable device peripherals should not have write access to program load memory regions.
Potential Mitigations 2
Phase: Architecture and Design
Ensure that the design of volatile-memory protections is enough to prevent modification from an adversary or untrusted code.
Phase: Testing
Test the volatile-memory protections to ensure they are safe from modification or untrusted code.
Demonstrative Examples 1
A typical SoC secure boot's flow includes fetching the next piece of code (i.e., the boot loader) from NVM (e.g., serial, peripheral interface (SPI) flash), and transferring it to DRAM/SRAM volatile, internal memory, which is more efficient.

Code Example:

Bad
Other

The volatile-memory protections or access controls are insufficient.

The memory from where the boot loader executes can be modified by an adversary.

Code Example:

Good
Other

A good architecture should define appropriate protections or access controls to prevent modification by an adversary or untrusted agent, once the bootloader is authenticated.

Observed Examples 1
CVE-2019-2267Locked memory regions may be modified through other interfaces in a secure-boot-loader image due to improper access control.
Applicable Platforms
Languages:
Not Language-Specific : Undetermined
Technologies:
Not Technology-Specific : Undetermined
Modes of Introduction
Architecture and Design
Related Weaknesses