Изследователи от Нидерландия и Италия са открили нов вариант на уязвимостта Spectre – съвременните процесори нов вариант на уязвимостта от класа Spectre – тя засяга системи с процесори на Intel, AMD и Arm. Атаката Branch Target Reuse (BTR) е насочена към JIT компилаторите, работещи в реално време, които се използват от ядрата на операционните системи, браузърите и изпълнителните среди.
Злоумишленик, способен да изпълнява код на целевата машина може да използва BTR, за да открадне от паметта поверителни данни, например хешове на пароли. Теоретично са възможни атаки чрез злонамерени уеб страници, въпреки че изследователите все още не са създали пълноценен експлойт за браузъри.Атаката BTR се е оказала възможна поради особеностите в обработката от процесорите на код, който се променя по време на изпълнение: възстановявайки архитектурната съгласуваност на кода след самомодификацията му, те могат да запазят остарели записи за предсказване на косвени преходи. В JIT такива остарели предсказания могат да се запазят по-дълго, отколкото кодът, за който са били създадени и могат да бъдат използвани повторно, когато на същите адреси е записан нов код. Възниква ефектът „спекулативно изпълнение след освобождаване на паметта“: то се насочва към новия код, като се използват старите записи.
Изследователите са анализирали подсистемата cBPF в Linux, средата за изпълнение Oracle GraalVM и енджина SpiderMonkey, който Firefox използва за JavaScript и WebAssembly. В крайна сметка са били разработени два пълноценни експлойта за ядрото на Linux. В тях се използва механизмът на класическия BPF – cBPF. Достъп до съвременния JIT компилатор eBPF имат само привилегированите потребители, докато възможностите на предшестващия cBPF са по-ограничени, но достъп до него имат и непривилегированите програми. На този компилатор се изпълнява механизмът Seccomp, като се извършва филтриране на сокети и пакети на Docker и Chrome. В случая със съвременните процесори на Intel този експлойт позволява четене на произволни данни от паметта, заобикаляйки всички активни защитни механизми. Дори при скорост на четене от 8 байта в секунда, при правилно проследяване на веригите от указатели е възможно да се стигне до защитена информация – изследователите успяха да прочетат хеша на паролата на root потребителя след нейното зареждане в паметта.
Общ преглед на атаката
В случая с Firefox атаката се инициира чрез злонамерен уебсайт, който изпълнява JavaScript код в браузъра на потребителя. Разработчиците от Mozilla все още не са завършили внедряването на механизма за изолиране на уебсайтовете, така че съдържанието на всички раздели може да се окаже в едно и също адресно пространство с кода на злонамерения потребител, което прави всички данни уязвими. При експерименталното изпълнение на атаката се оказа, че в енджина SpiderMonkey на процесорите Intel остарелите записи за разклоняване се съхраняват достатъчно дълго и могат да бъдат използвани повторно – скоростта на изтичане на данни може да достигне няколко десетки байта в секунда, но все още не е разработен пълноценен експлойт за браузъра.
В GraalVM атаката BTR дава възможност на злонамерения потребител да заобиколи спекулативно механизма за маскиране на паметта, предназначен за защита на средата за изпълнение от уязвимости от типа Spectre. Изследователите успяха да постигнат повторно използване на адреси в паметта, въпреки че собствените процеси на компилиране на код и събиране на отпадъци в GraalVM изтриваха записите за разклоняването още преди да се появи възможност за тяхното използване — но това ограничение „не е фундаментално“, смятат изследователите.
Разработчиците на софтуер признаха резултатите от изследването. Заплахата може да бъде неутрализирана програмно, например с помощта на бариерата за предсказване на косвени преходи (IBPB). В ядрото на Linux е внедрен защитен механизъм за архитектурата x86 – той стартира IBPB всеки път, когато cBPF се разполага в област от паметта, която преди това е била използвана за изпълнение на BPF код. Защитните мерки са внедрени в Oracle, а в Mozilla са решили да отделят повече време за реализиране на изолация на сайтовете.
Използването на уязвимостта се затруднява от хардуерни средства за защита на потока на управление, като IBT на x86 и BTI на Arm, но те не елиминират заплахата напълно. Старите процесори на Intel все още могат да изпълняват инструкции спекулативно, преди проверката на IBT да приключи окончателно, което създава възможност за използване на BTR. Това поведение изчезна едва с архитектурата Lion Cove (чипове Core Ultra 200 от сериите Arrow Lake и Lunar Lake). Но дори и при липса на „изпреварване“ на механизма IBT от процесора, защитата може да бъде заобиколена, ако методът за маскиране на константите е деактивиран. От AMD отбелязаха, че не са открити нови уязвимости в чиповете на компанията и описаният метод BTR се неутрализира с помощта на вече съществуващите препоръки за защита срещу атаки от типа Spectre v2. От Intel и Arm все още не са дали коментар по темата.