Непривилегирована Linux програма може да избере точния момент за хардуерно прекъсване, така че то да възникне в пролуката между изчистването на предсказателя на разклонения от процесора и използването му от ядрото, като по този начин повторно компрометира предсказателя след задействането на защитата.

Изследователите от MIT CSAIL Даниел Трухильо и Менгджия Ян нарекоха тази техника ИНЖЕКТИРАНЕ НА ПРЕКЪСВАНИЯ (INTERRUPT INJECTION). На машина с AMD Zen 2, работеща с Linux 6.14 с включени всички стандартни защити срещу Spectre v2, техният експлойт е извличал произволна памет от ядрото със скорост 5,47 байта в секунда и точност 91,97% – достатъчно за локализиране и прочитане на файла /etc/shadow, съхраняващ хешовете на системните пароли, при пет от десет опита.

Атаката не изисква специални привилегии, а само възможност за локално изпълнение на код, поради което рискът засяга споделени среди, работещи на засегнат процесор.

Двамата изследователи са разкрили информацията на AMD и Intel на 5 февруари. От AMD са заявили, че планират корекция за сигурност на ядрото; от MIT допълват, че тя вече е пусната и се разпространява чрез стандартните актуализации на операционната система.

Корекцията вече е налична в Linux ядрото. Промяната (commit) с наименование „x86/bugs: Make Safe-RET robust against interrupt injection“ е с дата 2 юни и е написана от Борислав Петков в съавторство с Дейвид Каплан, и двамата инженери в AMD. Тя описва атаката по същия начин, както и изследователите: инжектирането на прекъсвания по време на изпълнение на Safe-RET „може да неутрализира защитната последователност за безопасно връщане, което потенциално да доведе до изтичане на данни чрез спекулативно изпълнение“.

Тази корекция за сигурност възстановява състоянието на регистрите така, сякаш последователността Safe-RET е завършила, и избягва изпълнението на инструкция RET след връщане от прекъсването. Това е единият от двата подхода, предложени в научния труд.

На 6 август AMD публикува бюлетин за сигурност AMD-SB-7061, озаглавен „Safe RET Interrupt Vulnerability“, посочващ процесорите от Zen 1 до Zen 4 като засегнати. В него се казва, че атакуващ, изпълняващ код на засегната система, „би могъл да инжектира прекъсване в прецизен момент, за да наруши работата на Safe RET“, което „потенциално може да отслаби тази защита и да доведе до разкриване на информация“. AMD добавя, че проблемът „изглежда е свързан с Linux имплементацията на защитата Safe RET“.

Бюлетинът отдава заслугата на Трухильо и посочва, че поведението е демонстрирано при Zen 1 и Zen 2, докато за Zen 3 и Zen 4 се предполага, но не е демонстрирано. Научният труд на изследователите отчита тестове от страна на AMD само върху Zen 2 и Zen 4. Разделът „Засегнати продукти и отстраняване на уязвимостта“ изброява единствено процесори, без препратки към конкретни корекции за сигурност, версии на ядрото или CVE идентификатор.

Според документа, споделен от изследователите с The Hacker News, Intel не счита за необходимо прилагането на допълнителни защитни мерки.

Нито бюлетинът на AMD, нито съобщението на MIT съдържат връзка към промяната в ядрото. Без CVE или посочена версия на ядрото, системният администратор трябва да знае точното име на промяната, за да провери дали дадена машина разполага с корекцията.

Ядрото докладва състоянието на SRSO в /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow, но документацията за стойностите в този файл не съдържаше информация за прекъсвания, когато The Hacker News направи проверка на 6 август.

The Hacker News се свърза с AMD, Intel и Arm за коментар и ще обнови статията при получаване на отговор.

Всяка от тези защити изчиства или изолира състоянието на предсказателя на разклонения, така че предходно обучение от страна на атакуващия да не може да насочи разклонение в ядрото. Intel прави това при влизане в ядрото чрез eIBRS и, в зависимост от процесора, чрез цикъл за изчистване на буфера с историята на разклоненията или контрола BHI_DIS_S. AMD извършва това непосредствено преди всяко връщане от ядрото посредством saferet.

Всички тези методи предполагат, че в междинния период не се изпълнява нищо злонамерено. Трухильо и Ян наричат този клас уязвимости TONTOU („Time-of-Neutralization to Time-of-Use“) по аналогия с познатите при софтуера TOCTOU уязвимости. Прекъсванията нарушават това предположение, тъй като могат да възникнат почти навсякъде, а Linux позволява на всеки потребител да ги планира с наносекундна точност.

Ако обработката на прекъсвания може да се изпълни между неутрализирането и използването, то пътят за връщане от прекъсване става част от защитата срещу Spectre v2, дори когато защитната мярка е проектирана около влизането или връщането от ядрото.

При Zen 2 този прозорец е с размер от две инструкции или шест байта. Изследователите са увеличили шансовете си, като са изхвърлили тези байтове от L1 и L2 кеша с помощта на съседна нишка (hyperthread), забавяйки ги, и са избрали системното извикване за запис (write syscall), което им е позволило да контролират два регистъра.

Прекъсванията са попадали в прозореца в 5% до 12% от случаите, и около 2%, когато тези регистри са били под контрола на атакуващия. Веднъж попаднал там, самият обработчик се превръща в инструмент за обучение, въоръжен с Inception (CVE-2023-20569), за да запълни буфера на стека за връщане с избрана от атакуващия цел. Inception е уязвимостта на AMD от 2023 г., за чието спиране съществува saferet.

Грешни предсказания са регистрирани в кода на ядрото при три от четирите тествани машини със степен на успеваемост от 0,75% при Zen 2, 0.22% при Intel Arrow Lake и 0,037% при Cascade Lake Refresh. Zen 4 не е генерирал такива при този тест, а при Intel не е демонстрирано цялостно изтичане на данни, тъй като там на атакуващия би бил необходим и използваем механизъм за разкриване, вече наличен в ядрото.

Изследователите не разглеждат това като пречка. Грешните предсказания са „необходимо, но недостатъчно условие за атака от типа Spectre“, заявиха те пред The Hacker News, допълвайки, че предишни разработки вече са доказали възможността за разкриване на данни.