Они есть давно. И, ДА, с их помощью можно творить чудеса с 1995 года. Но только очень локально.
То есть так вот чтобы запустил эксплойт и получил пароли - неа, не выйдет. Но в некоторых случаях можно подглядеть действительно секреную информацию. Только нужно постараться чтобы так повезло, создать условия.
Какова расплата?
О, здесь всё непросто. Так или иначе обе техники полагаются на изъяны в алгоритме спекулятивности, реализованном на уровне процессора. В том числе во внеочередном исполнении команд и в предсказании ветвления. Суть сводится к тому, чтобы конвеер команд исполнял как можно больше инструкций за такт. Только вот принадлежность потока инструкций к тому или иному потоку/приложению не проверяется ибо процессор сам по себе не а курсе, что за инструкции он исполняет. И, соответственно, можно использовать ложное предположение о результате выполнения (целевого) кода в своих целях, например.
Соответственно, на уровне ОС нужно разделить и страницы памяти и сами потоки приложений. Это дополнительные затраты в менеджере процессов и менеджере памяти. Происходят эти расходы при переключении между потоками и между userspace и kernelspace, при исполнении сискола, например. То есть сисколы теперь становятся ещё дороже.
В цифрах падение производительности в районе 20% наблюдается при использовании postgresql. Это в серверном сегменте. А на десктопе - потеря интерактивности. Например, браузер начинает "тупить", анимации перестают быть плавными. То есть система ощущается тормозной, как будто ей не хватает памяти и она немного свопится.
Есть тонкость, для более-менее полноценной нейтрализации недобросовестного использования branch prediction необходимо также обновление микрокода процессоров. Это делается через обновление firmware или "bios" или через заливку и активацию микрокода из userspace.
Есть возможность это безобразие отключить, так как падение производительности в некоторых неудачных случаях достигает 60% и более.
Для Linux-ов нужно прописать опции загрузки ядра
noibrs noibpb nopti
либо можно в debugfs прописать некоторые параметры. Для начала надо убедиться, что она смонтирована (systemd монтирует её автоматом), если вдруг она не смонтирована, то
mount -t debugfs nodev /sys/kernel/debug
И дальше
echo 0 > /sys/kernel/debug/x86/pti_enabled
echo 0 > /sys/kernel/debug/x86/ibpb_enabled
echo 0 > /sys/kernel/debug/x86/ibrs_enabled