Sonata

BTR: новая Spectre-уязвимость в JIT-компиляторах затрагивает Intel, AMD и Arm

image source

Исследователи из Нидерландов и Италии нашли новую уязвимость класса Spectre v2 — Branch Target Reuse (BTR). Она затрагивает чипы Intel, AMD и Arm и бьёт по JIT-компиляторам в ядрах ОС, браузерах и средах исполнения.

Причина в том, что после самомодификации кода процессоры могут сохранять устаревшие записи предсказания косвенных переходов.

В JIT-движках такие записи живут дольше исходного кода и срабатывают, когда по тем же адресам записан новый код: спекулятивное выполнение уходит на него по старым смещениям.

Для ядра Linux создали два эксплойта через классический BPF (cBPF). В отличие от eBPF, он доступен непривилегированным программам и используется в Seccomp, фильтрации сокетов и пакетов, Docker и Chrome.

На современных процессорах Intel эксплойт читает произвольные данные из памяти в обход активных защит. Даже при 8 байт/с, отслеживая цепочки указателей, удалось получить хеш пароля root после его загрузки в память.

В Oracle GraalVM атака спекулятивно обходит маскировку памяти, защищающую от Spectre. Компиляция и сборка мусора стирают записи о ветвлении раньше, но это ограничение, по мнению авторов, не фундаментально.

В Firefox атака идёт через вредоносный сайт с JavaScript. Изоляция сайтов в Mozilla ещё не развёрнута, поэтому данные всех вкладок могут оказаться в одном адресном пространстве с кодом атакующего.

В SpiderMonkey на процессорах Intel устаревшие записи сохраняются достаточно долго: утечка может достигать нескольких десятков байт в секунду. Полноценного эксплойта для браузера пока нет.

Защита потока управления (IBT на x86, BTI на Arm) усложняет атаку, но не устраняет её: старые чипы Intel спекулятивно исполняют код до завершения проверки IBT. Это исчезло лишь в Lion Cove (Arrow Lake, Lunar Lake).

Даже без «обгона» IBT защиту можно обойти, если отключена маскировка констант.

Программно угрозу нейтрализует барьер предсказания косвенных переходов (IBPB). Реакция разработчиков:

  • Linux: для x86 IBPB запускается, когда cBPF размещается в памяти, ранее занятой кодом BPF

  • Oracle: защитные меры развёрнуты

  • Mozilla: сосредоточилась на изоляции сайтов

  • AMD: новых уязвимостей нет, BTR закрывается рекомендациями против Spectre v2

  • Intel и Arm: комментариев пока нет

источник

Загрузка страницы