Luka w VFS jądra Linuksa, która pozwala na eskalację uprawnień

W interfejsie Filesystem Context API dostarczanym przez jądro Linuksa wykryto lukę (CVE-2022-0185), która umożliwia użytkownikowi lokalnemu uzyskanie uprawnień roota w systemie. Badacz, który zidentyfikował problem, opublikował demonstrację exploita, który umożliwia wykonanie kodu jako root na Ubuntu 20.04 w domyślnej konfiguracji. Planuje się, że kod exploita zostanie opublikowany na GitHubie w ciągu tygodnia od wydania przez dystrybucje aktualizacji naprawiającej lukę.

Luka występuje w funkcji Legacy_parse_param() w systemie VFS i jest spowodowana niepoprawnym sprawdzeniem maksymalnego rozmiaru parametrów udostępnianych w systemach plików, które nie obsługują API kontekstu systemu plików. Przekazanie zbyt dużego parametru może spowodować przepełnienie zmiennej całkowitej użytej do obliczenia rozmiaru danych do zapisania - w kodzie znajduje się kontrola przepełnienia bufora "if (len > PAGE_SIZE - 2 - size)", co nie działa, jeśli wartość rozmiaru jest większa niż 4094. w przypadku przekroczenia liczby całkowitej przez dolną granicę (niedopełnienie liczby całkowitej, podczas rzutowania 4096 - 2 - 4095 na unsigned int, wynikiem jest 2147483648).

Ten błąd pozwala, podczas uzyskiwania dostępu do specjalnie zaprojektowanego obrazu systemu plików, spowodować przepełnienie bufora i nadpisanie danych jądra zgodnie z przydzielonym obszarem pamięci. Aby wykorzystać lukę musisz posiadać uprawnienia CAP_SYS_ADMIN tj. uprawnienia administratora. Problem polega na tym, że nieuprzywilejowany użytkownik może uzyskać takie uprawnienia w izolowanym kontenerze, jeśli w systemie włączona jest obsługa przestrzeni nazw użytkowników. Na przykład przestrzenie nazw użytkowników są domyślnie włączone w Ubuntu i Fedorze, ale nie są włączone w Debianie i RHEL (chyba że używane są platformy izolacji kontenerów).

Problem pojawia się od jądra Linuksa 5.1 i został naprawiony we wczorajszych aktualizacjach 5.16.2, 5.15.16, 5.10.93, 5.4.173. Aktualizacje pakietów naprawiających lukę zostały już wydane dla RHEL, Debian, Fedora i Ubuntu. Poprawka nie jest jeszcze dostępna w systemach Arch Linux, Gentoo, SUSE i openSUSE. Jako obejście bezpieczeństwa dla systemów, które nie korzystają z izolacji kontenerów, możesz ustawić wartość sysctl "user.max_user_namespaces" na 0: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf

Źródło: opennet.ru

Dodaj komentarz