Исследователи из VUSec и Scuola Superiore Sant'Anna описали новый вариант атаки Spectre-v2, получивший имя Branch Target Reuse (BTR). Он эксплуатирует устаревшие записи предсказания косвенных переходов, которые остаются в процессоре после того, как JIT-движок освободил и переиспользовал память под сгенерированный код.
Под удар попадают JIT-движки в браузерах, языковых средах исполнения и ядре операционной системы — на процессорах разных производителей. Уязвимость задевает SpiderMonkey (JIT-движок Mozilla Firefox), GraalVM и cBPF JIT в ядре Linux, причём с заметно разной эксплуатируемостью и скоростью утечки.
Как работает Branch Target Reuse
Ключевая идея BTR — рассинхронизация между архитектурным состоянием кода и записями предсказателя переходов. Современные процессоры восстанавливают когерентность кода после его самомодификации, но не обязательно инвалидируют устаревшие записи косвенных переходов (branch targets).
В JIT-движках такие «мёртвые» цели могут пережить исходный код и быть переиспользованы, когда кэш кода заполняется заново. Это даёт примитив временного execute-after-free: атакующий перехватывает спекулятивное управление потоком на новый код по устаревшим смещениям, обходя программные защиты или добираясь до невыровненных гаджетов.
Последовательность действий выглядит так:
- Атакующий заставляет JIT-движок выделить тренировочный чанк и направляет ветвление жертвы на него, создавая запись в Branch Target Buffer (BTB), ссылающуюся на текущую точку входа.
- Тренировочный чанк освобождается, а на его место выделяется целевой чанк, частично переиспользующий тот же адрес.
- Косвенное ветвление запускается снова, процессор берёт устаревшую запись BTB и спекулятивно прыгает на старую точку входа тренировочного чанка.
- Итог — перехват потока управления и раскрытие секретных данных.
«Перенаправляя поток управления на архитектурно невалидную точку входа, атакующий может обойти смягчения Spectre или выполнить невыровненные инструкции, в конечном счёте раскрывая секретные данные», — поясняют авторы работы Сандер Вибинг, Юхуэй Чжу, Алессандро Бьонди и Кристиано Джуффрида.
Атака предполагает, что злоумышленник уже может исполнять непривилегированный код в JIT-движке и пытается вытащить чувствительные данные из хост-окружения. Критично, что устаревшая запись BTB не должна быть инвалидирована или вытеснена после освобождения тренировочного чанка, а предсказатель должен выбрать именно её.
Что удалось украсть
В качестве proof-of-concept исследователи собрали два сквозных эксплойта против ядра Linux. На полностью пропатченной системе с процессором Intel и включёнными по умолчанию защитами они позволяют утечь и восстановить хеш root-пароля за считаные минуты.
Сам класс Spectre известен с 2017 года: он использует спекулятивное исполнение — механизм, при котором процессор предугадывает и выполняет инструкции заранее. Злоумышленник заставляет CPU выполнить спекулятивные операции над чувствительными данными, а затем восстанавливает их по изменениям состояния кэша. Spectre v2 эксплуатирует предсказание косвенных переходов: атакующий «отравляет» предсказатель, жертва уходит по неверной ветке, а результат мисспрогноза, хотя и отбрасывается, оставляет следы в кэше.
Патчи и позиция вендоров
После ответственного раскрытия смягчения для BTR выпущены и влиты в ядро Linux — им присвоены CVE-2026-64507 и CVE-2026-64508.
GraalVM, по словам исследователей, затрудняет переиспользование регионов за счёт рандомизации расположения кэша JIT-кода. Mozilla рассматривала смягчения на основе IBPB (Indirect Branch Predictor Barrier), но сейчас приоритет отдан завершению и развёртыванию site isolation.
Публикация BTR вышла примерно через два месяца после того, как исследователи MIT CSAIL Даниэль Трухильо и Мэнджи Янь раскрыли технику спекулятивного исполнения Interrupt Injection, обходящую защиты Spectre v2 и позволяющую читать произвольную память ядра на Linux-системах с процессорами Intel и AMD.
Что делать администратору
Практический вывод для тех, кто держит Linux-серверы и рабочие станции: обновить ядро до версии, содержащей исправления CVE-2026-64507 и CVE-2026-64508. BTR относится к классу атак, которые не оставляют следов в логах, — их нельзя выявить по сигнатурам или аномалиям трафика, поэтому единственная надёжная мера — закрыть уязвимость патчем.
Отдельно стоит учесть, что для эксплуатации нужен уже исполняемый непривилегированный код на машине. Это делает BTR особенно опасным для многопользовательских систем, хостингов и сред, где на одном хосте соседствуют задачи разных арендаторов: утечка хеша root-пароля превращает локальный доступ в полноценный захват сервера.
Смежные материалы по теме: 14-летняя уязвимость ядра Linux, дающая root и побег из Docker, и четыре уязвимости повышения привилегий до root в ядре Linux.
Частые вопросы
Кого касается эта атака?
Всех, кто использует Linux на процессорах затронутых производителей — в первую очередь серверы и рабочие станции. Также под удар попадают JIT-движки браузеров и языковых сред: SpiderMonkey в Firefox, GraalVM и cBPF JIT в ядре Linux.
Что именно может украсть атакующий?
В proof-of-concept против ядра Linux исследователи за считаные минуты извлекали хеш root-пароля с полностью пропатченной системы Intel с защитами по умолчанию. Дальше этот хеш можно попытаться вскрыть перебором.
Это работает, если все патчи Spectre уже установлены?
Да, авторы подчёркивают, что эксплойты сработали на полностью пропатченной системе с включёнными по умолчанию защитами. BTR обходит существующие смягчения Spectre за счёт устаревших записей BTB.
Какие CVE закрывают эту уязвимость?
Смягчения влиты в ядро Linux под номерами CVE-2026-64507 и CVE-2026-64508. Обновление ядра до версии с этими исправлениями — основная мера защиты.
Mozilla и GraalVM уже выпустили патчи?
GraalVM снижает риск за счёт рандомизации расположения JIT-кэша. Mozilla рассматривала смягчения на базе IBPB, но сейчас сосредоточена на завершении и развёртывании site isolation.
Можно ли засечь эксплуатацию BTR по логам?
Нет. Это спекулятивная атака через тайминг кэша, она не оставляет характерных записей. Обнаружить её по журналам или сетевому трафику нельзя — защищаться нужно патчем.
Нужен ли атакующему физический доступ к машине?
Нет. Достаточно возможности исполнять непривилегированный код в JIT-движке на целевой системе — например, через браузер или разделяемую среду исполнения.
Чем BTR отличается от обычного Spectre v2?
Классический Spectre v2 отравляет предсказатель переходов, чтобы жертва ушла по ложной ветке. BTR использует другой механизм: он опирается на устаревшие записи BTB, которые переживают освобождение и переиспользование памяти JIT-движком, давая временный execute-after-free.
Источник: thehackernews.com