The product uses physical debug or test interfaces with support for multiple access levels, but it assigns the wrong debug access level to an internal asset, providing unintended access to the asset from untrusted debug agents.
Debug authorization can have multiple levels of access, defined such that different system internal assets are accessible based on the current authorized debug level. Other than debugger authentication (e.g., using passwords or challenges), the authorization can also be based on the system state or boot stage. For example, full system debug access might only be allowed early in boot after a system reset to ensure that previous session data is not accessible to the authenticated debugger. If this protection mechanism does not ensure that internal assets have the correct debug access level during each boot stage or change in system state, an attacker could obtain sensitive information from the internal asset using a debugger.
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