
Wprowadzenie do problemu / definicja
Badacze bezpieczeństwa opisali łańcuch eksploatacji nazwany „Big Fish”, który umożliwia lokalne uzyskanie uprawnień roota w OpenBSD 7.9. Atak łączy dwa błędy jądra: historyczny problem związany z przepełnieniem licznika dołączeń do pamięci współdzielonej oraz nowszą lukę prowadzącą do zapisu poza dozwolonym obszarem pamięci.
Sprawa jest istotna, ponieważ pokazuje, że nawet system operacyjny uznawany za mocno utwardzony może pozostawać podatny na wieloetapowe scenariusze eskalacji uprawnień. W tym przypadku kluczowe znaczenie ma połączenie starego długu technicznego z nowoczesną techniką manipulacji pamięcią jądra.
W skrócie
- „Big Fish” dotyczy lokalnego atakującego, który ma już możliwość uruchomienia kodu w systemie.
- Łańcuch pozwala podnieść uprawnienia zwykłego użytkownika do roota w OpenBSD 7.9.
- Eksploit omija mechanizmy ochronne, w tym KARL oraz sprzętowe zabezpieczenia SMAP i SMEP.
- Producent udostępnił poprawki we wrześniu 2026 roku przez mechanizm syspatch.
- Nie ma potwierdzonych informacji o aktywnym wykorzystywaniu luki w środowiskach produkcyjnych.
Kontekst / historia
Jednym z filarów całego łańcucha jest bardzo stary błąd projektowy wywodzący się jeszcze z historycznych implementacji BSD. Licznik shm_nattch, odpowiadający za liczbę dołączeń do segmentu pamięci współdzielonej, był przechowywany jako 16-bitowa liczba ze znakiem. Taki wybór oznacza ograniczenie do wartości 32 767, po przekroczeniu której dochodzi do zawinięcia licznika.
Przez lata podobne zachowania mogły wydawać się jedynie techniczną ciekawostką. Analiza „Big Fish” pokazuje jednak, że pozornie archaiczny błąd może stać się pełnoprawnym elementem nowoczesnego łańcucha ataku, jeśli zostanie zestawiony z drugą podatnością w jądrze oraz odpowiednio wykorzystaną przewidywalnością alokacji pamięci.
Analiza techniczna
Pierwszy etap eksploatacji polega na doprowadzeniu do przepełnienia licznika shm_nattch. Osiąga się to przez odpowiednie mapowanie segmentów pamięci współdzielonej oraz intensywne forki procesów. W efekcie licznik zawija się, co w określonych warunkach wyścigu może doprowadzić do sytuacji use-after-free, czyli zwolnienia pamięci wciąż używanej przez inne procesy.
Drugi etap wykorzystuje odrębny błąd zapisu poza granicami bufora w jądrze. W opisywanym scenariuszu możliwe staje się nadpisanie liczników członkostwa multicastowego. Gdy podatny socket zostaje zamknięty, operacja ta wpływa na wpisy tablic stron i otwiera drogę do manipulacji pamięcią w sposób umożliwiający przejęcie uprzywilejowanego wykonania.
Na uwagę zasługuje także obejście mechanizmu KARL. Choć OpenBSD relinkuje jądro przy starcie, aby utrudnić przewidywanie rozmieszczenia funkcji i danych, badacze wskazali, że niektóre elementy alokacji pamięci na wczesnym etapie rozruchu pozostają deterministyczne na tym samym sprzęcie. To pozwala z odpowiednią precyzją przewidywać położenie wybranych struktur jądra po kolejnych restartach.
Autorzy analizy zwrócili również uwagę, że zachowanie sterty jądra można pośrednio obserwować za pomocą metryk dostępnych przez sysctl. Ułatwia to synchronizację układu alokacji i zwiększa stabilność eksploatacji. W praktyce oznacza to, że „Big Fish” nie jest prostym błędem powodującym awarię, lecz dopracowanym łańcuchem łączącym wyścig, niespójność księgowania pamięci i przewidywalność alokatora.
Konsekwencje / ryzyko
Najpoważniejszą konsekwencją jest możliwość podniesienia uprawnień z poziomu zwykłego użytkownika do roota. W środowiskach wieloużytkownikowych, serwerowych, laboratoryjnych czy deweloperskich oznacza to pełne przejęcie hosta po wcześniejszym uzyskaniu nawet ograniczonego dostępu lokalnego.
Ryzyko rośnie szczególnie tam, gdzie na jednym systemie działają konta powłokowe, procesy buildowe, usługi uruchamiane z niższymi uprawnieniami lub środowiska współdzielone przez kilka zespołów. Taki exploit może stać się końcowym etapem większego ataku po wcześniejszej kompromitacji poświadczeń, phishingu, błędnej konfiguracji lub wykorzystaniu innej podatności.
Warto jednocześnie podkreślić, że opisywana luka nie stanowi samodzielnego zdalnego RCE. Wymaga lokalnego wykonania kodu, co ogranicza powierzchnię ekspozycji względem błędów zdalnych. Nie zmienia to jednak faktu, że lokalna eskalacja uprawnień pozostaje krytycznym elementem nowoczesnych łańcuchów kompromitacji.
Rekomendacje
Najważniejszym działaniem jest natychmiastowa weryfikacja, czy systemy OpenBSD zostały zaktualizowane i objęte poprawkami udostępnionymi przez syspatch. Dotyczy to przede wszystkim bastionów administracyjnych, hostów współdzielonych, systemów sieciowych oraz maszyn wykorzystywanych przez wielu użytkowników.
Równolegle organizacje powinny ograniczyć możliwość lokalnego uruchamiania niezweryfikowanego kodu oraz zmniejszyć liczbę kont z dostępem interaktywnym. W praktyce warto wdrożyć również dodatkowe środki operacyjne:
- przegląd i minimalizację lokalnych uprawnień użytkowników,
- segmentację ról administracyjnych,
- monitoring nietypowej aktywności procesów, w tym masowego forkingu,
- audyt wykorzystania IPC i pamięci współdzielonej,
- analizę lokalnych anomalii sieciowych związanych z socketami,
- testy bezpieczeństwa obejmujące scenariusze lokalnej eskalacji uprawnień.
Z perspektywy długoterminowej warto także rozważyć dalsze utwardzanie jądra, w tym bezpieczniejsze operacje na listach połączonych, większą randomizację struktur pamięci oraz skuteczniejsze kontrole granic tablic. Choć są to działania po stronie rozwoju systemu, dobrze pokazują kierunek dalszej redukcji ryzyka.
Podsumowanie
„Big Fish” to przykład zaawansowanej lokalnej eskalacji uprawnień, która łączy historyczny błąd odziedziczony po dawnym BSD z nową luką w jądrze OpenBSD. Najważniejszy wniosek dla administratorów i zespołów bezpieczeństwa jest prosty: nawet systemy o bardzo silnej reputacji w zakresie hardeningu wymagają stałego przeglądu starych założeń projektowych, logiki zarządzania pamięcią i mechanizmów alokacji.
W praktyce priorytetem pozostaje szybkie wdrożenie poprawek, ograniczenie lokalnej powierzchni ataku oraz traktowanie exploitów lokalnych jako realnego elementu współczesnych incydentów bezpieczeństwa.
Źródła
- Security Affairs — Big Fish: OpenBSD Root Exploit Chains a 37-Year-Old BSD Bug With a Kernel Flaw — https://securityaffairs.com/201285/hacking/big-fish-openbsd-root-exploit-chains-a-37-year-old-bsd-bug-with-a-kernel-flaw.html