一个独立的 Shell 脚本,用于评估您的系统在面对自 2018 年初以来发布的多个瞬态执行 CVE 时的抵御能力,并指导您如何缓解它们。
| CVE | 名称 | 别名 |
|---|---|---|
| CVE-2017-5753 | 边界检查绕过 | Spectre V1 |
| CVE-2017-5715 | 分支目标注入 | Spectre V2 |
| CVE-2017-5754 | 恶意数据缓存加载 | Meltdown |
| CVE-2018-3640 | 恶意系统寄存器读取 | Variant 3a |
| CVE-2018-3639 | 预测存储绕过 | Variant 4, SSB |
| CVE-2018-3615 | L1 终止故障 | Foreshadow (SGX) |
| CVE-2018-3620 | L1 终止故障 | Foreshadow-NG (OS/SMM) |
| CVE-2018-3646 | L1 终止故障 | Foreshadow-NG (VMM) |
| CVE-2018-12126 | 微架构存储缓冲区数据采样 | MSBDS, Fallout |
| CVE-2018-12127 | 微架构加载端口数据采样 | MLPDS, RIDL |
| CVE-2018-12130 | 微架构填充缓冲区数据采样 | MFBDS, ZombieLoad |
| CVE-2018-12207 | 页面大小更改上的机器检查异常 | iTLB Multihit, No eXcuses |
| CVE-2019-11091 | 微架构数据采样的不可缓存内存 | MDSUM, RIDL |
| CVE-2019-11135 | TSX 异步中止 | TAA, ZombieLoad V2 |
| CVE-2020-0543 | 特殊寄存器缓冲区数据采样 | SRBDS, CROSSTalk |
| CVE-2022-21123 | 共享缓冲区数据读取 | SBDR, MMIO 陈旧数据 |
| CVE-2022-21125 | 共享缓冲区数据采样 | SBDS, MMIO 陈旧数据 |
| CVE-2022-21166 | 设备寄存器部分写入 | DRPW, MMIO 陈旧数据 |
| CVE-2022-29900 | 使用返回指令的任意预测代码执行 | Retbleed (AMD) |
| CVE-2022-29901 | 使用返回指令的任意预测代码执行 | Retbleed (Intel), RSBA |
| CVE-2022-40982 | Gather 数据采样 | Downfall, GDS |
| CVE-2023-20569 | 返回地址安全 | Inception, SRSO |
| CVE-2023-20588 | AMD 除零预测数据泄露 | DIV0 |
| CVE-2023-20593 | 跨进程信息泄露 | Zenbleed |
| CVE-2023-23583 | 冗余前缀问题 | Reptar |
| CVE-2023-28746 | 寄存器文件数据采样 | RFDS |
| CVE-2024-28956 | 间接目标选择 | ITS |
| CVE-2024-36350 | 瞬态调度器攻击,存储队列 | TSA-SQ |
| CVE-2024-36357 | 瞬态调度器攻击,L1 | TSA-L1 |
| CVE-2025-40300 | VM-Exit 陈旧分支预测 | VMScape |
| CVE-2024-45332 | 分支特权注入 | BPI |
| CVE-2025-54505 | AMD Zen1 浮点除法器陈旧数据泄露 | FPDSS |
以下条目是 ARM64 硅片勘误,内核已主动对其进行了工作绕过。它们没有指定的 CVE;仅通过 ARM 的勘误号进行追踪。使用 --errata <number> 或相关的 --variant 助记符来选择它们。
| ID | 名称 | 受影响的核 |
|---|---|---|
| CVE-0001-0001 | 预测的 AT TLB 损坏(勘误 1165522, 1319367, 1319537, 1530923) | Cortex-A55/A57/A72/A76 |
| CVE-0001-0002 | 预测的非特权加载(勘误 2966298, 3117295) | Cortex-A510/A520 |
| CVE-0001-0003 | MSR SSBS 不自我同步(勘误 3194386 及其同类) | Cortex-A76/A77/A78/A78C/A710/A715/A720/A720AE/A725, X1/X1C/X2/X3/X4/X925, Neoverse-N1/N2/N3/V1/V2/V3/V3AE |
根据您的情况,下表回答了处于给定位置的攻击者是否可以从给定目标提取数据。 "用户态 → 内核"列也适用于虚拟机内部(虚拟机用户态对比虚拟机内核),因为无论是否虚拟化,相同的 CPU 机制都在起作用。
| 漏洞 | 用户态 → 内核 | 用户态 → 用户态 | 虚拟机 → 宿主机 | 虚拟机 → 虚拟机 | 缓解措施 |
|---|---|---|---|---|---|
| CVE-2017-5753 (Spectre V1) | 💥 | 💥 | 💥 | 💥 | 使用 LFENCE 重新编译所有内容 |
| CVE-2017-5715 (Spectre V2) | 💥 | 💥 | 💥 | 💥 | 微码 + 内核更新(或 retpoline) |
| CVE-2017-5754 (Meltdown) | 💥 | ✅ | ✅ | ✅ | 内核更新 |
| CVE-2018-3640 (Variant 3a) | 💥 | ✅ | ✅ | ✅ | 微码更新 |
| CVE-2018-3639 (Variant 4, SSB) | ✅ | 💥 | ✅ | ✅ | 微码 + 内核更新 |
| CVE-2018-3615 (Foreshadow, SGX) | ✅ (3) | ✅ (3) | ✅ (3) | ✅ (3) | 微码更新 |
| CVE-2018-3620 (Foreshadow-NG, OS/SMM) | 💥 | ✅ | ✅ | ✅ | 内核更新 |
| CVE-2018-3646 (Foreshadow-NG, VMM) | ✅ | ✅ | 💥 | 💥 | 内核更新(或禁用 EPT/SMT) |
| CVE-2018-12126 (MSBDS, Fallout) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2018-12127 (MLPDS, RIDL) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2018-12130 (MFBDS, ZombieLoad) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2018-12207 (iTLB Multihit, No eXcuses) | ✅ | ✅ | ☠️ | ✅ | 虚拟机监控程序更新(或禁用大页面) |
| CVE-2019-11091 (MDSUM, RIDL) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2019-11135 (TAA, ZombieLoad V2) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2020-0543 (SRBDS, CROSSTalk) | 💥 (2) | 💥 (2) | 💥 (2) | 💥 (2) | 微码 + 内核更新 |
| CVE-2022-21123 (SBDR, MMIO 陈旧数据) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2022-21125 (SBDS, MMIO 陈旧数据) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2022-21166 (DRPW, MMIO 陈旧数据) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2022-29900 (Retbleed AMD) | 💥 | ✅ | 💥 | ✅ | 内核更新(+ 微码以获得 IBPB) |
| CVE-2022-29901 (Retbleed Intel, RSBA) | 💥 | ✅ | 💥 | ✅ | 微码 + 内核更新 (eIBRS 或 IBRS) |
| CVE-2022-40982 (Downfall, GDS) | 💥 | 💥 | 💥 | 💥 | 微码更新(或禁用 AVX) |
| CVE-2023-20569 (Inception, SRSO) | 💥 | ✅ | 💥 | ✅ | 微码 + 内核更新 |
| CVE-2023-20588 (DIV0) | 💥 | 💥 (1) | 💥 | 💥 (1) | 内核更新(+ 禁用 SMT) |
| CVE-2023-20593 (Zenbleed) | 💥 | 💥 | 💥 | 💥 | 微码更新(或内核工作绕过) |
| CVE-2023-23583 (Reptar) | ☠️ | ☠️ | ☠️ | ☠️ | 微码更新 |
| CVE-2023-28746 (RFDS) | 💥 | ✅ | 💥 | ✅ | 微码 + 内核更新 |
| CVE-2024-28956 (ITS) | 💥 | ✅ | 💥 (4) | ✅ | 微码 + 内核更新 |
| CVE-2024-36350 (TSA-SQ) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2024-36357 (TSA-L1) | 💥 | 💥 (1) | 💥 | 💥 (1) | 微码 + 内核更新 |
| CVE-2025-40300 (VMScape) | ✅ | ✅ | 💥 | ✅ | 内核更新(VM-exit 上的 IBPB) |
| CVE-2024-45332 (BPI) | 💥 | ✅ | 💥 | ✅ | 微码更新 |
| CVE-2025-54505 (FPDSS) | 💥 | 💥 | 💥 | 💥 | 内核更新 |
💥 数据可以跨越此边界泄露。
✅ 此场景下不受影响。
☠️ 拒绝服务(系统崩溃或不可预测行为),无数据泄露。
(1) 跨进程泄露需要 SMT(超线程)处于活动状态——攻击者和受害者必须共享一个物理核心。
(2) 仅泄露 RDRAND/RDSEED 的输出,而非任意内存;但仍允许从任何受害者恢复加密材料。
(3) CVE-2018-3615 (Foreshadow SGX) 颠倒了正常的信任模型:操作系统读取 SGX 飞地数据。除非系统运行 SGX 飞地,否则不相关,并且攻击者必须已经拥有操作系统级访问权限。
(4) 虚拟机→宿主机泄露仅适用于某些受影响的 CPU 型号(Skylake-X, Kaby Lake, Comet Lake)。Ice Lake、Tiger Lake 和 Rocket Lake 仅对本机(用户到内核)攻击受影响,而不对客户到宿主机攻击受影响。
CVE-2017-5753 — 边界检查绕过 (Spectre Variant 1)
攻击者可以训练分支预测器使其错误预测边界检查,导致 CPU 推测性地访问越界内存。这会影响所有软件,包括内核,因为任何条件边界检查都可能被利用。缓解措施需要使用编译器重新编译软件和内核,在适当位置插入 LFENCE 指令(或等效的推测屏障,如 array_index_nospec)。性能影响可忽略不计,因为屏障仅适用于特定的、有针对性的代码模式。
CVE-2017-5715 — 分支目标注入 (Spectre Variant 2)
攻击者可以污染分支目标缓冲区 (BTB),从而将推测性执行的间接分支重定向到内核中,泄露内核内存。存在两种缓解策略:(1) 提供 IBRS(间接分支受限推测)的微码更新,它在特权切换时刷新分支预测器状态——这具有中到高的性能成本,尤其是在较旧的硬件上;或 (2) retpoline,一种编译器技术,它将间接分支替换为推测器无法利用的结构——这具有较低的性能成本,但需要重新编译内核和敏感软件。
CVE-2017-5754 — 恶意数据缓存加载 (Meltdown)
在受影响的 Intel 处理器上,用户进程可以推测性地读取内核内存,尽管缺少权限。CPU 最终会引发故障,但数据会在缓存中留下可观察的痕迹。缓解措施完全在内核端:页表隔离 (PTI/KPTI) 从用户空间页表中取消映射大多数内核内存,因此没有任何内容可供推测性读取。性能影响为中到低,主要来自在每个内核入口和退出时切换页表所增加的 TLB 压力。
CVE-2018-3640 — 恶意系统寄存器读取 (Variant 3a)
类似于 Meltdown,但针对系统寄存器:非特权进程可以推测性地读取特权系统寄存器值(例如模型特定寄存器),并通过侧信道将其泄露。缓解措施仅需要微码更新——不需要内核更改。性能影响可忽略不计。
CVE-2018-3639 — 预测存储绕过 (Variant 4)