W jądrze Linux zidentyfikowano piątą (1, 2, 3) w ciągu ostatnich dwóch tygodni krytyczną lukę, która umożliwia użytkownikowi podniesienie swoich uprawnień w systemie. Opublikowano dwa działające exploity: sshkeysign_pwn umożliwia nieuprzywilejowanemu użytkownikowi odczytanie zawartości prywatnych kluczy SSH hosta z \/etc\/ssh\/ssh_host_*_key, a chage_pwn — odczytanie zawartości pliku \/etc\/shadow z hashami haseł użytkowników.
Informacje o luce nie były planowane do ujawnienia, ale jeden z badaczy bezpieczeństwa na podstawie zaproponowanej poprawki do jądra był w stanie określić istotę luki, która umożliwia odczyt plików dostępnych tylko dla użytkownika root, na przykład \/etc\/shadow. W dodanej do jądra zmianie poprawiana była logika stosowania funkcji get_dumpable() w ptrace przy określaniu poziomu dostępu w funkcji ptrace_may_access().
Bezpośrednia luka jest spowodowana stanem wyścigu, prowadzącym do możliwości nieuprzywilejowanego dostępu do deskryptora pliku pidfd po dostępie do pliku z procesu suid root. W momencie czasu między otwarciem pliku a zrzuceniem uprawnień w programie suid (na przykład przez funkcję setreuid) pojawia się sytuacja, w której aplikacja uruchamiająca program suid root przez deskryptor pidfd może uzyskać dostęp do otwartego w programie suid pliku, nawet jeśli nie zezwalają na to uprawnienia dostępu do pliku.
Okno do wykorzystania powstaje z faktu, że funkcja '__ptrace_may_access()' pomija sprawdzenie możliwości dostępu do pliku, jeśli pole task->mm jest ustawione na NULL po wykonaniu exit_mm(), ale przed wywołaniem exit_files(). W tym momencie wywołanie systemowe pidfd_getfd uważa, że identyfikator użytkownika (uid) wywołującego procesu odpowiada identyfikatorowi, któremu zezwolono na dostęp do pliku. Co ciekawe, na problem zwracano uwagę już w 2020 roku, ale pozostał on nienaprawiony.
W exploicie, który uzyskuje zawartość \/etc\/shadow, atak sprowadza się do cyklicznego uruchamiania przez fork+execl aplikacji \/usr\/bin\/chage z flagą suid root, odczytującej zawartość \/etc\/shadow. Po odgałęzieniu procesu wykonane jest wywołanie systemowe pidfd_open i przeprowadzany jest cykliczny przegląd dostępnych deskryptorów pidfd przez wywołanie systemowe pidfd_getfd i ich sprawdzanie przez \/proc\/self\/fd. W exploicie sshkeysign_pwn podobne manipulacje są przeprowadzane z programem suid root ssh-keysign.
CVE identyfikator problemu nie został jeszcze przypisany, aktualizacja jądra i pakietów w dystrybucjach nie została opublikowana. W wydanych kilka godzin temu jądrach 7.0.7, 6.18.30 i 6.12.88 luka nie została usunięta. Na moment pisania wiadomości można korzystać tylko z łatki. Dyskutowane są możliwe obejścia blokowania luki, takie jak ustawienie sysctl kernel.yama.ptrace_scope=3 lub usunięcie flagi suid root z plików wykonywalnych w systemie (przynajmniej z narzędzi ssh-keysign i chage, używanych w exploitach).
Uzupełnienie: Luka została przypisana identyfikatorem CVE-2026-46333. Stworzono aktualizacje jądra Linux 7.0.8, 6.18.31, 6.12.89, 6.6.139, 6.1.173, 5.15.207 i 5.10.256 z usuniętą luką. Status usunięcia luk w dystrybucjach można ocenić na tych stronach: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora.
Źródło: opennet.ru
