В ядрото на Linux бяха открити две уязвимости, които позволяват използването на подсистемата eBPF за заобикаляне на защита от атака Spectre v4 (SSB, Speculative Store Bypass). С помощта на непривилегизирана BPF-програма нападателят може да създаде условия за спекулативно изпълнение на определени операции и да установи съдържанието на произволни части от паметта на ядрото. Придружаващите подсистеми eBPF в ядрото получиха достъп до прототип на експлоит, демонстриращ възможността за осъществяване на атаки на практика. Проблемите са отстранени под формата на патчове (1, 2), които ще влязат в състава на следващото обновление на ядрото на Linux. Обновленията в дистрибутивите все още не са оформени (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
Методът на атака Spectre 4 се базира на възстановяване на данни, останали в кеша на процесора след отхвърляне на резултата от спекулативното изпълнение на операции при обработка на последователни операции за запис и четене с използване на непряка адресация. Когато операцията за четене следва след операцията за запис (например, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), офсетът за адреса за четене вече може да бъде известен поради изпълнението на подобни операции (операциите за четене се извършват значително по-често и четенето може да бъде извършено от кеша), а процесорът може спекулативно да извърши четенето преди записа, без да чака изчисляването на офсета за непряка адресация за записа.
Ако след изчисляване на офсета бъде установено. че има пресичане между областите на паметта за запис и четене, процесорът просто ще отхвърли вече спекулативно полученото четене и ще повтори операцията. Тази особеност позволява на инструкциите за четене да получат достъп до старото значение на даден адрес, докато операцията за запис все още не е завършена. След отхвърлянето на неуспешната спекулативна операция, в кеша остават следи от нейното изпълнение, след което за нейното извличане може да бъде използван един от методите за определяне на съдържанието на кеша на базата на анализа на времето за достъп до кешираните и некешираните данни.
Първата уязвимост (CVE-2021-35477) е причинена от недостатъци в механизма за проверка на BPF програми. За да се защити от атаката Spectre 4, верификаторът добавя след потенциално проблематични операции за запис в паметта допълнителна инструкция, която записва нулева стойност, за да изчисти следите от предишната операция. Предполагаше се, че операцията за запис на нула ще бъде изпълнена много бързо и ще блокира спекулативното изпълнение, тъй като зависи само от указателя на BPF стек. Но в действителност, се оказа възможно да се създадат условия, при които инструкцията, водеща до спекулативно изпълнение, успява да се изпълни преди операцията за изчистване.
Втората уязвимост (CVE-2021-3455) е свързана с това, че при откриване на потенциално опасни операции за запис в паметта от верификатора на BPF, не се вземат предвид неинициализираните области на BPF стека, при първото записване в които не е предвидена защита. Тази особеност позволява извършването на спекулативна операция за четене, зависима от неинициализирана област на паметта, преди изпълнението на инструкцията за запис. Нова памет за BPF стека се резервира без проверка на съдържанието, което вече съществува в резервираната памет, и в етапа преди стартиране на BPF програмата има начин да се управлява съдържанието на областта на паметта, която след това ще бъде заделена за BPF стека.
Източник: opennet.ru
