Podatności pam_usb
20 znanych podatności CVE w pam_usb, przetłumaczonych i ocenionych.
- CVE-2026-48983Średnie
W wersjach przed 0.9.2 pam_usb zawiera lukę w postaci warunku wyścigu przy tworzeniu katalogów pad dla poszczególnych urządzeń i użytkowników. Atakujący lokalny może wykorzystać tę lukę, aby zastąpić docelową ścieżkę symlinkiem do katalogu, który kontroluje.
- CVE-2026-48982Średnie
W wersjach przed 0.9.2 pam_usb, podczas aktualizacji pliku jednorazowego klucza, tworzony jest plik tymczasowy bez flagi O_EXCL. To może prowadzić do sytuacji, w której dwa procesy równocześnie aktualizujące ten sam klucz mogą obie odnieść sukces, co skutkuje nadpisywaniem wartości klucza.
- CVE-2026-48981Średnie
W wersjach przed 0.9.2, pam_usb wywołuje xmlReadFile() z flagami=0 podczas ładowania pliku konfiguracyjnego, co pozwala libxml2 na przetwarzanie zewnętrznych odniesień do encji (XXE). Może to prowadzić do nawiązywania połączeń sieciowych lub odczytu lokalnych plików w czasie analizy XML z kontekstu procesu uwierzytelniającego.
- CVE-2026-48980Średnie
W wersjach przed 0.9.2 moduł pam_usb, odpowiedzialny za uwierzytelnianie sprzętowe w systemie Linux, jest podatny na wstrzykiwanie zmiennych środowiskowych. Zmienne XRDP_SESSION, DISPLAY i TMUX mogą być manipulowane przez lokalnego użytkownika, co wpływa na logikę sprawdzania sesji lokalnych i zdalnych.
- CVE-2026-48986Średnie
W wersjach pam_usb 0.9.1 i wcześniejszych występuje błąd, który może prowadzić do nieskończonej pętli DoS z powodu nieprawidłowej inicjalizacji zmiennej *ppid. W funkcji pusb_local_login() ta sama zmienna jest używana jako wejście i wyjście w pętli, co może prowadzić do zablokowania procesu uwierzytelniającego.
- CVE-2026-48985Średnie
W wersjach 0.9.1 i poniżej moduł pam_usb może powodować awarię z powodu dereferencji NULL podczas analizy wyjścia loginctl. Funkcja pusb_is_loginctl_local() wywołuje popen() i odczytuje wynik, co może prowadzić do nieokreślonego zachowania i awarii modułu PAM.
- CVE-2026-48984Średnie
W wersjach 0.9.1 i poniżej, funkcja xfree() w pam_usb zwalnia pamięć bez wcześniejszego wyzerowania zawartości bufora, co prowadzi do ujawnienia wrażliwych danych w zwolnionej pamięci. Może to umożliwić odzyskanie wartości padów lub innych materiałów uwierzytelniających z obszarów pamięci, które zostały zwolnione.
- CVE-2026-47270Średnie
W pam_usb przed wersją 0.9.0 funkcje używane przez mechanizm deny_remote wywoływały niezrewentrantną funkcję strtok(), która przechowuje stan w jednym globalnym wskaźniku. Przy równoczesnych uwierzytelnieniach (np. w GDM) wątki mogą nadpisywać nawzajem swój stan tokenizacji, powodując błędne parsowanie danych sesji tmux lub skanowania /proc. Dodatkowo pusb_tmux_get_client_tty() przekazywał wskaźnik z getenv(TMUX) bezpośrednio do strtok(), co trwale uszkadzało zmienną TMUX w procesie. Podatność naprawiono w wersji 0.9.0.
- CVE-2026-47269Wysokie
W pam_usb w wersjach przed 0.9.0 mechanizm deny_remote sprawdza pole ut_addr_v6 w utmpx, ale testuje tylko pierwsze 32 bity adresu. Adresy IPv4-mapped IPv6 (::ffff:x.x.x.x) mają zerowe pierwsze słowo, więc sesje SSH z IPv4 są błędnie uznawane za lokalne. Umożliwia to obejście ograniczenia deny_remote i uwierzytelnienie przez SSH zarejestrowanym urządzeniem USB.
- CVE-2026-44713Wysokie
W wersjach przed 0.8.7, pam_usb odczytuje zmienną środowiskową $TMUX użytkownika i interpoluje jej wartość bez odpowiedniego oczyszczania, co pozwala na wstrzyknięcie dowolnej składni powłoki. To stwarza ryzyko wykonania nieautoryzowanych poleceń jako root.
- CVE-2026-44712Wysokie
pam_usb przed wersją 0.8.7 umożliwia zdalne wykonanie kodu (RCE) z poziomu roota poprzez spreparowany UUID w konfiguracji. Wykonanie polecenia pamusb-conf --reset-pads z takim UUID prowadzi do wykorzystania podatności.
- CVE-2026-44711Wysokie
pam_usb przed wersją 0.8.7 jest podatny na ataki symlinkowe, które umożliwiają obejście uwierzytelniania oraz uszkodzenie plików systemowych. Wersja 0.8.7 zawiera poprawkę tej podatności.
- CVE-2026-44710Średnie
W pam_usb przed wersją 0.8.7 funkcje udisks_drive_get_serial(), udisks_drive_get_vendor() i udisks_drive_get_model() przekazywały swoje wartości zwracane bezpośrednio do strcmp() bez sprawdzania NULL. API GIO/UDisks może zwrócić NULL dla urządzeń nieeksponujących danego pola, a przekazanie NULL do strcmp() to niezdefiniowane zachowanie (zwykle SIGSEGV). Podatność naprawiono w wersji 0.8.7.
- CVE-2026-48792Średnie
W pam_usb przed wersją 0.9.1 plik src/evdev.c po cichu ignoruje błędy EACCES podczas otwierania węzłów /dev/input/event*, powodując, że pusb_has_virtual_input_device() zwraca 0 (brak urządzeń wirtualnych), nawet gdy każde wywołanie open() nie powiodło się z powodu niewystarczających uprawnień. Wywołujący w src/local.c nie potrafi odróżnić braku urządzeń wirtualnych od skanowania z odmową dostępu i kontynuuje uwierzytelnianie na podstawie fałszywie negatywnego wyniku. Podatność naprawiono w wersji 0.9.1.
- CVE-2026-48066Średnie
W pam_usb w pliku src/log.c znajduje się statyczny wskaźnik procesu zapisywany przy każdym wywołaniu PAM adresem zmiennej lokalnej stosu. Narusza to wymóg re-entrantności PAM i powoduje wyścig danych przy równoczesnym wywołaniu stosu PAM z wielu wątków. Podatność naprawiono w wersji 0.9.1.
- CVE-2026-48065Średnie
W pam_usb przed wersją 0.9.1 funkcja w src/conf.c alokuje pamięć sterty proporcjonalnie do liczby n_devices pochodzącej z oceny XPath pliku konfiguracyjnego przez libxml2, bez wcześniejszego ograniczenia górnego limitu. Na celach 32-bitowych mnożenie n_devices * sizeof(t_pusb_device) powoduje przepełnienie size_t, w wyniku czego xmalloc() otrzymuje bardzo mały rozmiar, a kolejne zapisy do tablicy przepełniają stertę. Podatność naprawiono w wersji 0.9.1.
- CVE-2026-47274Średnie
W pam_usb przed wersją 0.9.0 wiele narzędzi pomocniczych rozwiązywało zewnętrzne binaria poprzez zmienną środowiskową PATH zamiast używać ścieżek bezwzględnych. Osoba atakująca mogąca wpłynąć na środowisko procesu podczas uwierzytelniania PAM lub wykonywania narzędzi mogła podstawić złośliwe binaria. Dotyczy to narzędzi pamusb-check (src/tmux.c), pamusb-conf (tools/pamusb-conf) i pamusb-keyring-unlock-gnome (tools/pamusb-keyring-unlock-gnome). Podatność naprawiono w wersji 0.9.0.
- CVE-2026-47273Średnie
pam_usb zapewnia uwierzytelnianie sprzętowe w Linuksie przy użyciu zwykłych nośników wymiennych. Przed wersją 0.9.0 pam_usb buduje wyrażenia XPath z identyfikatorów dostarczanych przez użytkownika (nazwa użytkownika PAM, nazwa usługi) oraz przez urządzenie (numer seryjny, model, producent USB) w celu odpytywania /etc/pamusb.conf. Identyfikatory nie były walidowane pod kątem metaznaków XPath, co umożliwiało wstrzyknięcie dowolnych predykatów XPath.
- CVE-2026-47272Wysokie
W wersjach przed 0.9.0, funkcja pusb_pad_compare() w pam_usb nie wymuszała obecności i czytelności pliku pad na urządzeniu USB, co pozwalało użytkownikom na autoryzację bez fizycznego urządzenia. Użytkownik mógł usunąć swój plik ~/.pamusb/device.pad, co skutkowało pomyślną autoryzacją bez wymaganego urządzenia USB.
- CVE-2026-47271Średnie
W pam_usb przed wersją 0.9.0 zabezpieczenia przed brakiem pamięci w xmalloc(), xrealloc() i xstrdup() opierały się na assert(data != NULL), które jest usuwane przy kompilacji z NDEBUG (typowe w buildach wydaniowych). Wówczas funkcje po cichu zwracają NULL, a każdy wywołujący dereferencjonuje wynik bez sprawdzenia, co powoduje awarię modułu PAM. Awaria modułu PAM używanego przez sudo lub login powoduje lokalny atak odmowy usługi. Podatność naprawiono w wersji 0.9.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

