Bug 07 - LC State Transition Validity Check Uses || Instead of && (Dual-Replica FI Countermeasure Defeated)
Legacy reference: Bug #5 in the working set
Security feature bypassed
Lifecycle Controller redundant state-transition validity check - the dual-replica fault-injection countermeasure
Attack type
Type 2 - physical attacker with fault injection equipment
Finding
The transition-validity check combines two replicated lookups with || (OR) instead of
&& (AND):
// lc_ctrl_state_transition.sv:140-141
if (TransTokenIdxMatrix[dec_lc_state_i[0]][trans_target_i[0]] != InvalidTokenIdx ||
TransTokenIdxMatrix[dec_lc_state_i[1]][trans_target_i[1]] != InvalidTokenIdx) begin
The transition is authorized if either replica indicates validity. The dual-replica countermeasure requires both to agree - a single fault corrupting one replica suffices to authorize a forbidden transition. The module comment (lines 138-139) states the dual-replica intent; the operator contradicts it.
Location or code reference
- hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv:140-141 - replica lookups combined with
||instead of&&
New Tools
Yes - custom VCS (U-2023.03) redundancy-checker fuzzer: enumerated all pass/fail
combinations of the two replicas and verified that the OR gate allows single-replica bypass
while the AND gate requires both. Directed testbench on the real
lc_ctrl_state_transition.sv RTL confirms the behavior (bug-005-tb-lc-or-and.sv).
AI Tools
No.
LLM
No.
LLM Details
PLACEHOLDER - to be completed (model name/version, parameters, download link or API endpoint).
Online LLM Details
PLACEHOLDER - to be completed (input/output/total token counts, verification script).
LLM Prompts
PLACEHOLDER - to be completed (complete prompt, full model response, step-by-step explanation).
Detection method
Manual RTL inspection (comment-vs-operator contradiction) + automated VCS redundancy fuzzing. Security property: a transition is valid only if both replicas agree; the fuzzer proved every single-replica-corrupted case is wrongly accepted.
Security impact
A physical attacker with FI capability (laser, EM, voltage glitch) corrupts one replica’s decode path; a single-bit fault making a forbidden transition look valid in one replica passes the OR gate. Worst case: transition from a locked state to an unlocked state without the correct token.
Adversary profile
Type 2 - physical attacker with fault injection equipment (laser/EM/voltage glitch) and knowledge of the LC decode timing.
Proposed mitigation
if (TransTokenIdxMatrix[dec_lc_state_i[0]][trans_target_i[0]] != InvalidTokenIdx &&
TransTokenIdxMatrix[dec_lc_state_i[1]][trans_target_i[1]] != InvalidTokenIdx) begin
CVSSv3.1 score and severity
6.3 - MEDIUM
CVSSv3.1 Details
CVSS:3.1/AV:P/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
- AV: Physical - fault injection on the device
- AC: High - precise timing required for one-replica corruption
- PR: None
- S: Unchanged - within the LC domain
- C/I/A: High - unauthorized state transitions
Attachment links
Located in this repository (GitHub is the cloud storage for the submission):