
Preuve de concept pour CVE-2021-33624
compiler avec
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
exécuter avec
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
où 1 et 2 sont des threads CPU qui s'exécutent sur deux cœurs matériels distincts, ffffffffa4925620 est la mémoire cible que nous voulons fuiter et 0x10 est le nombre d'octets à fuiter. L'exploit est corrigé mais il est toujours possible d'observer les résultats en exécutant le code en tant que sudo, car les contre-mesures ne sont appliquées que dans le cas non-sudo.
L'adresse exemple pour la fuite peut être obtenue avec sudo cat /proc/kallsyms | grep core_pattern et le résultat attendu visible avec cat /proc/sys/kernel/core_pattern
L'utilisation des instructions DIV (internement patchées pour inclure une branche, afin d'éviter les exceptions de division par zéro) pour entraîner incorrectement le prédicteur de branche a été découverte par Piotr lors de ses recherches. Référence https://www.openwall.com/lists/oss-security/2021/06/21/1
Remerciements spéciaux à Jann Horn, qui a développé le fondement de ce code d'exploit dans ses recherches initiales (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)