
Strumento di verifica vulnerabilità/mitigazione per Reptar, Downfall, Zenbleed, ZombieLoad, RIDL, Fallout, Foreshadow, Spectre, Meltdown per Linux e BSD
Uno script shell autonomo per valutare la resilienza del tuo sistema contro le diverse CVE di esecuzione transitoria pubblicate dall'inizio del 2018, e fornire indicazioni su come mitigarle.
| CVE | Nome | Alias |
|---|---|---|
| CVE-2017-5753 | Bypass del controllo dei limiti | Spectre V1 |
| CVE-2017-5715 | Iniezione del ramo target | Spectre V2 |
| CVE-2017-5754 | Caricamento dati cache non autorizzato | Meltdown |
| CVE-2018-3640 | Lettura registro di sistema non autorizzata | Variante 3a |
| CVE-2018-3639 | Bypass speculativo dello store | Variante 4, SSB |
| CVE-2018-3615 | Guasto terminale L1 | Foreshadow (SGX) |
| CVE-2018-3620 | Guasto terminale L1 | Foreshadow-NG (OS/SMM) |
| CVE-2018-3646 | Guasto terminale L1 | Foreshadow-NG (VMM) |
| CVE-2018-12126 | Campionamento dati del buffer store microarchitetturale | MSBDS, Fallout |
| CVE-2018-12127 | Campionamento dati del porta di carico microarchitetturale | MLPDS, RIDL |
| CVE-2018-12130 | Campionamento dati del buffer di riempimento microarchitetturale | MFBDS, ZombieLoad |
| CVE-2018-12207 | Eccezione di controllo macchina sui cambi di dimensione di pagina | iTLB Multihit, No eXcuses |
| CVE-2019-11091 |
Le seguenti voci sono errata silicon ARM64 per i quali il kernel lavora attivamente con soluzioni alternative. Non hanno alcuna CVE assegnata; sono tracciate solo dai numeri di erratum ARM. Selezionali con --errata <numero> o il corrispondente mnemonico --variant.
| ID | Nome | Core interessati |
|---|---|---|
| CVE-0001-0001 | Corruzione TLB AT speculativa (errata 1165522, 1319367, 1319537, 1530923) | Cortex-A55/A57/A72/A76 |
A seconda della tua situazione, la tabella seguente risponde se un attaccante in una data posizione può estrarre dati da un dato target. La colonna "Userland → Kernel" si applica anche all'interno di una VM (userland VM vs. kernel VM), poiché gli stessi meccanismi della CPU sono in gioco indipendentemente dalla virtualizzazione.
💥 I dati possono essere trafugati attraverso questo confine.
✅ Non influenzato in questo scenario.
☠️ Denial of service (crash di sistema o comportamento imprevedibile), nessuna perdita di dati.
(1) La perdita tra processi richiede che SMT (Hyper-Threading) sia attivo — attaccante e vittima devono condividere un core fisico.
(2) Perde solo l'output di RDRAND/RDSEED, non memoria arbitraria; consente comunque di recuperare materiale crittografico da qualsiasi vittima.
(3) CVE-2018-3615 (Foreshadow SGX) inverte il normale modello di fiducia: il sistema operativo legge i dati dell'enclave SGX. È irrilevante a meno che il sistema non esegua enclave SGX, e l'attaccante deve già avere accesso a livello di sistema operativo.
(4) La perdita VM→Host si applica solo a determinati modelli di CPU interessati (Skylake-X, Kaby Lake, Comet Lake). Ice Lake, Tiger Lake e Rocket Lake sono interessati solo per attacchi nativi (utente- kernel), non da guest a host.
CVE-2017-5753 — Bypass del controllo dei limiti (Spectre Variante 1)
Un attaccante può addestrare il predittore di ramo a sbagliare un controllo dei limiti, causando l'accesso speculativo della CPU a memoria fuori dai limiti. Questo interessa tutto il software, incluso il kernel, perché qualsiasi controllo condizionale dei limiti può potenzialmente essere sfruttato. La mitigazione richiede la ricompilazione del software e del kernel con un compilatore che inserisca istruzioni LFENCE (o barriere di speculazione equivalenti come array_index_nospec) nelle posizioni appropriate. L'impatto sulle prestazioni è trascurabile perché le barriere si applicano solo a pattern di codice specifici e mirati.
CVE-2017-5715 — Iniezione del ramo target (Spectre Variante 2)
Un attaccante può avvelenare il Branch Target Buffer (BTB) per reindirizzare l'esecuzione speculativa di rami indiretti nel kernel, perdendo memoria del kernel. Esistono due strategie di mitigazione: (1) aggiornamenti del microcodice che forniscono IBRS (Indirect Branch Restricted Speculation), che svuota lo stato del predittore di ramo alle transizioni di privilegio — questo ha un costo di prestazioni medio-alto, specialmente su hardware più vecchio; o (2) retpoline, una tecnica del compilatore che sostituisce i rami indiretti con un costrutto che lo speculatore non può sfruttare — questo ha un costo di prestazioni inferiore ma richiede la ricompilazione del kernel e del software sensibile.
CVE-2017-5754 — Caricamento dati cache non autorizzato (Meltdown)
Su processori Intel interessati, un processo utente può leggere speculativamente la memoria del kernel nonostante manchi l'autorizzazione. La CPU alla fine solleva un'eccezione, ma i dati lasciano tracce osservabili nella cache. La mitigazione è interamente lato kernel: Page Table Isolation (PTI/KPTI) smappa la maggior parte della memoria del kernel dalle tabelle delle pagine dello spazio utente, quindi non c'è nulla da leggere speculativamente. L'impatto sulle prestazioni è da basso a medio, principalmente a causa della maggiore pressione TLB causata dal cambio delle tabelle delle pagine ad ogni ingresso e uscita dal kernel.
CVE-2018-3640 — Lettura registro di sistema non autorizzata (Variante 3a)
Simile a Meltdown ma mirato ai registri di sistema: un processo non privilegiato può leggere speculativamente i valori dei registri di sistema privilegiati (come i Model-Specific Registers) e esfiltrarli tramite un canale laterale. La mitigazione richiede solo un aggiornamento del microcodice — non sono necessarie modifiche al kernel. L'impatto sulle prestazioni è trascurabile.
Diverse CVE di esecuzione transitoria non sono coperte da questo strumento, per vari motivi (duplicati, interessano solo hardware o SO non supportati, teoriche senza sfruttamento noto, ecc.). L'elenco completo con la motivazione per ogni esclusione è disponibile nel file UNSUPPORTED_CVE_LIST.md.
Sistemi operativi supportati:
Per i sistemi Linux, lo strumento rileva le mitigazioni, incluse patch non vanilla backportate, indipendentemente dal numero di versione del kernel pubblicizzato e dalla distribuzione (come Debian, Ubuntu, CentOS, RHEL, Fedora, openSUSE, Arch, ...), funziona anche se hai compilato il tuo kernel. Maggiori informazioni qui.
Altri sistemi operativi come MacOS, Windows, ESXi, ecc. non saranno mai supportati.
Architetture supportate:
x86 (32 bit)amd64/x86_64 (64 bit)ARM e ARM64Qual è lo scopo di questo strumento? Perché è stato scritto? Come può essermi utile? Come funziona? Cosa posso aspettarmi da esso?
Tutte queste domande (e altre) hanno risposte dettagliate nella FAQ, dai un'occhiata!
Lo script supporta quattro modalità operative, a seconda che si desideri ispezionare il kernel in esecuzione, un'immagine del kernel, l'hardware della CPU o una combinazione.
In modalità Live (quella predefinita), lo script ispeziona sia la CPU che il kernel in esecuzione.
Opzionalmente puoi passare --kernel, --config o --map per indicare allo script file che non ha potuto rilevare automaticamente.
In modalità No-runtime, lo script legge ancora la CPU locale (CPUID, MSR, microcodice) ma salta tutti gli artefatti del kernel in esecuzione (/sys, /proc, dmesg).
Usa questa modalità quando hai un'immagine del kernel da un altro sistema ma vuoi valutarla rispetto alla CPU corrente.
In modalità No-hardware, sia l'ispezione della CPU che gli artefatti del kernel in esecuzione vengono saltati completamente. È utile per l'analisi cross-architettura, ad esempio ispezionando un'immagine del kernel ARM su una workstation x86.
In modalità Solo-hardware, lo script riporta solo le informazioni della CPU e la suscettibilità hardware per ogni CVE, senza ispezionare alcun kernel.
Ottieni l'ultima versione dello script usando curl o wget
curl -L https://meltdown.ovh -o spectre-meltdown-checker.sh
wget https://meltdown.ovh -O spectre-meltdown-checker.sh
Ispeziona lo script. Non esegui mai ciecamente script scaricati da Internet, vero?
vim spectre-meltdown-checker.sh
Quando sei pronto, esegui lo script come root
chmod +x spectre-meltdown-checker.sh
sudo ./spectre-meltdown-checker.sh
Usando docker compose:```shell
docker compose build
docker compose run --rm spectre-meltdown-checker
Nota che nelle versioni più vecchie di docker, `docker-compose` è un comando separato, quindi potresti dover sostituire le due occorrenze di `docker compose` sopra con `docker-compose`.
Usando `docker build` direttamente:```shell
docker build -t spectre-meltdown-checker .
docker run --rm --privileged -v /boot:/boot:ro -v /dev/cpu:/dev/cpu:ro -v /lib/modules:/lib/modules:ro spectre-meltdown-checker

| Campionamento dati microarchitetturale di memoria non cacheable |
| MDSUM, RIDL |
| CVE-2019-11135 | Abbandono asincrono TSX | TAA, ZombieLoad V2 |
| CVE-2020-0543 | Campionamento dati del buffer di registro speciale | SRBDS, CROSSTalk |
| CVE-2022-21123 | Lettura dati dei buffer condivisi | SBDR, MMIO Stale Data |
| CVE-2022-21125 | Campionamento dati dei buffer condivisi | SBDS, MMIO Stale Data |
| CVE-2022-21166 | Scrittura parziale del registro del dispositivo | DRPW, MMIO Stale Data |
| CVE-2022-29900 | Esecuzione di codice speculativo arbitrario tramite istruzioni di return | Retbleed (AMD) |
| CVE-2022-29901 | Esecuzione di codice speculativo arbitrario tramite istruzioni di return | Retbleed (Intel), RSBA |
| CVE-2022-40982 | Campionamento dati Gather | Downfall, GDS |
| CVE-2023-20569 | Sicurezza dell'indirizzo di ritorno | Inception, SRSO |
| CVE-2023-20588 | Perdita di dati speculativa per divisione per zero AMD | DIV0 |
| CVE-2023-20593 | Perdita di informazioni tra processi | Zenbleed |
| CVE-2023-23583 | Problema del prefisso ridondante | Reptar |
| CVE-2023-28746 | Campionamento dati del file di registro | RFDS |
| CVE-2024-28956 | Selezione indiretta del target | ITS |
| CVE-2024-36350 | Attacco allo scheduler transiente, Store Queue | TSA-SQ |
| CVE-2024-36357 | Attacco allo scheduler transiente, L1 | TSA-L1 |
| CVE-2025-40300 | Predizione di ramo stantia all'uscita VM | VMScape |
| CVE-2024-45332 | Iniezione di privilegio di ramo | BPI |
| CVE-2025-54505 | Perdita di dati stantia dal divisore floating-point AMD Zen1 | FPDSS |
| CVE-0001-0002 | Caricamento speculativo non privilegiato (errata 2966298, 3117295) | Cortex-A510/A520 |
| CVE-0001-0003 | MSR SSBS non auto-sincronizzante (erratum 3194386 + siblings) | Cortex-A76/A77/A78/A78C/A710/A715/A720/A720AE/A725, X1/X1C/X2/X3/X4/X925, Neoverse-N1/N2/N3/V1/V2/V3/V3AE |
| Vulnerabilità | Userland → Kernel | Userland → Userland | VM → Host | VM → VM | Mitigazione |
|---|
| CVE-2017-5753 (Spectre V1) | 💥 | 💥 | 💥 | 💥 | Ricompilare tutto con LFENCE |
| CVE-2017-5715 (Spectre V2) | 💥 | 💥 | 💥 | 💥 | Microcodice + aggiornamento kernel (o retpoline) |
| CVE-2017-5754 (Meltdown) | 💥 | ✅ | ✅ | ✅ | Aggiornamento kernel |
| CVE-2018-3640 (Variante 3a) | 💥 | ✅ | ✅ | ✅ | Aggiornamento microcodice |
| CVE-2018-3639 (Variante 4, SSB) | ✅ | 💥 | ✅ | ✅ | Microcodice + aggiornamento kernel |
| CVE-2018-3615 (Foreshadow, SGX) | ✅ (3) | ✅ (3) | ✅ (3) | ✅ (3) | Aggiornamento microcodice |
| CVE-2018-3620 (Foreshadow-NG, OS/SMM) | 💥 | ✅ | ✅ | ✅ | Aggiornamento kernel |
| CVE-2018-3646 (Foreshadow-NG, VMM) | ✅ | ✅ | 💥 | 💥 | Aggiornamento kernel (o disabilitare EPT/SMT) |
| CVE-2018-12126 (MSBDS, Fallout) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2018-12127 (MLPDS, RIDL) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2018-12130 (MFBDS, ZombieLoad) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2018-12207 (iTLB Multihit, No eXcuses) | ✅ | ✅ | ☠️ | ✅ | Aggiornamento hypervisor (o disabilitare le hugepages) |
| CVE-2019-11091 (MDSUM, RIDL) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2019-11135 (TAA, ZombieLoad V2) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2020-0543 (SRBDS, CROSSTalk) | 💥 (2) | 💥 (2) | 💥 (2) | 💥 (2) | Microcodice + aggiornamento kernel |
| CVE-2022-21123 (SBDR, MMIO Stale Data) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2022-21125 (SBDS, MMIO Stale Data) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2022-21166 (DRPW, MMIO Stale Data) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2022-29900 (Retbleed AMD) | 💥 | ✅ | 💥 | ✅ | Aggiornamento kernel (+ microcodice per IBPB) |
| CVE-2022-29901 (Retbleed Intel, RSBA) | 💥 | ✅ | 💥 | ✅ | Microcodice + aggiornamento kernel (eIBRS o IBRS) |
| CVE-2022-40982 (Downfall, GDS) | 💥 | 💥 | 💥 | 💥 | Aggiornamento microcodice (o disabilitare AVX) |
| CVE-2023-20569 (Inception, SRSO) | 💥 | ✅ | 💥 | ✅ | Microcodice + aggiornamento kernel |
| CVE-2023-20588 (DIV0) | 💥 | 💥 (1) | 💥 | 💥 (1) | Aggiornamento kernel (+ disabilitare SMT) |
| CVE-2023-20593 (Zenbleed) | 💥 | 💥 | 💥 | 💥 | Aggiornamento microcodice (o workaround kernel) |
| CVE-2023-23583 (Reptar) | ☠️ | ☠️ | ☠️ | ☠️ | Aggiornamento microcodice |
| CVE-2023-28746 (RFDS) | 💥 | ✅ | 💥 | ✅ | Microcodice + aggiornamento kernel |
| CVE-2024-28956 (ITS) | 💥 | ✅ | 💥 (4) | ✅ | Microcodice + aggiornamento kernel |
| CVE-2024-36350 (TSA-SQ) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2024-36357 (TSA-L1) | 💥 | 💥 (1) | 💥 | 💥 (1) | Microcodice + aggiornamento kernel |
| CVE-2025-40300 (VMScape) | ✅ | ✅ | 💥 | ✅ | Aggiornamento kernel (IBPB all'uscita VM) |
| CVE-2024-45332 (BPI) | 💥 | ✅ | 💥 | ✅ | Aggiornamento microcodice |
| CVE-2025-54505 (FPDSS) | 💥 | 💥 | 💥 | 💥 | Aggiornamento kernel |
La CPU può caricare speculativamente un valore dalla memoria prima che uno store precedente allo stesso indirizzo sia completato, leggendo dati stantii. Questo interessa principalmente il software che utilizza compilazione JIT (ad esempio motori JavaScript, eBPF), dove un attaccante può creare codice che sfrutta la dipendenza store-to-load. Nessuno sfruttamento noto contro il kernel stesso è stato dimostrato. La mitigazione richiede un aggiornamento del microcodice (che fornisce il meccanismo SSBD) più un aggiornamento del kernel che permetta al software interessato di aderire alla protezione tramite prctl(). L'impatto sulle prestazioni è da basso a medio, a seconda di quanto frequentemente la mitigazione viene attivata.
CVE-2018-3615 — Guasto terminale L1 (Foreshadow, SGX)
L'attacco Foreshadow originale prende di mira le enclave SGX Intel. Quando il bit Present di una voce di tabella di pagina viene cancellato, la CPU può ancora utilizzare speculativamente l'indirizzo fisico nella voce per recuperare dati dalla cache L1, bypassando le protezioni SGX. Un attaccante può estrarre segreti (chiavi di attestazione, dati sigillati) dalle enclave SGX. La mitigazione richiede un aggiornamento del microcodice che include modifiche al comportamento SGX. L'impatto sulle prestazioni è trascurabile.
CVE-2018-3620 — Guasto terminale L1 (Foreshadow-NG, OS/SMM)
Una generalizzazione di Foreshadow oltre SGX: codice utente non privilegiato può sfruttare lo stesso meccanismo L1TF per leggere la memoria del kernel o la memoria della System Management Mode (SMM). La mitigazione richiede un aggiornamento del kernel che implementi l'inversione PTE — contrassegnando le voci di tabella di pagina non presenti con indirizzi fisici non validi in modo che la cache L1 non possa contenere dati utili a quegli indirizzi. L'impatto sulle prestazioni è trascurabile perché l'inversione PTE è una modifica una tantum alla logica di gestione della tabella di pagina senza overhead in esecuzione.
CVE-2018-3646 — Guasto terminale L1 (Foreshadow-NG, VMM)
Una VM guest può sfruttare L1TF per leggere la memoria appartenente all'host o ad altre guest, perché le tabelle di pagina dell'hypervisor possono avere voci non presenti che puntano a indirizzi fisici validi dell'host ancora residenti in L1. Le opzioni di mitigazione includono: svuotare la cache dati L1 ad ogni ingresso VM (tramite un aggiornamento del kernel che fornisce supporto per lo svuotamento L1d), disabilitare le Extended Page Tables (EPT), o disabilitare l'Hyper-Threading (SMT) per evitare che un thread fratello riempia la cache L1 durante la speculazione. L'impatto sulle prestazioni varia da basso a significativo a seconda della mitigazione scelta, con lo svuotamento L1d all'ingresso VM che è il più pratico ma comunque misurabile su carichi di lavoro VM pesanti.
CVE-2018-12126 — Campionamento dati del buffer store microarchitetturale (MSBDS, Fallout)
CVE-2018-12127 — Campionamento dati del porta di carico microarchitetturale (MLPDS, RIDL)
CVE-2018-12130 — Campionamento dati del buffer di riempimento microarchitetturale (MFBDS, ZombieLoad)
CVE-2019-11091 — Campionamento dati microarchitetturale di memoria non cacheable (MDSUM, RIDL)
Queste quattro CVE sono collettivamente note come vulnerabilità "MDS" (Microarchitectural Data Sampling). Sfruttano diversi buffer interni della CPU — store buffer, fill buffer, load ports e percorsi di memoria non cacheable — che possono perdere dati recentemente accessati attraverso i confini di privilegio durante l'esecuzione speculativa. Un attaccante non privilegiato può osservare dati recentemente elaborati dal kernel o da altri processi. La mitigazione richiede un aggiornamento del microcodice (che fornisce il meccanismo MD_CLEAR) più un aggiornamento del kernel che utilizza VERW per cancellare i buffer interessati alle transizioni di privilegio. Disabilitare l'Hyper-Threading (SMT) fornisce protezione aggiuntiva perché i thread fratelli condividono questi buffer. L'impatto sulle prestazioni è da basso a significativo, a seconda della frequenza delle transizioni del kernel e se SMT è disabilitato.
CVE-2018-12207 — Eccezione di controllo macchina sui cambi di dimensione di pagina (iTLB Multihit, No eXcuses)
Una VM guest malintenzionata può innescare un'eccezione di controllo macchina (MCE) — facendo crashare l'intero host — creando condizioni specifiche nel TLB delle istruzioni che coinvolgono cambi di dimensione di pagina. Questa è una vulnerabilità di denial-of-service che interessa gli hypervisor che eseguono guest non fidati. La mitigazione richiede la disabilitazione dell'uso di hugepages nell'hypervisor o l'aggiornamento dell'hypervisor per evitare le configurazioni iTLB problematiche. L'impatto sulle prestazioni varia da basso a significativo a seconda dell'approccio: disabilitare le hugepages può influire sostanzialmente sui carichi di lavoro con uso intensivo di memoria.
CVE-2019-11135 — Abbandono asincrono TSX (TAA, ZombieLoad V2)
Su CPU con Intel TSX, un abbandono transazionale può lasciare dati dai buffer di riempimento delle righe in uno stato osservabile attraverso canali laterali, simile alle vulnerabilità MDS ma innescato tramite TSX. La mitigazione richiede un aggiornamento del microcodice più supporto del kernel per cancellare i buffer interessati o disabilitare completamente TSX (tramite il MSR TSX_CTRL). L'impatto sulle prestazioni è da basso a significativo, simile a MDS, con l'opzione di eliminare completamente la superficie di attacco disabilitando TSX a costo di perdere il supporto per la memoria transazionale.
CVE-2020-0543 — Campionamento dati del buffer di registro speciale (SRBDS, CROSSTalk)
Alcune istruzioni speciali della CPU (RDRAND, RDSEED, EGETKEY) leggono dati attraverso un buffer staging condiviso accessibile su tutti i core tramite esecuzione speculativa. Un attaccante che esegue codice su qualsiasi core può osservare l'output di queste istruzioni da una vittima su un core diverso, incluso l'estrarre chiavi crittografiche da enclave SGX (è stata dimostrata una chiave ECDSA completa). Questo è notevole come uno dei primi attacchi di esecuzione speculativa cross-core. La mitigazione richiede un aggiornamento del microcodice che serializza l'accesso al buffer staging, più un aggiornamento del kernel per gestire la mitigazione. L'impatto sulle prestazioni è basso, interessando principalmente i carichi di lavoro che usano pesantemente RDRAND/RDSEED.
CVE-2022-21123, CVE-2022-21125, CVE-2022-21166 — Dati stantii MMIO del processore (SBDR, SBDS, DRPW)
Una classe di vulnerabilità MMIO (Memory-Mapped I/O) in cui dati stantii dai buffer interni della CPU possono essere dedotti attraverso attacchi a canale laterale durante operazioni MMIO. Sono coperte tre sotto-vulnerabilità: lettura dati dei buffer condivisi (SBDR, CVE-2022-21123), campionamento dati dei buffer condivisi (SBDS, CVE-2022-21125) e scrittura parziale del registro del dispositivo (DRPW, CVE-2022-21166). Le CPU Intel interessate includono i processori server e client da Haswell a Rocket Lake, più i core Atom Tremont. La mitigazione richiede un aggiornamento del microcodice che fornisce la capacità FB_CLEAR (l'istruzione VERW cancella i buffer di riempimento) più un aggiornamento del kernel (Linux 5.19+) che invoca VERW alle transizioni kernel/utente e all'ingresso/uscita VM. Quando SMT è abilitato, i thread fratelli possono ancora sfruttare la vulnerabilità anche con le mitigazioni attive. L'impatto sulle prestazioni è basso, poiché il meccanismo VERW è condiviso con la mitigazione MDS esistente.
CVE-2022-29900 — Esecuzione di codice speculativo arbitrario tramite istruzioni di return (Retbleed AMD)
Su processori AMD delle famiglie 0x15 fino a 0x17 (Bulldozer fino a Zen 2) e Hygon famiglia 0x18, un attaccante può sfruttare le istruzioni di return per reindirizzare l'esecuzione speculativa e perdere memoria del kernel, bypassando le mitigazioni retpoline che erano efficaci contro Spectre V2. A differenza di Spectre V2 che prende di mira salti e chiamate indirette, Retbleed prende di mira specificamente le istruzioni di return, che erano precedentemente considerate sicure. La mitigazione richiede un aggiornamento del kernel che fornisce sia il thunk di return non addestrato (RET sicuro) o il meccanismo IBPB-on-entry, più un aggiornamento del microcodice che fornisce supporto IBPB su Zen 1/2. Su Zen 1/2, SMT deve essere disabilitato per una protezione completa quando si utilizza la mitigazione basata su IBPB. L'impatto sulle prestazioni è medio.
CVE-2022-29901 — Esecuzione di codice speculativo arbitrario tramite istruzioni di return (Retbleed Intel, RSBA)
Su processori Intel da Skylake a Rocket Lake con RSB Alternate Behavior (RSBA), le istruzioni di return possono essere reindirizzate speculativamente tramite il Branch Target Buffer quando il Return Stack Buffer va in underflow, bypassando le mitigazioni retpoline. La mitigazione richiede Enhanced IBRS (eIBRS, tramite aggiornamento del microcodice) o un kernel compilato con supporto IBRS-on-entry (Linux 5.19+). Il tracciamento della profondità delle chiamate (stuffing) è una mitigazione alternativa disponibile da Linux 6.2+. Il semplice retpoline NON mitiga questa vulnerabilità su CPU capaci di RSBA. L'impatto sulle prestazioni è medio-alto.
**CVE-2022-40982 — Campionamento dati Gather (GDS, Downfall)**Le istruzioni AVX GATHER possono divulgare dati provenienti da registri vettoriali precedentemente utilizzati attraverso i confini di privilegio tramite il buffer di dati di raccolta condiviso. Ciò interessa qualsiasi software che utilizza AVX2 o AVX-512 su processori Intel vulnerabili. La mitigazione è fornita da un aggiornamento del microcodice che cancella il buffer di raccolta, o in alternativa disabilitando completamente la funzionalità AVX. L'impatto sulle prestazioni è trascurabile per la maggior parte dei carichi di lavoro ma può essere significativo (fino al 50%) per applicazioni AVX-intensive come HPC e inferenza AI.
CVE-2023-20569 — Return Address Security (Inception, SRSO)
Su processori AMD Zen 1 fino a Zen 4, un attaccante può manipolare il predittore di indirizzi di ritorno per reindirizzare l'esecuzione speculativa sulle istruzioni di ritorno, divulgando memoria del kernel. La mitigazione richiede sia un aggiornamento del kernel (che fornisce sequenze safe-return SRSO o IBPB-on-entry) sia un aggiornamento del microcodice (che fornisce SBPB su Zen 3/4, o supporto IBPB su Zen 1/2 — che richiede inoltre la disabilitazione di SMT). L'impatto sulle prestazioni varia da basso a significativo a seconda della mitigazione scelta e della generazione della CPU.
CVE-2023-20588 — AMD Division by Zero Speculative Data Leak (DIV0)
Su processori AMD Zen 1, un'eccezione #DE (divisione per zero) può lasciare dati quozienti obsoleti di una precedente divisione nell'unità divisore, osservabili da una successiva divisione tramite canali laterali speculativi. Ciò può divulgare dati attraverso qualsiasi confine di privilegio, incluso tra thread fratelli SMT che condividono lo stesso core fisico. La mitigazione richiede un aggiornamento del kernel (Linux 6.5+) che aggiunge una divisione fittizia (amd_clear_divider()) ad ogni uscita verso lo spazio utente e prima di VMRUN, impedendo la persistenza di dati obsoleti. Non è necessario un aggiornamento del microcodice. Disabilitare SMT fornisce protezione aggiuntiva perché la mitigazione del kernel non copre le fughe tra thread SMT. L'impatto sulle prestazioni è trascurabile.
CVE-2023-20593 — Cross-Process Information Leak (Zenbleed)
Un bug nei processori AMD Zen 2 fa sì che l'istruzione VZEROUPPER azzeri in modo errato i file di registro durante l'esecuzione speculativa, lasciando dati obsoleti di altri processi osservabili nei registri vettoriali. Ciò può divulgare dati attraverso qualsiasi confine di privilegio, inclusi kernel e altri processi, a velocità fino a 30 KB/s per core. La mitigazione è disponibile tramite un aggiornamento del microcodice che risolve il bug, o tramite una soluzione alternativa del kernel che imposta il bit FP_BACKUP_FIX (bit 9) nel MSR DE_CFG, disabilitando l'ottimizzazione difettosa. Uno dei due approcci è sufficiente. L'impatto sulle prestazioni è trascurabile.
CVE-2023-23583 — Redundant Prefix Issue (Reptar)
Un bug nei processori Intel causa comportamenti imprevisti durante l'esecuzione di istruzioni con specifici prefissi REX ridondanti. A seconda delle circostanze, ciò può provocare un crash del sistema (MCE), comportamento imprevedibile o potenzialmente escalation dei privilegi. Qualsiasi software in esecuzione su una CPU interessata può attivare il bug. La mitigazione richiede un aggiornamento del microcodice. L'impatto sulle prestazioni è basso.
CVE-2023-28746 — Register File Data Sampling (RFDS)
Su alcuni processori Intel Atom e ibridi (Goldmont, Goldmont Plus, Tremont, Gracemont e i core Atom di Alder Lake e Raptor Lake), il file di registro può trattenere dati obsoleti da operazioni precedenti accessibili tramite esecuzione speculativa, consentendo a un attaccante di dedurre dati attraverso i confini di privilegio. La mitigazione richiede sia un aggiornamento del microcodice (che fornisce la capacità RFDS_CLEAR) sia un aggiornamento del kernel (CONFIG_MITIGATION_RFDS, Linux 6.9+) che utilizza l'istruzione VERW per cancellare il file di registro durante le transizioni di privilegio. Le CPU con il bit di capacità RFDS_NO non sono interessate. L'impatto sulle prestazioni è basso.
CVE-2024-28956 — Indirect Target Selection (ITS)
Su alcuni processori Intel (Skylake-X stepping 6+, Kaby Lake, Comet Lake, Ice Lake, Tiger Lake, Rocket Lake), un attaccante può addestrare il predittore di rami indiretti per eseguire speculativamente un gadget mirato nel kernel, bypassando le protezioni eIBRS. Il Branch Target Buffer (BTB) utilizza solo bit di indirizzo parziali per indicizzare i target dei rami indiretti, consentendo al codice dello spazio utente di influenzare l'esecuzione speculativa dello spazio kernel. Alcune CPU interessate (Ice Lake, Tiger Lake, Rocket Lake) sono vulnerabili solo ad attacchi nativi da utente a kernel, non ad attacchi guest-to-host (VMX). La mitigazione richiede sia un aggiornamento del microcodice (IPU 2025.1 / microcode-20250512+, che corregge IBPB per svuotare completamente le previsioni dei rami indiretti) sia un aggiornamento del kernel (CONFIG_MITIGATION_ITS, Linux 6.15+) che allinea i thunk di rami/ritorno o utilizza RSB stuffing. L'impatto sulle prestazioni è basso.
CVE-2024-36350 — Transient Scheduler Attack, Store Queue (TSA-SQ)
Su processori AMD Zen 3 e Zen 4, lo scheduler transitorio della CPU può recuperare speculativamente dati obsoleti dalla coda di store durante determinate finestre temporali, consentendo a un attaccante di dedurre dati da precedenti operazioni di store attraverso i confini di privilegio. L'attacco può anche divulgare dati tra thread fratelli SMT. La mitigazione richiede sia un aggiornamento del microcodice (che espone la capacità VERW_CLEAR) sia un aggiornamento del kernel (CONFIG_MITIGATION_TSA, Linux 6.16+) che utilizza l'istruzione VERW per cancellare i buffer della CPU durante le transizioni utente/kernel e prima di VMRUN. Il kernel cancella anche i buffer durante l'idle quando SMT è attivo. L'impatto sulle prestazioni è da basso a medio.
CVE-2024-36357 — Transient Scheduler Attack, L1 (TSA-L1)
Su processori AMD Zen 3 e Zen 4, lo scheduler transitorio della CPU può recuperare speculativamente dati obsoleti dalla cache dati L1 durante determinate finestre temporali, consentendo a un attaccante di dedurre dati nella cache L1D attraverso i confini di privilegio. La mitigazione richiede gli stessi aggiornamenti del microcodice e del kernel di TSA-SQ: un aggiornamento del microcodice che espone VERW_CLEAR e un aggiornamento del kernel (CONFIG_MITIGATION_TSA, Linux 6.16+) che cancella i buffer della CPU tramite VERW durante le transizioni di privilegio. L'impatto sulle prestazioni è da basso a medio.
CVE-2025-40300 — VM-Exit Stale Branch Prediction (VMScape)
Dopo che una VM guest esce verso l'host, previsioni di ramo obsolete del guest possono influenzare l'esecuzione speculativa lato host prima che il kernel ritorni allo spazio utente, consentendo a un attaccante locale di divulgare memoria del kernel host. Ciò interessa i processori Intel da Sandy Bridge a Arrow Lake/Lunar Lake, AMD Zen 1 fino a famiglie Zen 5 e Hygon famiglia 0x18. Solo i sistemi che eseguono un hypervisor con guest non fidati sono a rischio. La mitigazione richiede un aggiornamento del kernel (CONFIG_MITIGATION_VMSCAPE, Linux 6.18+) che emette IBPB prima di tornare allo spazio utente dopo un'uscita dalla VM. Non è richiesto un aggiornamento specifico del microcodice oltre al supporto IBPB esistente. L'impatto sulle prestazioni è basso.
CVE-2024-45332 — Branch Privilege Injection (BPI)
Una condizione di gara nel meccanismo di aggiornamento del predittore di rami dei processori Intel (Coffee Lake fino a Raptor Lake, più alcune parti server e Atom) consente alle previsioni di rami dello spazio utente di influenzare brevemente l'esecuzione speculativa dello spazio kernel, minando le protezioni eIBRS e IBPB. Ciò significa che i sistemi che si affidano esclusivamente a eIBRS per la mitigazione di Spectre V2 potrebbero non essere completamente protetti senza la correzione del microcodice. La mitigazione richiede un aggiornamento del microcodice (intel-microcode 20250512+) che corregge i tempi di aggiornamento asincrono del predittore di rami in modo che eIBRS e IBPB funzionino come originariamente previsto. Non sono necessarie modifiche al kernel. L'impatto sulle prestazioni è trascurabile.
CVE-2025-54505 — AMD Zen1 Floating-Point Divider Stale Data Leak (FPDSS)
Su processori AMD Zen1 e Zen+ (EPYC 7001, EPYC Embedded 3000, Athlon 3000 con Radeon, Ryzen 3000 con Radeon, Ryzen PRO 3000 con Radeon Vega), il divisore a virgola mobile hardware può trattenere dati quozienti parziali da operazioni precedenti. In determinate circostanze, tali risultati possono essere divulgati a un altro thread che condivide lo stesso divisore, attraversando qualsiasi confine di privilegio. A questo è stato assegnato CVE-2025-54505 ed è stato pubblicato da AMD come AMD-SB-7053 il 2026-04-17. La mitigazione richiede un aggiornamento del kernel (commit mainline e55d98e77561, "x86/CPU: Fix FPDSS on Zen1", Linux 7.1) che imposta il bit 9 (ZEN1_DENORM_FIX_BIT) del MSR 0xc0011028 (MSR_AMD64_FP_CFG) incondizionatamente su ogni CPU Zen1 all'avvio, disabilitando l'ottimizzazione hardware responsabile della fuga. Non è richiesto un aggiornamento del microcodice: il chicken bit è presente nel silicio Zen1 dalla fabbrica ed è indipendente dalla revisione del microcodice. L'impatto sulle prestazioni è limitato a una piccola riduzione del throughput di divisione in virgola mobile, motivo per cui AMD non abilita il bit per impostazione predefinita nell'hardware.
| Modalità | Flag | Hardware CPU | Kernel in esecuzione | Immagine kernel | Caso d'uso |
|---|
| Live (predefinita) | (nessuno) | Sì | Sì | rilevamento automatico | Audit quotidiano del sistema corrente |
| No-runtime | --no-runtime | Sì | No | obbligatorio | Verificare un kernel diverso su questa CPU (ad es. pre-distribuzione) |
| No-hardware | --no-hw | No | No | obbligatorio | Analisi statica pura di un'immagine del kernel per un altro sistema o architettura |
| Solo-hardware | --hw-only | Sì | No | No | Verifica rapida della suscettibilità della CPU senza ispezionare alcun kernel |