W jądrze Linux 6.2 odkryto lukę (CVE-2023-1998), która prowadzi do wyłączenia ochrony przed atakami klasy Spectre v2, umożliwiającymi dostęp do pamięci innych procesów wykonywanych w różnych wątkach SMT lub Hyper Threading, ale na jednym fizycznym rdzeniu procesora. Luka ta może być używana do przeprowadzania wycieków danych między maszynami wirtualnymi w systemach chmurowych. Problem dotyczy tylko jądra Linux 6.2 i jest spowodowany nieprawidłowym wdrożeniem optymalizacji mających na celu zredukowanie znacznych wydatków związanych z zastosowaniem ochrony przed Spectre v2. Luka została naprawiona w eksperymentalnej gałęzi jądra Linux 6.3.
W przestrzeni użytkownika, w celu ochrony przed atakami klasy Spectre, procesy mogą selektywnie wyłączać spekulacyjne wykonywanie instrukcji za pomocą prctl PR_SET_SPECULATION_CTRL lub korzystać z filtrowania wywołań systemowych opartego na mechanizmie seccomp. Według danych badaczy, którzy ujawnili problem, nieprawidłowa optymalizacja w jądrze 6.2 pozostawiła pewne luki w zabezpieczeniach. maszyn wirtualnych co najmniej jednego dużego dostawcy chmury, mimo aktywacji trybu blokowania ataków spectre-BTI poprzez prctl. Luka ta występuje również w normalnych serwerach z jądrem 6.2, przy ładowaniu których zastosowano ustawienie „spectre_v2=ibrs.
Sedno luki polega na tym, że w przypadku wyboru trybów ochrony IBRS lub eIBRS, wprowadzone optymalizacje wyłączały stosowanie mechanizmu STIBP (Single Thread Indirect Branch Predictors), niezbędnego do blokowania wycieków przy zastosowaniu technologii współbieżnego przetwarzania (SMT lub Hyper-Threading). Ochronę przed wyciekiem między wątkami zapewnia jedynie tryb eIBRS, a nie tryb IBRS, ponieważ w tym ostatnim bajt IBRS, zapewniający ochronę przed wyciekami między logicznymi rdzeniami, z powodów wydajnościowych jest czyszczony podczas zwracania kontroli do przestrzeni użytkownika, co sprawia, że wątki w przestrzeni użytkownika nie są chronione przed atakami klasy Spectre v2.
Źródło: opennet.ru
