Группа исследователей из Амстердамского свободного университета выявила новую уязвимость в микроархитектурных структурах процессоров Intel и ARM, представляющую собой расширенный вариант уязвимости Spectre-v2, позволяющий обойти добавленные в процессоры механизмы защиты eIBRS и CSV2. Уязвимость присвоено несколько названий: BHI (Branch History Injection, CVE-2022-0001), BHB (Branch History Buffer, CVE-2022-0002) и Spectre-BHB (CVE-2022-23960), которые описывают разное проявление одной проблемы (BHI – атака, затрагивающая разные уровни привилегий, например, процесс пользователя и ядро, BHB – атака на одном уровне привилегий, например, eBPF JIT и ядро).
Исследователями продемонстрирован рабочий эксплоит, позволяющий из пространства пользователя извлекать произвольные данные из памяти ядра. Например, показано как при помощи подготовленного эксплоита можно извлечь из буферов ядра строку с хэшем пароля пользователя root, загруженную из файла /etc/shadow.
Кроме атаки, приводящей к утечке данных между разными уровнями привилегий, допускается возможность использования уязвимости и для атак в рамках одного уровня привилегий (атака из уровня ядра на ядро). Например, при помощи загруженной пользователем еBPF-программы или используя существующий в коде ядра Spectre-гаджет (последовательность команд, приводящая к спекулятивному выполнению инструкций) атакующий может создать условия для спекулятивного выполнения и определить содержимое произвольных областей памяти ядра.
Уязвимость проявляется в большинстве актуальных процессоров Intel, за исключения процессоров семейства Atom. Из процессоров ARM проблеме подвержены Cortex-A15, Cortex-A57, Cortex-A7*, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, Neoverse V1 и возможно некоторые чипы Cortex-R. По мнению исследований, в процессорах AMD уязвимость не проявляется.
Для устранения предложено несколько программных методов блокирования уязвимости. Примечательно, что в большинстве дистрибутивов Linux уже присутствуют необходимые меры защиты, достаточные для блокирования уязвимости. Рекомендации Intel по защите от нового варианта атаки применяются начиная с ядра Linux 5.16 и будут бэкпортированы в более ранние ветки. Для блокирования проведения атак через подсистему eBPF рекомендуется отключить по умолчанию возможность загрузки eBPF-программ непривилегированными пользователями, через запись 1 в файл
“/proc/sys/kernel/unprivileged_bpf_disabled” или при помощи команды “sysctl -w kernel.unprivileged_bpf_disabled=1”.
Концептуально BHI представляет собой расширенный вариант атаки Spectre-v2, в котором для обхода добавленной защиты (Intel eIBRS и Arm CSV2) и организации утечки данных используется подстановка значений в буфер с глобальной историей переходов (Branch History Buffer). Через манипуляции с историей переходов создаются условия неверного предсказания перехода и спекулятивного выполнения необходимых инструкций, результат которых оседает в кэше.
За исключением использования буфера с историей переходов (Branch History Buffer) вместо буфера предсказания ветвления (Branch Target Buffer) новая атака идентична Spectre-v2. Задача атакующего в создании таких условий, чтобы адрес при выполнении спекулятивной операции был взят из области определяемых данных. После выполнения спекулятивного косвенного перехода, считанный из памяти адрес перехода, остаётся в кэше, после чего для его извлечения может применяться один из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.