
CVE-2021-33624 の実証コード
コンパイル方法
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
実行方法
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
ここで、1 と 2 は異なるハードウェアコアで動作する CPU スレッド、ffffffffa4925620 は漏洩させたい対象メモリ、0x10 は漏洩させるバイト数です。このエクスプロイトは修正されていますが、sudo でコードを実行すると結果を観察することができます。なぜなら、対策は非 sudo の場合にのみ適用されるからです。
漏洩のサンプルアドレスは sudo cat /proc/kallsyms | grep core_pattern で取得でき、期待される結果は cat /proc/sys/kernel/core_pattern で確認できます。
DIV 命令(ゼロ除算例外を避けるために内部でブランチを含むようにパッチされている)を使用してブランチ予測器を誤学習させる手法は、Piotr 氏の研究で発見されました。参照: https://www.openwall.com/lists/oss-security/2021/06/21/1
Jann Horn 氏に特別な感謝を。彼は初期の研究でこのエクスプロイトコードの基礎を開発しました (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)