
Proof-of-Concept für CVE-2021-33624
kompilieren mit
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
ausführen mit
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
wobei 1 und 2 CPU-Threads sind, die auf zwei verschiedenen Hardware-Kernen laufen, ffffffffa4925620 der Zielspeicher ist, den wir auslesen möchten, und 0x10 die Anzahl der auszulesenden Bytes ist. Der Exploit ist behoben, aber es ist immer noch möglich, die Ergebnisse zu beobachten, indem der Code als sudo ausgeführt wird, da die Gegenmaßnahmen nur im Nicht-Sudo-Fall angewendet werden.
Die Beispieladresse für das Auslesen kann mit sudo cat /proc/kallsyms | grep core_pattern ermittelt werden, und das erwartete Ergebnis wird mit cat /proc/sys/kernel/core_pattern angezeigt.
Die Verwendung von DIV-Instruktionen (intern gepatcht, um einen Branch zu enthalten, um Division-durch-Null-Ausnahmen zu vermeiden) zur Fehltrainierung des Branch Predictors wurde von Piotr während seiner Forschung entdeckt. Referenz https://www.openwall.com/lists/oss-security/2021/06/21/1
Besonderer Dank an Jann Horn, der die Grundlage dieses Exploit-Codes in seiner ursprünglichen Forschung entwickelt hat (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)