W implementacji interfejsu asynchronicznego wejścia/wyjścia io_uring, wchodzącego w skład jądra Linux od wersji 5.1, zidentyfikowano lukę (CVE-2022-29582), która pozwala nieuprzywilejowanemu użytkownikowi uzyskać uprawnienia roota w systemie, w tym podczas uruchamiania exploita z kontenera. Luka wynika z odwołania do już zwolnionego bloku pamięci, pojawia się w jądrach Linux od gałęzi 5.10 i została usunięta w kwietniu w aktualizacjach 5.10.111, 5.15.34 oraz 5.17.3.
Odwołanie do zwolnionej pamięci następuje w wyniku stanu wyścigu podczas przetwarzania timeoutów w funkcji io_flush_timeouts(), która usuwa wpis o timeoutcie z listy i go anuluje, bez sprawdzenia utworzenia i usunięcia timeoutu w tym momencie.
Naukowcy przygotowali działający exploit, który nie wymaga do swojej pracy włączenia przestrzeni nazw identyfikatorów użytkowników (user namespaces) i który może zapewnić dostęp roota w głównym systemie, gdy nieuprzywilejowany użytkownik uruchomi exploit w izolowanym kontenerze. Exploit działa także w izolowanym środowisku nsjail w dystrybucji Google COS (Container Optimized OS), opartej na Chromium OS i stosowanej na Google Cloud Platform w maszynach wirtualnych Compute Engine. Exploit jest dostosowany do pracy z gałęziami jądra od 5.10 do 5.12.
Źródło: opennet.ru
