Branch Target Reuse (BTR) to opisana przez VUSec technika z rodziny Spectre-v2, która wykorzystuje stare wpisy predykcji skoków po zwolnieniu i ponownym użyciu kodu JIT. Badacze przedstawili dwa exploity typu proof of concept dla jądra Linuksa; w szczegółowo opisanym ataku na cBPF wyciek wynosił 8 bajtów na sekundę na współczesnych procesorach Intel.

Czym jest Branch Target Reuse (BTR)

JIT, czyli kompilacja just-in-time, tłumaczy kod na instrukcje procesora podczas działania programu. Wykonany kod może zostać zwolniony, a zajmowana przez niego pamięć wykorzystana ponownie. BTR dotyczy sytuacji, w której po zwolnieniu kodu w procesorze pozostaje stary wpis przewidujący cel skoku.

Takie wpisy przechowuje bufor celów rozgałęzień (BTB, Branch Target Buffer), który pomaga procesorowi przewidywać, dokąd prowadzi skok pośredni. VUSec opisuje BTR jako wykorzystanie nieaktualnego wpisu BTB, który może wskazać nowy kod pod ponownie użytym adresem.

Jak stary cel może skierować wykonanie do ponownie użytego kodu

Atak zaczyna się od wytrenowania skoku tak, by procesor przewidywał konkretny fragment kodu JIT. Gdy ten fragment zostaje zwolniony, jego adres może zostać częściowo wykorzystany przez nowy kod. Jeśli stary wpis BTB przetrwa i procesor go użyje, wykonanie spekulacyjne — czyli tymczasowe wykonywanie instrukcji na podstawie przewidywania — może przejść do nowego kodu pod nieaktualnym przesunięciem.

Warunkiem opisanym przez VUSec jest możliwość uruchomienia przez atakującego nieuprzywilejowanego kodu w silniku JIT oraz zachowanie i wykorzystanie starego wpisu predykcji. W demonstracji badacze odzyskali hash hasła roota z procesu su; wcześniej uruchomiono su root, co załadowało hash do pamięci.

Co VUSec podaje o cBPF w Linuksie

VUSec informuje o dwóch exploitach typu proof of concept dla jądra Linuksa. Szczegółowo opisany atak dotyczył JIT klasycznego BPF (cBPF), używanego z filtrami seccomp. Dla tego exploitu na współczesnych procesorach Intel badacze podali wyciek na poziomie 8 bajtów na sekundę.

To tempo dotyczy opisanego ataku cBPF. W demonstracji odzyskano hash hasła roota z procesu su po załadowaniu go do pamięci.

Odrębne wyniki dla SpiderMonkey i GraalVM

VUSec badał także SpiderMonkey, silnik JavaScript używany w Firefoxie, oraz GraalVM. Wyników dla tych środowisk nie należy utożsamiać z pomiarem dotyczącym cBPF.

W przypadku SpiderMonkey badacze opisali wykonalne ataki i proof of concept. Pełny exploit przeglądarkowy wymagał dalszych prac. Dla GraalVM uzyskali stabilne ponowne użycie adresu i dostęp spekulacyjny za operację maskującą, ale w przeprowadzonych próbach kompilacja i automatyczne odzyskiwanie pamięci usuwały wpisy BTB przed ich wykorzystaniem. VUSec opisuje też losowanie lokalizacji pamięci podręcznej kodu JIT w GraalVM jako sposób utrudniający ponowne użycie regionów.

Zabezpieczenie Linuksa opisane przez VUSec

VUSec podaje, że do głównej gałęzi jądra trafiło zabezpieczenie dla x86, które uruchamia na wszystkich rdzeniach barierę predykcji rozgałęzień pośrednich (IBPB, Indirect Branch Prediction Barrier), gdy program cBPF ponownie wykorzystuje wcześniej użyty region kodu cBPF/eBPF. Zabezpieczenie zniechęca też do takiego ponownego użycia i — według VUSec — działa niezależnie od tego, czy włączono śledzenie pośrednich rozgałęzień (IBT, Indirect Branch Tracking). VUSec łączy tę zmianę z identyfikatorami CVE-2026-64507 i CVE-2026-64508.

VUSec podaje również, że Mozilla rozważała zabezpieczenia oparte na IBPB, a jej priorytetem było dokończenie i wdrożenie izolacji witryn.