Podatność w podsystemie eBPF, która umożliwia wykonanie kodu na poziomie jądra Linux

W podsystemie eBPF, umożliwiającym uruchamianie przetworników wewnątrz jądra Linuksa w specjalnej maszynie wirtualnej z JIT, wykryto lukę (CVE-2021-4204), która pozwala lokalnemu użytkownikowi bez uprawnień na podniesienie uprawnień i wykonanie swojego kodu na poziomie jądra Linuksa. Problem występuje od jądra Linuksa 5.8 i wciąż pozostaje niepoprawiony (dotyczy również wydania 5.16). Stan tworzenia aktualizacji eliminujących problem można śledzić na tych stronach: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Zgłoszono stworzenie działającego exploita, który planuje się opublikować 18 stycznia (użytkownicy i deweloperzy mają tydzień na usunięcie luki).

Luka jest spowodowana nieprawidłowym sprawdzeniem przekazywanych do wykonania programów eBPF. Podsystem eBPF zapewnia funkcje pomocnicze, poprawność użycia których sprawdza specjalny weryfikator. Niektóre funkcje wymagają przekazania wartości PTR_TO_MEM jako argumentu, a w celu zapobieżenia możliwym przepełnieniom bufora weryfikator musi znać rozmiar pamięci związanej z argumentem. Dla funkcji bpf_ringbuf_submit i bpf_ringbuf_discard informacje o rozmiarze przekazywanej pamięci nie były komunikowane weryfikatorowi, co mogło być wykorzystane do nadpisania obszarów pamięci poza buforem przy wykonywaniu specjalnie przygotowanego kodu eBPF.

Aby przeprowadzić atak, użytkownik musi mieć możliwość załadowania swojego programu BPF, a wiele nowoczesnych dystrybucji Linuksa domyślnie blokuje taką możliwość (w tym, od wersji 5.16, nieautoryzowany dostęp do eBPF jest teraz domyślnie zabroniony również w samym jądrze). Na przykład, luka może być wykorzystana w domyślnej konfiguracji Ubuntu 20.04 LTS, ale w środowiskach Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 i Fedora 33 występuje tylko wtedy, gdy administrator ustawił parametr kernel.unprivileged_bpf_disabled na wartość 0. Jako obejście blokowania luki można zakazać wykonywania programów BPF przez użytkowników bez uprawnień komendą „sysctl -w kernel.unprivileged_bpf_disabled=1”.

Ź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