В eBPF найдена возможность обхода защиты ядра Linux от атаки Spectre
В ядре Linux найдена уязвимость (CVE-2019-7308), позволяющая обойти защиту от проведения атак Spectre v1 через использование подсистемы eBPF. Проблема устранена в выпусках ядра 4.19.19 и 4.20.6, но в дистрибутивах пока остается неисправленной (Debian, RHEL, SUSE, Ubuntu).
Для чтения данных из привилегированных областей памяти при помощи атаки Spectre v1 необходимо наличие в привилегированном коде определенной последовательности команд. Подобные сочетания команд были удалены из ядра Linux, но разработчики не учли то, что подсистема eBPF позволяет инициировать выполнение в контексте ядра произвольных BPF-программ. Через манипуляцией с байткодом BPF атакующий может добиться условия выполнения JIT-компилятором eBPF необходимого для совершения атаки Spectre v1 сочетания машинных инструкций, приводящих к спекулятивному обращению к внешним областям памяти при совершении операций с указателем.
Дополнительно, можно отметить предложение включить в состав ядра Linux патч, реализующий дополнительный режим для отключения базирующейся на использовании PSTATE-бита SSBS (Speculative Store Bypass Safe) защиты от атак Spectre на уровне приложений. Подобная защита ощутимо снижает производительность некоторых типов приложений. Разработчики, которые уверены, что к их приложениям неприменима атака Spectre v4 (как правило, атаке подвержены программы с JIT, например, Java), могут для своих программ отключать предоставляемую ядром защиту при помощи опции PR_SET_SPECULATION_CTRL в prctl. Дополнительно предложен флаг PR_SPEC_DISABLE_NOEXEC, который позволяет отключить механизм наследования флага активации защиты для дочерних процессов.