2001
Example 1:
For example, consider a hardware unit with a 32 kilobyte configuration address space where the
first 8 kilobyte address contains security sensitive controls that must only be writable by device
bootloader. One way to protect the security configuration could be to define a 32 bit system
configuration locking register (SYS_LOCK) where each bit lock locks the corresponding 1 kilobyte
region.
Example Language: Other (Bad)
If a register exists within the first kilobyte address range (e.g. SW_MODE, address 0x310)
and needs to be software writable at runtime, then this register cannot be written in a securely
configured system since SYS_LOCK register lock bit 0 must be set to protect other security
settings (e.g. SECURITY_FEATURE_ENABLE, address 0x0004). The only fix would be to change
the hardware logic or not set the security lock bit.
MemberOf Relationships
This MemberOf relationships table shows additional CWE Catgeories and Views that reference this
weakness as a member. This information is often useful in understanding where a weakness fits
within the context of external information sources.
Nature Type ID Name Page
MemberOf 1198 Privilege Separation and Access Control Issues 1194 2470
MemberOf 1396 Comprehensive Categorization: Access Control 1400 2519
Related Attack Patterns
CAPEC-ID Attack Pattern Name
679 Exploitation of Improperly Configured or Implemented Memory Protections
CWE-1223: Race Condition for Write-Once Attributes
Weakness ID : 1223
Structure : Simple
Abstraction : Base
Description
A write-once register in hardware design is programmable by an untrusted software component
earlier than the trusted software component, resulting in a race condition issue.
Extended Description
Integrated circuits and hardware IP software programmable controls and settings are commonly
stored in register circuits. These register contents have to be initialized at hardware reset to
defined default values that are hard coded in the hardware description language (HDL) code of
the hardware unit. A common security protection method used to protect register settings from
modification by software is to make them write-once. This means the hardware implementation only
allows writing to such registers once, and they become read-only after having been written once by
software. This is useful to allow initial boot software to configure systems settings to secure values
while blocking runtime software from modifying such hardware settings.
Implementation issues in hardware design of such controls can expose such registers to a race
condition security flaw. For example, consider a hardware design that has two different software/
firmware modules executing in parallel. One module is trusted (module A) and another is untrusted
(module B). In this design it could be possible for Module B to send write cycles to the write-once
register before Module A. Since the field is write-once the programmed value from Module A will be
ignored and the pre-empted value programmed by Module B will be used by hardware.
CWE Version 4.14
CWE-1223: Race Condition for Write-Once Attributes
CWE-1223: Race Condition for Write-Once Attributes