4 min read

Bad Epoll — luka w jądrze Linuksa (CVE-2026-46242) daje zwykłemu użytkownikowi prawa roota, także na Androidzie

Table of Contents

Jądro Linuksa to serce, które napędza większość serwerów w internecie, a przy okazji także miliardy telefonów z Androidem. Kiedy więc pojawia się w nim błąd pozwalający zwykłemu użytkownikowi zdobyć prawa administratora, warto się temu przyjrzeć. Ujawniona na początku lipca 2026 roku luka nazwana Bad Epoll (oznaczona jako CVE-2026-46242) robi dokładnie to — z konta zwykłego użytkownika, bez żadnych specjalnych uprawnień, pozwala wspiąć się aż do roota. Odkrył ją badacz Jaeyoung Chung i zbudował działający exploit.

Na czym polega błąd

Epoll to standardowy element Linuksa, który pozwala programowi jednocześnie obserwować wiele plików i połączeń sieciowych naraz. Korzystają z niego serwery WWW, bazy danych, usługi sieciowe, a nawet przeglądarki — praktycznie wszystko, co obsługuje ruch. Tego mechanizmu nie da się po prostu wyłączyć, bo bez niego nowoczesne oprogramowanie serwerowe przestaje działać.

Bad Epoll to błąd typu use-after-free. W skrócie: dwie części jądra próbują jednocześnie posprzątać ten sam wewnętrzny obiekt w pamięci. Jedna zwalnia pamięć, podczas gdy druga wciąż do niej zapisuje. To krótkie zderzenie pozwala napastnikowi uszkodzić pamięć jądra, a następnie wykorzystać ten chaos, by z normalnego konta awansować do roota.

Dlaczego to takie groźne

Najtrudniejszą częścią ataku jest timing. Okno, w którym obie ścieżki się zderzają, ma szerokość zaledwie około sześciu instrukcji procesora — przypadkowa próba prawie nigdy w nie nie trafia. Chung znalazł jednak sposób, by to okno poszerzyć i ponawiać próby bez zawieszania systemu, osiągając skuteczność około 99 procent na testowanych maszynach.

Do tego dochodzą dwa czynniki, które podnoszą wagę problemu. Po pierwsze, atak można według autora wywołać z wnętrza piaskownicy przeglądarki Chrome — a to bariera, która blokuje niemal wszystkie inne błędy jądra. Po drugie, luka sięga Androida, czego większość podobnych podatności nie potrafi. Podatne są jądra zbudowane na wersji 6.4 lub nowszej. Starsze systemy oparte na 6.1, w tym część telefonów takich jak Pixel 8, są bezpieczne, bo błąd pojawił się dopiero w gałęzi 6.4.

Ciekawy wątek ze sztuczną inteligencją

Bad Epoll ma nietypowy kontekst. Znajduje się w tym samym fragmencie kodu jądra, w którym model sztucznej inteligencji Anthropica wcześniej wykrył inny, bliźniaczy błąd (CVE-2026-43074). AI złapała jedną lukę, ale tę drugą przeoczyła — musiał ją znaleźć człowiek. Oba błędy wywodzą się z jednej zmiany w kodzie epoll wprowadzonej jeszcze w 2023 roku. To dobra ilustracja tego, że błędy typu wyścig (race condition) są trudne na każdym etapie: ciężko je znaleźć nawet zaawansowanej AI, ciężko poprawnie załatać, a jeszcze trudniej wykorzystać.

Jak się chronić

Na razie nie ma dowodów, że luka jest wykorzystywana w prawdziwych atakach — jedyny działający kod to dowód koncepcji z konkursu Google kernelCTF. To jednak nie powód do zwłoki. Ponieważ epolla nie da się wyłączyć, nie istnieje żadne obejście — jedynym ratunkiem jest aktualizacja jądra. Administratorzy serwerów powinni wgrać poprawkę z głównego drzewa jądra (commit a6dc643c6931) lub zainstalować odpowiedni backport, gdy tylko udostępni go ich dystrybucja. Użytkownicy Androida powinni instalować comiesięczne poprawki bezpieczeństwa, gdy tylko się pojawią.

Podsumowanie

Bad Epoll przypomina, że najgroźniejsze bywają luki, które siedzą w kodzie tak podstawowym, że nie da się go po prostu odłączyć. Choć exploit jest technicznie wymagający, jego skuteczność sięga niemal 100 procent, a zasięg — od serwerów, przez komputery, po telefony — jest ogromny. Wniosek dla każdego, kto zarządza systemami opartymi na Linuksie, jest prosty: aktualizacje jądra to nie formalność, tylko pierwsza linia obrony. A dla wszystkich pozostałych to dowód, że nawet w epoce sztucznej inteligencji wykrywającej podatności ostatnie słowo wciąż często należy do człowieka.

źródło: https://thehackernews.com/2026/07/new-bad-epoll-linux-kernel-flaw-lets.html