CVE-2025-63384RISC-V Rocket-Chip v1.6及之前版本中存在一个严重的安全漏洞,该漏洞影响SRET(Supervisor-mode Exception Return)指令的实现。SRET指令本应在异常返回时根据sstatus.SPP位的设置将处理器特权级从Machine-mode(M-mode)降级到Supervisor-mode(S-mode)。然而,由于硬件实现缺陷,处理器在执行SRET指令后错误地保持在M-mode,导致原本应该受限的S-mode代码获得了完整的M-mode权限。这种特权级保留漏洞使得低权限代码能够绕过安全隔离,以最高权限执行任意操作,可能导致机密数据泄露、系统完整性破坏等严重后果。攻击者无需特殊权限即可利用此漏洞,且无需用户交互。
在RISC-V架构中,SRET指令用于从异常处理程序返回,并将处理器特权级从M-mode切换回S-mode(如果sstatus.SPP位为0)。sstatus.SPP位指示异常发生前的特权级:0表示U-mode,1表示S-mode。在正常的异常返回流程中,当处理器处于M-mode时执行SRET指令,应根据sstatus.SPP位恢复到对应的低特权级。然而,在Rocket-Chip v1.6及更早版本中,SRET指令的实现存在逻辑错误,导致特权级转换机制失效。处理器在执行SRET后仍然保持在M-mode,而sstatus.SPP位的值被忽略。攻击者可以通过触发异常进入M-mode,然后利用SRET指令的错误行为实现特权级保留,从而在M-mode下执行任意代码。这种漏洞可能被用于绕过安全监控、访问受保护的内存区域或执行特权操作。