Vulnerabilities in eBPF allowing bypassing protection against Spectre v4 attacks

W jądrze Linux zidentyfikowano dwie podatności, które umożliwiają wykorzystanie podsystemu eBPF do obejścia zabezpieczeń przed atakiem Spectre v4 (SSB, Speculative Store Bypass). Za pomocą nieuprzywilejowanego programu BPF, atakujący może stworzyć warunki do spekulatywnego wykonania określonych operacji i ustalić zawartość dowolnych obszarów pamięci jądra. Towarzyszące podsystemom eBPF w jądrze uzyskały dostęp do prototypu exploita, demonstrującego możliwość realizacji ataków w praktyce. Problemy zostały usunięte w postaci poprawek (1, 2), które wejdą w skład najbliższej aktualizacji jądra Linux. Aktualizacje w dystrybucjach na razie nie zostały opracowane (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Metoda ataku Spectre 4 opiera się na odzyskiwaniu danych osiadających w pamięci podręcznej procesora po odrzuceniu wyniku spekulatywnego wykonania operacji przy przetwarzaniu naprzemiennych operacji zapisu i odczytu z użyciem pośredniego adresowania. Gdy operacja odczytu następuje po operacji zapisu (na przykład, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), przesunięcie adresu dla odczytu może być już znane z powodu wykonania podobnych operacji (operacje odczytu są wykonywane znacznie częściej, a odczyt można zrealizować z pamięci podręcznej) i procesor może spekulatywnie wykonać odczyt przed zapisem, nie czekając na obliczenie przesunięcia pośredniego adresowania dla zapisu.

Jeśli po obliczeniu przesunięcia zidentyfikowano nakładanie się obszarów pamięci dla zapisu i odczytu, procesor po prostu odrzuca już spekulatywnie uzyskany wynik odczytu i powtarza tę operację. Ta cecha pozwala instrukcji odczytu uzyskać dostęp do starej wartości pod pewnym adresem w czasie, gdy operacja zapisu jeszcze się nie zakończyła. Po odrzuceniu nieudanej operacji spekulatywnej w pamięci podręcznej pozostają ślady jej wykonania, po czym do jej wydobycia może być stosowana jedna z metod określania zawartości pamięci podręcznej na podstawie analizy zmiany czasu dostępu do danych z pamięci podręcznej i nie będących w pamięci podręcznej.

Pierwsza podatność (CVE-2021-35477) wynika z niedoskonałości w mechanizmie weryfikacji programów BPF. Aby chronić przed atakiem Spectre 4, weryfikator dodaje po potencjalnie problematycznych operacjach zapisu do pamięci dodatkową instrukcję, która zapisuje wartość zerową w celu wyeliminowania śladów poprzedniej operacji. Zakładano, że operacja zapisu zera wykona się bardzo szybko i zablokuje wykonanie spekulacyjne, ponieważ zależy tylko od wskaźnika na ramkę stosu BPF. Jednak w rzeczywistości możliwe było stworzenie warunków, w których instrukcja prowadząca do wykonania spekulacyjnego mogła zdążyć się wykonać przed operacją wykluczającego zapisu.

Druga podatność (CVE-2021-3455) związana jest z tym, że przy wykrywaniu przez weryfikator BPF potencjalnie niebezpiecznych operacji zapisu do pamięci, nie uwzględniane są nieinicjowane obszary stosu BPF, przy czym pierwsza operacja zapisu w nie nie jest chroniona. Taka cecha prowadzi do możliwości przeprowadzenia spekulacyjnej operacji odczytu, zależnej od nieinicjowanego obszaru pamięci, przed wykonaniem instrukcji zapisu. Nowa pamięć dla stosu BPF jest przydzielana bez sprawdzania zawartości już istniejącej w przydzielonej pamięci, a na etapie przed uruchomieniem programu BPF istnieje sposób na kontrolowanie zawartości obszaru pamięci, który następnie będzie przydzielony pod stos BPF.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster