关键漏洞信息 漏洞名称 Rocket-Chip CSR Logic Vulnerability: Flawed Interaction Between Exception Handling and Return Mechanisms Causes Faulty Trap Behavior on mret-Triggered Exceptions. 发现者 Fanyun Shu, Yang Zhang, Zheng Fu, Zhiheng Zhang, Jian Wang, School of Information and Communication Engineering, University of Electronic Science and Technology of China (UESTC) 简要介绍 Rocket-Chip的控制和状态寄存器在异常处理机制和返回机制(MRET)之间存在冲突。当在机器模式下执行MRET而未进入异常时,可能会触发指令访问故障。这导致异常处理逻辑和异常返回逻辑同时激活,导致异常处理流程中的错误——例如,MPIE未能按要求保存MIE的值。 弱点的一般解释 在处理器架构中,异常处理机制旨在响应指令执行期间的非法事件,如非法指令或越界内存访问。当发生异常时,处理器必须立即中断当前执行流,保存关键状态信息,并跳转到预定义的异常处理程序。在异常入口处,处理器通常将当前中断使能状态(例如,MIE)保存在其备份位(MPIE)中,并禁用中断以防止嵌套异常。MRET指令用于从异常返回,通过恢复先前保存在mstatus寄存器中的异常状态和异常级别来恢复正常执行。然而,在实践中,Rocket Chip忽略了MRET指令可能触发异常的可能性。这可能导致异常处理和异常返回逻辑同时被触发,导致控制和状态寄存器的冲突。 发现上下文 在动态测试中,Rocket Chip在机器模式下执行MRET指令(而不是在异常状态下),触发了指令访问故障。此时,观察到处理器错误地同时激活了异常处理逻辑和返回逻辑,破坏了异常处理流程。该缺陷的关键表现是MPIE未能正确恢复RISC-V特权架构规范第3.1.6节、第26页中规定的MIE值;在执行前:MIE=0,MPIE=1,mcause=0;执行后:mcause更新为1(指示指令访问故障),但MPIE保持不变,仍为1。详细运行时日志请参阅:https://github.com/heyfenny/Vulnerability_disclosure/blob/main/RISCV/Rocket-chip/25-7-10/Rocket_Runtime_log.log,这表明适当的特权状态转换没有成功完成。 最终,处理器继续进入异常处理流程,但异常处理未能正确执行,程序异常终止。这表明Rocket Chip当前的CSR逻辑不能稳健地处理在MRET期间触发的异常,违反了特权规范要求并损害了系统可靠性。 漏洞类型 CWE-440: Expected Behavior Violation 受影响的产品代码库 Rocket-Chip: The Berkeley Open-Source RISC-V Processor commit f517abb及之前版本 受影响的组件 src/main/scala/rocket/CSR.scala, Control and Status Registers. 示例代码 提供的代码摘自开源项目Rocket-Chip的CSR模块(src/main/scala/rocket/CSR.scala)。使用的语言是Scala,因为该项目通过Scala设计处理器,然后生成Verilog代码。 Rocket的异常入口逻辑: Rocket的返回逻辑: 可以观察到,这两种决策逻辑过于简单,缺乏在返回逻辑决策过程中检查异常触发的机制。 建议的修复代码