Исследователи из VUSec при Vrije Universiteit Amsterdam и Scuola Superiore Sant’Anna представили новый вариант атак семейства Spectre-v2, получивший название Branch Target Reuse (BTR). Метод использует особенность современных процессоров: записи о целях косвенных переходов могут сохраняться в предсказателе ветвлений даже после того, как машинный код, для которого эти записи были сформированы, уже удалён и заменён другим кодом.
Особенно интересным BTR делает его связь с JIT-компиляцией. Технология Just-In-Time активно используется браузерами, виртуальными машинами и некоторыми механизмами Linux. Исследователи продемонстрировали практическую атаку на Linux с использованием classic BPF (cBPF), в результате которой удалось извлечь из памяти ядра хеш пароля пользователя root. При этом речь идёт именно о хеше, а не о получении пароля в открытом виде.
Что такое Spectre-v2
Атаки Spectre используют механизм спекулятивного выполнения современных процессоров. Для повышения производительности CPU заранее предполагает, какая инструкция будет выполняться следующей, и начинает выполнять её ещё до того, как окончательно станет известно, был ли выбран правильный путь.
Если предположение оказывается ошибочным, архитектурный результат выполнения отменяется. Однако микроархитектурные последствия могут сохраняться, например в кэшах процессора или структурах предсказания. Измеряя такие косвенные эффекты, атакующий иногда способен восстановить информацию, к которой обычный код доступа не имеет.
Spectre-v2 относится к атакам на косвенные переходы. Процессор использует специальные структуры, включая Branch Target Buffer (BTB), чтобы предсказывать адрес, по которому должен продолжиться косвенный переход. Если атакующему удаётся повлиять на это предсказание, процессор может временно начать выполнение инструкций по неправильному адресу.
Документация Linux Kernel описывает Spectre как класс атак по стороннему каналу, использующих предсказание ветвлений и спекулятивное выполнение для получения информации из памяти. Для Spectre-v2 основным механизмом является воздействие на предсказание косвенных переходов.
В чём особенность Branch Target Reuse
Классические варианты Spectre-v2 в основном используют пространственное несоответствие: один косвенный переход заставляют спекулятивно перейти к другому участку кода. BTR использует другую идею — временное несоответствие.
Сначала JIT-компилятор создаёт участок машинного кода. Атакующий добивается того, чтобы косвенный переход регулярно обращался к определённой точке этого участка. Процессор запоминает соответствующее направление в BTB.
Затем старый код освобождается. JIT-компилятор может использовать ту же область памяти для нового машинного кода. С точки зрения программного обеспечения старого кода уже нет, однако запись в предсказателе ветвлений может сохраняться.
Получается своеобразное рассогласование:
- операционная система и JIT считают, что по адресу находится новый код;
- предсказатель процессора всё ещё помнит старую цель перехода;
- при следующем выполнении перехода CPU может временно использовать устаревшую запись;
- спекулятивное выполнение способно попасть в другую часть нового кода или начать интерпретировать его байты с другого смещения.
Именно поэтому исследователи называют BTR разновидностью speculative execute-after-free. Это не обычное использование освобождённой памяти программой. Архитектурно процессор не должен продолжать выполнение старого кода, но микроархитектурное состояние предсказателя позволяет создать временное окно, в котором устаревшая информация используется для спекулятивного выполнения.
Как BTR применяется против Linux
Для демонстрации исследователи выбрали classic BPF. BPF используется в Linux для различных механизмов фильтрации и обработки событий. В частности, cBPF связан с seccomp, сетевой фильтрацией и другими подсистемами.
В эксперименте создавались два BPF-программы. Первая служила для тренировки предсказателя, после чего её область памяти освобождалась. Затем в частично той же области размещалась вторая программа. Когда косвенный переход выполнялся снова, процессор мог воспользоваться старой записью BTB и спекулятивно перейти к прежнему смещению.
Особенность cBPF позволила исследователям разместить необходимые последовательности байтов таким образом, чтобы при нормальном выполнении они представляли допустимый код, а при спекулятивном входе с другого смещения могли интерпретироваться как полезная последовательность инструкций.
В результате был создан полноценный сценарий утечки памяти. Исследователи смогли извлекать по восемь байт в секунду. Этого недостаточно для массового копирования памяти, но для адресного поиска конкретной информации такой скорости оказалось достаточно.
В демонстрации исследователи запустили процесс su, после чего с помощью утечки постепенно прошли связанные структуры ядра, нашли соответствующую структуру процесса и затем искали страницу памяти, содержащую хеш пароля root.
Таким образом, показанный сценарий демонстрирует не абстрактную возможность чтения памяти, а цепочку от спекулятивного выполнения до извлечения конкретных чувствительных данных.
Почему существующие защиты не всегда останавливают BTR
Исследование интересно ещё и тем, что BTR способен обходить ряд механизмов защиты, рассчитанных на традиционные сценарии Spectre-v2. Причина заключается в том, что атакующий не обязательно пытается направить косвенный переход на совершенно другой адрес.
Вместо этого используется тот же переход и фактически та же область памяти, но между двумя обращениями содержимое этой области меняется. Предсказатель продолжает использовать информацию, относящуюся к предыдущему состоянию кода.
Исследователи также проверили возможность обхода bpf_jit_harden, использующего constant blinding для усложнения JIT-spraying. Для этого применялись другие способы кодирования контролируемых байтов, связанные с параметрами переходов.
BTR затрагивает не только Linux
Исследование проводилось сразу в нескольких JIT-средах. Помимо Linux cBPF, специалисты изучили SpiderMonkey, используемый Firefox, и GraalVM от Oracle.
В SpiderMonkey исследователи проверяли сценарий с JavaScript и WebAssembly. Они показали возможность использовать устаревшие записи предсказателя для спекулятивного перехода внутрь данных, находящихся в JIT-коде. Полноценная удалённая атака на браузер при этом не была реализована.
В GraalVM эксперименты показали другой аспект проблемы. Даже если среда использует дополнительные проверки границ памяти для защиты недоверенного кода, спекулятивный переход может попытаться начать выполнение после такой проверки. Однако особенности работы сборщика мусора и компилятора в исследованной конфигурации мешали превратить демонстрацию в полноценную практическую атаку.
Какие процессоры подвержены проблеме
Исследователи сообщают о наблюдении необходимого поведения на процессорах Intel, AMD и Arm. Однако это не означает, что опубликованный эксплойт одинаково работает на всех архитектурах.
Полноценная демонстрация утечки памяти ядра была построена для Linux на современных процессорах Intel. Для других архитектур исследователи прежде всего показали наличие соответствующего поведения микроархитектуры.
Intel в своём официальном уведомлении от 1 октября 2026 года указывает, что рассматривает BTR как поведение, покрываемое существующими рекомендациями по защите от Spectre-v2, включая Branch History Injection и Intra-mode Branch Target Injection. Компания не классифицирует BTR как новую отдельную аппаратную уязвимость Intel, требующую специальной аппаратной меры защиты.
Защита Linux от BTR
Хорошая новость заключается в том, что исправления для Linux были подготовлены ещё до публичного раскрытия исследования. Разработчики ядра добавили защиту, связанную с использованием IBPB (Indirect Branch Predictor Barrier).
При повторном использовании ранее исполнявшейся области BPF JIT применяются дополнительные меры, препятствующие сохранению опасного состояния предсказателя. Одновременно были добавлены изменения, направленные на усиление защиты от JIT-spraying.
Для связанных изменений были назначены два идентификатора CVE:
- CVE-2026-64507 — включение IBPB flush при выделении памяти для BPF JIT;
- CVE-2026-64508 — усиление защиты BPF от JIT-spraying.
Подробное описание исправлений и самого механизма опубликовано исследовательской группой VUSec. Страница исследования BTR также содержит ссылку на научную работу и демонстрационные материалы.
Для серверов и рабочих станций основной практический вывод стандартен для подобных микроархитектурных атак: необходимо устанавливать актуальные обновления ядра Linux и следить за обновлениями используемых JIT-сред. Сам факт наличия процессора определённого производителя ещё не означает, что конкретная система эксплуатируема опубликованным способом.
Что это означает для серверов и контейнеров
BTR особенно интересен для многопользовательских систем, серверов, сред выполнения недоверенного кода и программ, использующих JIT. Теоретически ценность подобной атаки возрастает там, где один процесс может выполнять контролируемый атакующим код в том же адресном пространстве или окружении, где присутствуют чувствительные данные.
При этом BTR нельзя воспринимать как удалённую атаку, при которой достаточно отправить запрос на обычный Linux-сервер. Демонстрация требует достаточно сложной последовательности действий и возможности выполнять определённый код на атакуемой системе.
Поэтому практическая оценка риска зависит от конфигурации конкретного сервера, версии ядра, доступности BPF/JIT-механизмов, используемых программ и установленных исправлений.
Выводы
Branch Target Reuse показывает, что защита от Spectre-v2 должна учитывать не только архитектурно корректное состояние программного кода, но и микроархитектурное состояние процессора. JIT-компиляция создаёт особенно интересную ситуацию: один и тот же участок памяти может последовательно содержать совершенно разные программы, тогда как предсказатель ветвлений способен некоторое время сохранять информацию о предыдущем содержимом.
Главный результат исследования заключается не в появлении ещё одного универсального способа удалённого взлома Linux, а в демонстрации нового класса взаимодействия между JIT-кодом и предсказателем ветвлений. Исследователи показали, что такая комбинация может привести к реальной утечке данных ядра.
Для администраторов Linux наиболее важная мера — своевременно обновлять ядро до версии с исправлениями для CVE-2026-64507 и CVE-2026-64508 и не игнорировать обновления безопасности для программ, использующих JIT. Для разработчиков JIT-сред BTR служит дополнительным аргументом в пользу изоляции исполняемого кода и явной синхронизации программного состояния с микроархитектурными механизмами процессора.
Часто задаваемые вопросы
Branch Target Reuse — техника атаки класса Spectre-v2, использующая устаревшие записи предсказателя косвенных переходов после освобождения и повторного использования JIT-кода.
В опубликованной демонстрации был извлечён хеш пароля root из памяти ядра. Это не означает автоматического получения самого пароля в открытом виде: дальнейшее восстановление пароля из хеша является отдельной задачей.
Показанный исследователями сценарий не является простой удалённой сетевой атакой. Он предполагает возможность выполнения атакующего кода и выполнения ряда условий, необходимых для управления JIT-кодом и состоянием предсказателя.
Практическая демонстрация исследователей использует classic BPF и BPF JIT. cBPF применяется, в частности, в seccomp и сетевой фильтрации.
Само по себе ограничение непривилегированного eBPF не является универсальным решением, поскольку исследование посвящено classic BPF, который имеет собственные сценарии использования в Linux.
С атакой связаны CVE-2026-64507 и CVE-2026-64508. Первая связана с использованием IBPB при выделении памяти BPF JIT, вторая — с дополнительным усилением защиты от JIT-spraying.
Да. Если для используемой ветки ядра доступны исправления безопасности, рекомендуется установить актуальное обновление. Особенно это важно для серверов, где используются BPF, seccomp и другие механизмы, связанные с JIT.
Первоисточник находится на сайте VUSec: Branch Target Reuse. На странице доступны научная работа, описание экспериментов и материалы проекта.
