Spectre нашёл новый путь в JIT-компиляторах. Исследователи из Амстердамского свободного университета и Высшей школы Святой Анны обнаружили атаку Branch Target Reuse, которая работает в ядре Linux, браузерах и языковых средах выполнения.
JIT-компилятор создаёт машинный код во время исполнения программы. Атака использует рассинхронизацию между этим кодом и предсказателем переходов процессора. Когда старый JIT-код удаляется, предсказатель может сохранить его адрес. Если новый код занимает ту же область памяти, процессор выполнит инструкции по старому адресу спекулятивно.
Атакующий сначала обучает процессор переходить в нужное место, создав тренировочный код. Затем код удаляется, а его место занимает другой фрагмент. При следующем косвенном переходе процессор может прыгнуть по устаревшему адресу и выполнить инструкции спекулятивно. Это "спекулятивный use-after-free"—устаревшая запись пережила код, для которого создавалась.
Процессор быстро исправляет ошибочный переход, но следы спекулятивного выполнения остаются. Через сторонний канал можно восстановить данные, к которым обычный код не имеет доступа.
На Linux cBPF получены самые наглядные результаты. Два эксплойта на современных процессорах Intel читали произвольную память ядра при включённой защите от Spectre. Скорость утечки около 8 байт в секунду, но этого хватило, чтобы за несколько минут найти хеш root-пароля.
Исследование охватило SpiderMonkey в Firefox и Oracle GraalVM. Для Firefox авторы подтвердили возможность спекулятивного выполнения через повторно занятый буфер JIT-кода с потенциальной утечкой десятков байт в секунду, полноценный эксплойт не собрали. В GraalVM сборщик мусора очищал нужные записи раньше завершения атаки.
Поведение, используемое BTR, обнаружено на всех протестированных процессорах Intel, AMD и Arm. Практический сценарий с кражей данных из ядра демонстрирует работу на Intel. Это продолжение цепочки атак на предсказатели переходов—ранее та же группа показала Training Solo, где Spectre-v2 использует самообучение внутри одного домена.
Linux закрыла проблему двумя CVE. 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 против виртуальных машин. Рекомендуется обновлять ОС и программные среды сразу после выхода исправлений поставщиков.
