Zdalna luka w implementacji protokołu TIPC w jądrze Linuksa

W implementacji protokołu sieciowego TIPC (Transparent Inter-process Communication) dostarczanego w jądrze Linuksa wykryto krytyczną lukę (CVE-2021-43267), która umożliwia zdalne wykonanie kodu z uprawnieniami jądra poprzez wysłanie specjalnie zaprojektowanego pakiet sieciowy. Niebezpieczeństwo problemu jest łagodzone przez fakt, że atak wymaga jawnego włączenia obsługi TIPC w systemie (załadowanie i skonfigurowanie modułu jądra tipc.ko), co nie jest domyślnie wykonywane w niewyspecjalizowanych dystrybucjach Linuksa.

Protokół TIPC jest obsługiwany od jądra Linuksa 3.19, ale kod powodujący lukę został zawarty w jądrze 5.10. Luka została naprawiona w jądrach 5.15.0, 5.10.77 i 5.14.16. Problem pojawia się i nie został jeszcze naprawiony w Debianie 11, Ubuntu 21.04/21.10, SUSE (w jeszcze nie wydanej gałęzi SLE15-SP4), RHEL (nie jest jeszcze szczegółowo określone, czy luka została przeniesiona) i Fedorze. Aktualizacja jądra została już wydana dla Arch Linux. Dystrybucje z jądrem starszym niż 5.10, takie jak Debian 10 i Ubuntu 20.04, nie są dotknięte problemem.

Protokół TIPC został pierwotnie opracowany przez firmę Ericsson i przeznaczony do organizowania komunikacji między procesami w klastrze i jest aktywowany głównie w węzłach klastra. TIPC może działać poprzez Ethernet lub UDP (port sieciowy 6118). Podczas pracy po Ethernecie atak można przeprowadzić z sieci lokalnej, a przy wykorzystaniu protokołu UDP z sieci globalnej, jeśli port nie jest objęty zaporą ogniową. Atak może zostać przeprowadzony także przez nieuprzywilejowanego lokalnego użytkownika hosta. Aby aktywować TIPC, musisz pobrać moduł jądra tipc.ko i skonfigurować powiązanie z interfejsem sieciowym za pomocą netlink lub narzędzia tipc.

Podatność objawia się funkcją tipc_crypto_key_rc i jest spowodowana brakiem właściwej weryfikacji zgodności pomiędzy danymi określonymi w nagłówku a rzeczywistym rozmiarem danych podczas analizowania pakietów typu MSG_CRYPTO, służących do pozyskiwania kluczy szyfrujących z innych węzłów w klastrze w celu późniejszego odszyfrowania wiadomości wysyłanych z tych węzłów. Rozmiar danych kopiowanych do pamięci obliczany jest jako różnica wartości pól z rozmiarem wiadomości i rozmiarem nagłówka, jednak bez uwzględnienia rzeczywistej wielkości nazwy algorytmu szyfrującego i zawartości klucz przesłany w wiadomości. Zakłada się, że rozmiar nazwy algorytmu jest stały, a do klucza przekazywany jest dodatkowo oddzielny atrybut z rozmiarem, a atakujący może podać w tym atrybucie wartość różniącą się od rzeczywistej, co doprowadzi do napisania koniec komunikatu poza przydzielonym buforem. struct tipc_aead_key { char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; /* w bajtach */ char key[]; };

Zdalna luka w implementacji protokołu TIPC w jądrze Linuksa


Źródło: opennet.ru

Dodaj komentarz