Spectre вернулся. Новая атака крадёт секреты через JIT-компиляторы

leer en español

770
Spectre вернулся. Новая атака крадёт секреты через JIT-компиляторы

Даже включенная защита не помешала добраться до root-хеша за считанные минуты.

image

Spectre снова нашёл лазейку там, где программы сами превращают код в машинные инструкции во время работы. Команда VUSec из Амстердамского свободного университета и Высшей школы Святой Анны показала атаку Branch Target Reuse (BTR), которая использует JIT-компиляторы в ядре Linux, браузерах и языковых средах для утечки секретов.

JIT-компилятор ускоряет программу, создавая машинный код прямо во время выполнения. BTR использует рассинхронизацию между таким кодом и предсказателем переходов процессора. После удаления старого участка JIT-кода процессор может сохранить прежнюю запись в Branch Target Buffer, а затем применить её к новому коду, который занял ту же область памяти.

Атакующий сначала заставляет JIT создать тренировочный участок и обучает процессор переходу к нужной точке. Затем участок освобождается, а память частично занимает другой фрагмент кода. При следующем косвенном переходе процессор способен спекулятивно прыгнуть по устаревшему адресу и выполнить инструкции, которых в нормальном потоке управления там уже нет.

Авторы называют механизм «спекулятивным use-after-free»: устаревшая запись предсказателя переживает код, для которого создавалась. Архитектурно процессор быстро исправляет ошибочный переход, однако следы спекулятивного выполнения остаются в микроархитектурном состоянии. Через сторонний канал атакующий может восстановить данные, к которым обычный код доступа не имеет.

Самый наглядный результат получили на Linux cBPF. Два полноценных эксплойта на современных процессорах Intel читали произвольную память ядра при включённых штатных защитах Spectre. Скорость составила около 8 байт в секунду, но целевого чтения оказалось достаточно, чтобы за несколько минут добраться до хеша пароля root, загруженного процессом su.

Исследование охватило также SpiderMonkey в Firefox и Oracle GraalVM. Для SpiderMonkey авторы подтвердили возможность спекулятивного выполнения через повторно занятый буфер JIT-кода и оценили потенциальную утечку в десятки байт в секунду, но полноценный браузерный эксплойт пока не собрали. В GraalVM сборщик мусора стирал нужные записи BTB раньше завершения атаки.

Поведение, на котором строится BTR, команда обнаружила на всех протестированных процессорах Intel, AMD и Arm. Практический end-to-end сценарий с кражей данных из ядра при этом продемонстрировали на Intel. Работа продолжает цепочку атак на предсказатели переходов: ранее VUSec показала Training Solo, где Spectre-v2 использовал самообучение внутри одного домена.

Для Linux проблему закрывают две записи. CVE-2026-64507 получила 5,6 балла по CVSS 3.1 в оценке Amazon Linux, а CVE-2026-64508 — 7,0 балла по CVSS 3.1 в оценке Red Hat. Значения различаются между поставщиками, поскольку учитывают особенности конкретных дистрибутивов и сборок ядра.

Разработчики Linux добавили очистку предсказателей через IBPB при повторном использовании памяти BPF JIT. Oracle усложнила повторное попадание кода по старым адресам рандомизацией размещения JIT-кэша. Mozilla рассматривала IBPB для SpiderMonkey, но сосредоточилась на изоляции сайтов, которая должна ограничить доступ вредоносной страницы к данным соседних вкладок.

BTR показывает, что аппаратные барьеры вроде IBT и BTI лишь повышают сложность подобных атак, но не устраняют сам разрыв между актуальным кодом и состоянием предсказателя. Похожую проблему уже использовала атака VMScape против виртуальных машин. Авторы BTR рекомендуют обновлять ОС и программные среды сразу после появления исправлений поставщиков.