Група изследователи от Свободния университет в Амстердам откриха няколко нови уязвимости от клас 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 секунди.

Атаките, които изкривяват буфера с историята на преходите, са уязвими за всички CPUs Intel, които поддържат механизма eIBRS, включително CPUs Intel Coffee Lake и Lion Cove. За блокиране на уязвимостта компания Intel пусна ъпдейт на микро кода с реализирането на новата инструкция IBHF (Indirect Branch History Fence), която се предлага да бъде посочена след кода, влияещ на буфера с история на преходите. За по-старите CPUs Intel се предлага софтуерен метод за изчистване на историята на преходите. В ядрото на Linux беше прието изменение, добавящо софтуерни и хардуерни защитата от атаки, извършвани с използване на cBPF. Компания AMD заяви, че на нейните CPUs методът на атака не действа. Компания ARM съобщи, че проблемът засяга само стари процесори ARM, уязвими за атаки Spectre-v2 и които не поддържат разширения FEAT_CSV2_3 и FEAT_CLRBHB.
Уязвимостта Indirect Target Selection (ITS, CVE-2024-28956) засяга CPUs 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 се проявява в CPUs на база микроархитектури Lunar Lake и Arrow Lake. Проблемите са отстранени в вчерашния ъпдейт на микро кода. В ядрото на Linux беше прието изменение, блокиращо проблема чрез изнасяне на косвени преходи в горната част на реда на кеша.
Източник: opennet.ru
