
Prova de Conceito para CVE-2021-33624
compilar com
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
executar com
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
onde 1 e 2 são threads de CPU que executam em dois núcleos de hardware distintos, ffffffffa4925620 é a memória alvo que queremos vazar e 0x10 é o número de bytes a serem vazados. O exploit está corrigido, mas ainda é possível observar os resultados executando o código como sudo, pois as contramedidas são aplicadas apenas no caso sem sudo.
O endereço de exemplo para o vazamento pode ser obtido com sudo cat /proc/kallsyms | grep core_pattern e o resultado esperado visto com cat /proc/sys/kernel/core_pattern
O uso de instruções DIV (internamente corrigidas para incluir um desvio, para evitar exceções de divisão por zero) para enganar o preditor de desvios foi descoberto por Piotr durante sua pesquisa. Referência https://www.openwall.com/lists/oss-security/2021/06/21/1
Agradecimentos especiais a Jann Horn, que desenvolveu o fundamento deste código de exploit em sua pesquisa inicial (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)