This vulnerability occurs when a system's debug or test interface supports multiple access levels, but an internal asset is incorrectly assigned a permissive debug access level. This mistake allows untrusted debug agents to access sensitive internal assets they should not be able to reach.
Modern debug and test interfaces often implement tiered access control, where different internal components become accessible based on the currently authorized debug level or the system's operational state. This authorization isn't just about passwords; it can also depend on the boot stage or system mode. For instance, full debug access might only be permitted immediately after a reset to prevent leakage of data from a previous session. If this protection fails and an internal asset is exposed at an unsafe debug level during a specific state or boot phase, an attacker with debugger access can exploit this to read sensitive information. The core failure is the system's inability to correctly map and enforce the appropriate debug access level for each asset as the system state changes, creating a window of unintended exposure.
Impact: Read Memory
Impact: Modify Memory
Impact: Gain Privileges or Assume IdentityBypass Protection Mechanism
Effectiveness: High
Effectiveness: Limited
Effectiveness: Limited
| | | | 1 bit | 0x0 = JTAG debugger is enabled (default) | | JTAG_SHIELD | 0x1 = JTAG debugger is disabled |
bashmodule csr_regfile #( ...
verilog
assign priv_lvl_o = (debug_mode_q || umode_i) ? riscv::PRIV_LVL_M : priv_lvl_q;** ...
verilogmodule csr_regfile #( ...
verilog
(debug_mode_q && umode_i) ? riscv::PRIV_LVL_M : priv_lvl_q;** ...
verilog