Hack@CHES 2026 - Phase 1 Bug Submissions

Team KattangalSec

View on GitHub

Bug 01 - PMP Error Output Always Zero (Complete PMP Bypass)

Legacy reference: Bug #1 in the working set


Security feature bypassed

Physical Memory Protection (PMP) - the primary hardware access-control mechanism of the Ibex RISC-V core

Attack type

Type 1 - unprivileged software at user level

Finding

Signal pmp_req_err_o is computed as access_violation_detected & ~fault_analysis_result. Since access_violation_detected itself equals ~debug_bypass_active & fault_analysis_result, Boolean algebra simplification yields pmp_req_err_o = 0 - identically zero, regardless of actual PMP violations.

Truth table:

fault_analysis_result debug_bypass_active access_violation_detected pmp_req_err_o (buggy) Expected
0 0 0 0 0 (OK)
0 1 0 0 0 (OK)
1 0 1 0 (BUG) 1 (error)
1 1 0 0 0 (OK)

Location or code reference

New Tools

Yes - custom VCS-based hardware fuzzer (ibex_pmp_fuzz, MorFuzz-style) on vlsilab03 (Synopsys VCS U-2023.03), plus a Python random PMP CSR configuration generator.

Detection methodology: randomly generated PMP CSR configurations (pmpcfg0/1, pmpaddrN) with varying lock/permission bits were driven into a synthesizable VCS testbench of the real ibex_pmp module; pmp_req_err_o was monitored for confirmed PMP violations that failed to assert. Directed fuzzing with targeted seeds every 100 iterations guaranteed discovery; 7 directed test cases (read / write / execute / M-mode / unlocked-mode) then verified the finding.

AI Tools

No - manual RTL inspection + VCS simulation.

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

Automated detection with the custom VCS hardware fuzzer. Security/verification properties checked:

The fuzzer flags any case where a violation does not assert pmp_req_err_o; the buggy line fails every violation case. Confirmed on the real ibex_pmp RTL under VCS, and on the full Ibex SoC via dvsim (chip_sw_pmp_bypass_exploit, P:1 100%).

Security impact

Complete PMP bypass. Any code at any privilege level (U/S/M) can access any memory region without PMP restrictions: read secure memory (keys, credentials), write protected firmware regions, execute from non-executable memory - all without triggering a fault.

Adversary profile

Unprivileged software running at user level on the Ibex core (Type 1). No physical access required - a normal user-mode program triggers the bypass.

Proposed mitigation

// FIXED:
assign pmp_req_err_o[c] = access_violation_detected;

The ~fault_analysis_result term cancels the fault_analysis_result already AND-ed into access_violation_detected.

CVSSv3.1 score and severity

8.8 - HIGH

CVSSv3.1 Details

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

Located in this repository (GitHub is the cloud storage for the submission):