来自 VUSec 和 Scuola Superiore Sant'Anna 的一组学者披露了一种新的 Spectre CPU 漏洞变体的细节,该变体影响多个 CPU 供应商的网页浏览器、语言运行时和操作系统内核中的即时编译 (JIT) 引擎。
新的 Spectre-v2 变体被命名为分支目标重用 (BTR)。
“关键的见解是,尽管现代 CPU 在自我修改后恢复了架构代码的一致性,但它们并不一定会使过时的间接分支预测条目(即分支目标)失效,”研究人员 Sander Wiebing、Yuhui Zhu、Alessandro Biondi 和 Cristiano Giuffrida 在一篇附带论文中表示。
“在 JIT 引擎中,这些过时的目标可以在原始代码之后存活,并在代码缓存重新填充时被重用,从而产生一个瞬态的执行后释放原语。这使得攻击者能够劫持瞬态控制流,以访问过时偏移处的新生成代码,绕过软件加固或达到未对齐的 gadget。”
BTR 已针对 SpiderMonkey(Mozilla Firefox 的 JIT 引擎)、GraalVM 和 Linux 内核的 cBPF JIT 进行了评估,发现它们都受到影响,尽管“可利用性特征和泄露率明显不同”。
作为概念验证,针对 Linux 内核设计了两个端到端的利用程序,可以在几分钟内从完全修补的 Intel 系统中泄露和恢复 root 密码哈希,且默认保护已启用。
Spectre 是一类 CPU 安全漏洞,首次发现于 2017 年,利用了投机执行,这是一种现代处理器用来预测和提前执行指令的性能优化技术。
攻击者可以利用这个漏洞欺骗 CPU 执行投机操作,从而访问敏感数据,然后通过缓存时序侧信道推断出该数据。
Spectre v2 是 Spectre 攻击的一种特定类型,利用现代处理器中的间接分支预测来实现相同的目标。具体而言,它毒化 CPU 的分支预测机制,导致受害程序执行间接分支,从而导致 CPU 错误预测分支并投机性地执行攻击者控制的代码或 gadget。
尽管错误预测的结果会被丢弃,但攻击者可以通过利用缓存状态变化和测量缓存变化来推断受害者的投机执行访问了什么。
“BTR 针对 JIT 引擎,源于自我修改代码 (SMC) 和间接分支预测之间的相互作用,”研究人员表示,并补充道:“JIT 引擎首次暴露了由 SMC 引发的可利用瞬态执行机会。”
该攻击假设攻击者能够在 JIT 引擎中运行非特权代码,并试图从主机环境中泄露敏感数据。整个操作序列如下 -
攻击者诱使 JIT 引擎分配一个训练块,并强制受害分支跳转到它,从而插入一个引用当前入口点的 BTB 条目。
攻击者强制释放训练块并分配一个部分重用相同地址的目标块。
攻击者再次触发间接分支,CPU 使用现在过时的分支目标缓冲区 (BTB) 条目,并投机性地跳转到旧训练块的入口点。
最终结果是控制流劫持和秘密数据泄露。
“通过将控制流重定向到一个架构上无效的入口点,攻击者可以绕过 Spectre 加固缓解措施或执行未对齐的指令,最终泄露秘密数据,”研究人员解释道。
然而,BTR 的一个关键方面是,过时的 BTB 条目在 JIT 引擎释放训练块后必须不被失效或替换,并且分支预测器必须选择过时的 BTB 条目进行预测。
在负责任的披露后,针对 BTR 的缓解措施已被发布并合并到 Linux 内核中(CVE-2026-64507 和 CVE-2026-64508)。
“GraalVM 通过随机化 JIT 代码缓存位置来阻止区域重用,”研究人员表示。“Mozilla 考虑了基于 IBPB [间接分支预测器屏障] 的缓解措施,但目前优先考虑完成和部署站点隔离。”
该披露是在麻省理工学院 CSAIL 的研究人员 Daniël Trujillo 和 Mengjia Yan 披露了一种名为中断注入的投机执行攻击技术后近两个月,该技术可以绕过 Spectre v2 防御并从基于 Intel 和 AMD 的 Linux 系统中泄露任意内核内存。
觉得这篇文章有趣吗?请在 Google 新闻、Twitter 和 LinkedIn 上关注我们,以阅读更多我们发布的独家内容。