Проект Grsecurity опубликовал детали и демонстрацию метода атаки для новой уязвимости (CVE-2021-26341) в процессорах AMD, связанной со спекулятивным выполнением инструкций после операций безусловного прямого перехода. В случае успешного проведения атаки уязвимость позволяет определить содержимое произвольных областей памяти. Например, исследователями подготовлен эксплоит, позволяющий определить раскладку адресов и обойти механизм защиты KASLR (рандомизация памяти ядра) через выполнение непривилегированного кода в подсистеме ядра ePBF. Не исключены и другие сценарии атак, которые могут привести к утечке содержимого памяти ядра.
Уязвимость позволяет создать условия, при которых процессор в ходе упреждающего выполнения спекулятивно обработает инструкцию, следующую в памяти сразу за командой перехода (SLS, Straight Line Speculation). При этом подобная оптимизация срабатывает не только для операторов условного перехода, но и для инструкций подразумевающих прямой безусловный переход, таких как JMP, RET и CALL. Следом за инструкциями безусловного перехода могут размещаться в том числе произвольные данные, не предназначенные для исполнения.
После определения того, что переход не подразумевает выполнение следующей инструкции, процессор просто откатывает состояние и не учитывает спекулятивное выполнение, но след от выполнения инструкции остаётся в общем кэше и доступен для анализа с использованием методов извлечения по сторонним каналам.
Как и при эксплуатации уязвимости Spectre-v1 для осуществления атаки требуется наличие в ядре определённых последовательностей инструкций (гаджетов), приводящих к спекулятивному выполнению. Блокирование уязвимости при этом сводится к выявлению подобных гаджетов в коде и добавлению в них дополнительных инструкций, блокирующих спекулятивное выполнение. Условия для спекулятивного выполнения также могут быть созданы при помощи непривилегированных программ, выполняемых в виртуальной машине eBPF. Для блокирования возможности конструирования гаджетов при помощи eBPF рекомендуется запретить непривилегированный доступ к eBPF в системе (“sysctl -w kernel.unprivileged_bpf_disabled=1”).
Уязвимость затрагивает процессоры на базе микроархитектуры Zen1 и Zen2, включая первое и второе поколения процессоров AMD EPYC и AMD Ryzen Threadripper, а также процессоры AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper PRO и APU серии A. Для блокирования спекулятивного выполнения инструкций рекомендовано вызывать инструкции INT3 или LFENCE после операций ветвления (RET, JMP, CALL).