Training Solo – новые варианты атаки Spectre-v2, затрагивающие CPU Intel

Группа исследователей из Амстердамского свободного университета выявила несколько новых уязвимостей класса Spectre-v2, опубликованных под кодовым именем Training Solo и позволяющих обойти механизмы изоляции памяти. В контексте систем виртуализации, уязвимости дают возможность определить содержимое памяти хост-окружения или других гостевых систем, а в контексте серверов – определить содержимое памяти ядра при выполнении эксплоита в пространстве пользователя. Примеры эксплоитов для совершения подобных атак опубликованы на GitHub. Представленные эксплоиты позволяют извлекать произвольные данные из памяти ядра со скоростью 17 KB/сек, а из памяти гипервизора – 8.5 KB/сек.

В атаках класса Spectre-v2 для организации утечки данных используется подстановка значений в буфер адреса ветвления (Branch Target Buffer) или буфер с историей переходов (Branch History Buffer), применяемые для предсказания следующей операции ветвления. Через манипуляции с историей переходов создаются условия неверного предсказания перехода при спекулятивном выполнении инструкций. Задача атакующего в том, чтобы при выполнении спекулятивной операции ветвления адрес для перехода был взят из делаемой области памяти. После выполнения спекулятивного перехода, считанный из памяти адрес перехода (под видом адреса считываются необходимые атакующему данные из памяти), остаётся в процессорном кэше. Для извлечения информации из кэша может применяться один из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.

Представленные исследователями методы Training Solo нацелены на обход механизмов изоляции областей исполнения (domain isolation), таких как IBPB, eIBRS и BHI_NO, применяемых для блокирования атак класса Spectre-v2. Например, инструкция IBPB (Indirect Branch Prediction Barriers) обеспечивает сброс состояния блока предсказания переходов при каждом переключении контекста – при передаче управления между пространством пользователя и ядром или между гостевой системой и хост окружением. Сброс состояния блокирует возможность использования собственного кода для влияния на поведение блока предсказания косвенных переходов.

Суть методов Training Solo сводится к тому, что для влияния на блок предсказания переходов предлагается не запускать подконтрольный атакующему код, а использовать код, уже имеющийся на стороне привилегированной области исполнения (ядро или гипервизор), утечки из которой добивается атакующий. В остальном методы напоминают классическую атаку Spectre-v2. Помимо этого исследователи выявили две аппаратные проблемы (CVE-2024-28956 и CVE-2025-24495), позволяющие полностью обойти изоляцию областей исполнения и реализовать утечки из процессов других пользователей, других гостевых систем или хост-окружения.


Предложено три вида атак Training Solo:

  • Искажение логики предсказания переходов за счёт вызова уже существующих в ядре последовательностей команд (гаджетов), влияющих на содержимое буфера с историей переходов. В качестве подобных гаджетов предложено использовать механизм ограничения доступа к системным вызовам SECCOMP, позволяющий через подстановку своих BPF-фильтров добиться ложного косвенного перехода в спекулятивном режиме (фильтры в SECCOMP задаются при помощи классического cBPF, включённого по умолчанию в отличие от eBPF). При тестировании на CPU Intel Tiger Lake и Lion Cove скорость утечки при использовании данного метода составила 1.7KB/сек.
  • Использование IP-коллизий (Instruction Pointer) в блоке предсказания переходов. Атакующий может создать условия, при которых адрес для спекулятивного перехода будет выбран только на основе уже имеющегося в буфере адреса перехода, без учёта истории переходов. Идея в том, что одна операция косвенного перехода может влиять на другую, если возникает коллизия при хранении хешей их адресов в BTB (Branch Target Buffer).
  • Использование влияния прямых переходов на предсказание косвенных переходов. Подобное поведение вызвано двумя аппаратными уязвимостями:
    CVE-2024-28956 – ITS (Indirect Target Selection) и CVE-2025-24495 – проблема в CPU Intel с ядрами Lion Cove. Скорость утечки данных из памяти при использовании данного метода составила 17 KB/сек. В продемонстрированном эксплоите на определение хэша пароля пользователя root, сохранённого в памяти после вызова команды “passwd -s”, было потрачено 60 секунд.


Атаке, искажающей буфер с историей переходов, подвержены все CPU Intel, имеющие поддержку механизма eIBRS, включая CPU Intel Coffee Lake и Lion Cove. Для блокировки уязвимости компания Intel выпустила обновление микрокода с реализацией новой инструкции IBHF (Indirect Branch History Fence), которую предлагается указывать после кода, влияющего на буфер истории переходов. Для старых CPU Intel предложено использовать программный метод очистки истории переходов. В ядро Linux принято изменение, добавляющее программную и аппаратную защиту от атак, осуществляемых с использованием cBPF. Компания AMD заявила, что на её CPU метод атаки не действует. Компания ARM сообщила, что проблема затрагивает только старые процессоры ARM, уязвимые для атак Spectre-v2 и не поддерживающие расширения FEAT_CSV2_3 и FEAT_CLRBHB.

Уязвимость Indirect Target Selection (ITS, CVE-2024-28956) затрагивает CPU Intel Core 9-11 поколений (Cascade Lake, Cooper Lake, Whiskey Lake V, Coffee Lake R, Comet Lake, Ice Lake, Tiger Lake и Rocket Lake) и Intel Xeon 2-3 поколений. Уязвимость CVE-2025-24495 проявляется в CPU на базе микроархитектур Lunar Lake и Arrow Lake. Проблемы устранены во вчерашнем обновлении микрокода. В ядро Linux принято изменение, блокирующее проблему через вынос косвенных переходов в верхнюю часть строки кэша.

Release. Ссылка here.