Reliance on Component That is Not Updateable

Incomplete Base
Structure: Simple
Description

This vulnerability occurs when a product depends on a component that cannot be updated or patched to fix security flaws or critical bugs.

Extended Description

When a vulnerability is discovered in an un-updatable component, product owners are left with no practical way to secure their systems. The only recourse is often a complete replacement, which can be prohibitively expensive or operationally disruptive. This leaves the product permanently exposed to attacks or failures. This is a common and severe issue with hardware like ROM chips, firmware, and embedded systems, which historically lack update mechanisms. Software is not immune, as it can rely on outdated, unsupported third-party libraries or drivers that are essential for functionality but no longer maintained. In critical sectors like healthcare, legacy devices may operate for decades, creating vast attack surfaces with known vulnerabilities and no modern defenses. This reliance on frozen-in-time components creates long-term, unmanageable risk.

Common Consequences 1
Scope: ConfidentialityIntegrityAccess ControlAuthenticationAuthorizationOther

Impact: Gain Privileges or Assume IdentityBypass Protection MechanismExecute Unauthorized Code or CommandsDoS: Crash, Exit, or RestartQuality DegradationReduce Maintainability

If an attacker can identify an exploitable vulnerability in one product that has no means of patching, the attack may be used against all affected versions of that product.

Detection Methods 1
Architecture or Design ReviewModerate
Check the consumer or maintainer documentation, the architecture/design documentation, or the original requirements to ensure that the documentation includes details for how to update the firmware.
Potential Mitigations 4
Phase: Requirements
Specify requirements that each component should be updateable, including ROM, firmware, etc.
Phase: Architecture and Design
Design the product to allow for updating of its components. Include the external infrastructure that might be necessary to support updates, such as distribution servers.
Phase: Architecture and DesignImplementation
With hardware, support patches that can be programmed in-field or during manufacturing through hardware fuses. This feature can be used for limited patching of devices after shipping, or for the next batch of silicon devices manufactured, without changing the full device ROM.

Effectiveness: Moderate

Phase: Implementation
Implement the necessary functionality to allow each component to be updated.
Demonstrative Examples 3

ID : DX-145

A refrigerator has an Internet interface for the official purpose of alerting the manufacturer when that refrigerator detects a fault. Because the device is attached to the Internet, the refrigerator is a target for hackers who may wish to use the device other potentially more nefarious purposes.

Code Example:

Bad
Other

The refrigerator has no means of patching and is hacked becoming a spewer of email spam.

Code Example:

Good
Other

The device automatically patches itself and provides considerable more protection against being hacked.

ID : DX-146

A System-on-Chip (SOC) implements a Root-of-Trust (RoT) in ROM to boot secure code. However, at times this ROM code might have security vulnerabilities and need to be patched. Since ROM is immutable, it can be impossible to patch.
ROM does not have built-in application-programming interfaces (APIs) to patch if the code is vulnerable. Implement mechanisms to patch the vulnerable ROM code.
The example code is taken from the JTAG module of the buggy OpenPiton SoC of HACK@DAC'21. JTAG is protected with a password checker. Access to JTAG operations will be denied unless the correct password is provided by the user. This user-provided password is first sent to the HMAC module where it is hashed with a secret crypto key. This user password hash (pass_hash) is then compared with the hash of the correct password (exp_hash). If they match, JTAG will then be unlocked.

Code Example:

Bad
Verilog

module dmi_jtag(...)(...); ...

verilog

.key_i(256'h24e6fa2254c2ff632a41b...),** ...

verilog
However, the SoC's crypto key is hardcoded into the design and cannot be updated [REF-1387]. Therefore, if the key is leaked somehow, there is no way to reprovision the key without having the device replaced.
To fix this issue, a local register should be used (hmac_key_reg) to store the crypto key. If designers need to update the key, they can upload the new key through an input port (hmac_key_i) to the local register by enabling the patching signal (hmac_patch_en) [REF-1388].

Code Example:

Good
Verilog

module dmi_jtag(... ) (


input logic [255:0] hmac_key_i,**

verilog

...

verilog

if (hmac_patch_en)**

verilog
verilog
verilog
verilog
Observed Examples 1
CVE-2020-9054Chain: network-attached storage (NAS) device has a critical OS command injection (Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')) vulnerability that is actively exploited to place IoT devices into a botnet, but some products are "end-of-support" and cannot be patched (Firmware Not Updateable). [REF-1097]
References 4
Report on Improving Cybersecurity in the Health Care Industry
Health Care Industry Cybersecurity Task Force
06-2017
ID: REF-1197
Zyxel Flaw Powers New Mirai IoT Botnet Strain
Brian Krebs
20-03-2020
ID: REF-1097
Applicable Platforms
Languages:
Not Language-Specific : Undetermined
Technologies:
Not Technology-Specific : UndeterminedICS/OT : Undetermined
Modes of Introduction
Requirements
Architecture and Design
Architecture and Design
Implementation