Luki w snapd i Rust Coreutils, które pozwalają uzyskać uprawnienia roota w Ubuntu

Firma Qualys odkryła lukę (CVE-2026-3888) w organizacji działania połączenia snap-confine i systemd-tmpfiles w Ubuntu, co pozwala nieuprzywilejowanemu użytkownikowi uzyskać dostęp root do systemu. Problem ujawnia się w Ubuntu w konfiguracji domyślnej od wydania 24.04. W Ubuntu 16.04-22.04 luka może być eksploatowana w niestandardowych konfiguracjach, naśladujących zachowanie nowszych wersji dystrybucji. W Ubuntu poprawka jest dostępna wczoraj w aktualizacji pakietu snapd. W snapd problem został rozwiązany w aktualizacji 2.75.

Luka pojawia się z powodu nieprawidłowej interakcji narzędzi snap-confine i systemd-tmpfiles, wykonywanych z podwyższonymi uprawnieniami. Narzędzie snap-confine tworzy środowisko sandbox do uruchamiania aplikacji snap, a systemd-tmpfiles przeprowadza automatyczne czyszczenie plików tymczasowych i katalogów. Domyślnie narzędzie systemd-tmpfiles jest skonfigurowane do usuwania wszystkich starych plików i katalogów w /tmp, co może być wykorzystywane przez atakującego do zastąpienia katalogu /tmp/.snap w momencie po jego usunięciu przez narzędzie systemd-tmpfiles, ale przed jego ponownym utworzeniem przez snap-confine.

Atak polega na oczekiwaniu na uruchomienie procesu czyszczenia plików tymczasowych, zastąpieniu katalogu /tmp/.snap po jego usunięciu oraz umieszczeniu zmodyfikowanej kopii bibliotek /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange. Atakujący może potrzebować kilku dni na oczekiwanie na uruchomienie systemd-tmpfiles, ponieważ w Ubuntu 24.04 proces czyszczenia uruchamiany jest co 10 dni, a w nowszych wydaniach — co 30 dni. Po zastąpieniu katalogu atakujący osiąga inicjalizację nowego środowiska sandbox za pomocą snap-confine.

Podczas tworzenia zawartości środowiska sandbox w katalogu tymczasowym /tmp/.snap atakujący czeka na odpowiedni moment i zmienia nazwę /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange na /tmp/.snap/usr/lib/x86_64-linux-gnu, w ten sposób zastępując biblioteki i zapewniając ich montowanie bind z uprawnieniami root. W ten sposób atakujący uzyskuje kontrolę nad wspólnymi bibliotekami i loaderem ld.so, uruchamianymi w środowisku sandbox snap, i może osiągnąć wykonanie dowolnego kodu z uprawnieniami root poprzez uruchomienie dowolnego programu suid, w którym stosuje się dynamiczne wiązanie.

Mając dostęp root w środowisku sandboxowym, izolowanym przez AppArmor i filtr wywołań systemowych oparty na seccomp, atakujący może skopiować /bin/bash do katalogu /var/snap/$SNAP/common/ i nadać mu uprawnienia „04755” (suid root). Mimo że uprawnienia zostały zmienione w środowisku sandboxowym, plik z zmienionymi uprawnieniami jest także dostępny w głównym systemie, dlatego by uzyskać pełen dostęp root wystarczy uruchomić /var/snap//common/bash jako zwykły użytkownik niezprivilegowany w standardowym środowisku systemowym.

Jednocześnie wykryto podatność w narzędziu uutils coreutils (Rust Coreutils), odpowiedniku pakietu GNU Coreutils, napisanego w języku Rust. Podatność pozwala nieuprzywilejowanemu użytkownikowi uzyskać prawa root w systemie. Problem został zidentyfikowany podczas przeglądu zmian w Ubuntu 25.10 i naprawiony obejściem przed wydaniem Ubuntu 25.10 poprzez dostarczenie /usr/bin/gnurm zamiast uutils rm. W pakiecie uutils problem został rozwiązany w wersji uutils coreutils 0.3.0, bez zaznaczenia w liście zmian o usunięciu podatności (wskazano, że w rm, du, chmod i chgrp wprowadzono bezpieczną metodę obejścia ścieżek).

Problem spowodowany jest stanem wyścigu w narzędziu „rm”, umożliwiającym lokalnemu użytkownikowi podmienienie zawartości katalogu na link symboliczny podczas usuwania pliku kontrolowanego przez użytkownika procesem „rm” z prawami root. Wśród innych przypadków, podatność może być wykorzystywana podczas codziennego uruchamiania z zadania cron skryptu /etc/cron.daily/apport, który uruchamiany jest z prawami root i rekurencyjnie usuwa zawartość katalogu /var/crash, dostępnego do zapisu dla wszystkich użytkowników w systemie.

Podczas rekurencyjnego usuwania katalogów narzędzie rm najpierw sprawdza wszystkie katalogi, a następnie kolejno je usuwa w odwrotnej kolejności, wywołując funkcję rmdir(). Jeśli uda się podmienić katalog nadrzędny na link symboliczny natychmiast po sprawdzeniu tego katalogu, ale przed sprawdzeniem jego podrzędnych katalogów, operacja doprowadzi do usunięcia katalogu, na który wskazuje link symboliczny. Dzięki temu możliwe jest nie tylko usunięcie dowolnego pliku w systemie, ale także uzyskanie podniesionych uprawnień poprzez usunięcie katalogu /tmp/snap-private-tmp/$SNAP/tmp/.snap w celu podmiany zawartości środowiska sandbox snap-pakietu (metoda uzyskania root jest podobna do pierwszej podatności).

Ź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