
Prova di concetto per CVE-2021-33624
compilare con
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
eseguire con
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
dove 1 e 2 sono thread della CPU che girano su due core hardware distinti, ffffffffa4925620 è la memoria di destinazione che vogliamo esfiltrare e 0x10 è il numero di byte da esfiltrare. L'exploit è mitigato, ma è ancora possibile osservare i risultati eseguendo il codice come sudo, poiché le contromisure vengono applicate solo nel caso non-sudo.
L'indirizzo di esempio per la fuga può essere ottenuto da sudo cat /proc/kallsyms | grep core_pattern e il risultato atteso si osserva con cat /proc/sys/kernel/core_pattern
L'uso delle istruzioni DIV (modificate internamente per includere un branch, al fine di evitare eccezioni di divisione per zero) per addestrare erroneamente il branch predictor è stato scoperto da Piotr durante la sua ricerca. Riferimento https://www.openwall.com/lists/oss-security/2021/06/21/1
Un ringraziamento speciale a Jann Horn, che ha sviluppato il fondamento di questo codice di exploit nella sua ricerca iniziale (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)