
Доказательство концепции для 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 — это потоки ЦП, которые выполняются на двух разных аппаратных ядрах, ffffffffa4925620 — целевая память, которую мы хотим извлечь, а 0x10 — количество байт для извлечения. Эксплойт исправлен, но всё ещё можно наблюдать результаты, выполняя код от sudo, так как контрмеры применяются только в случае без sudo.
Пример адреса для извлечения можно получить из sudo cat /proc/kallsyms | grep core_pattern, а ожидаемый результат увидеть с помощью cat /proc/sys/kernel/core_pattern
Использование инструкций DIV (внутренне изменённых для включения ветвления, чтобы избежать исключений деления на ноль) для неправильного обучения предсказателя ветвлений было обнаружено Петром в ходе его исследований. Ссылка https://www.openwall.com/lists/oss-security/2021/06/21/1
Особая благодарность Янну Хорну, который разработал основу этого кода эксплойта в своём первоначальном исследовании (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)