W dostarczonej w jądrze Linux implementacji protokołu sieciowego TIPC (Transparent Inter-process Communication) zidentyfikowano krytyczną lukę (CVE-2021-43267), która umożliwia zdalne wykonanie kodu z uprawnieniami jądra poprzez przesłanie specjalnie sformatowanego pakietu sieciowego. Niebezpieczeństwo związane z tą problematyką łagodzą wymagania dotyczące jawnego włączenia wsparcia dla TIPC w systemie (załadowanie i konfiguracja modułu jądra tipc.ko), co nie jest domyślnie wykonywane w niespecjalizowanych dystrybucjach systemu Linux.
Protokoł TIPC jest wspierany od wersji jądra Linux 3.19, ale kod prowadzący do luki został włączony do jądra 5.10. Luka ta została usunięta w jądrach 5.15.0, 5.10.77 oraz 5.14.16. Problem występuje i nie został jeszcze usunięty w Debianie 11, Ubuntu 21.04/21.10, SUSE (w jeszcze nie wydanej wersji SLE15-SP4), RHEL (nie podano szczegółów, czy poprawka została wprowadzona) oraz Fedora. Aktualizacja jądra została już wydana dla Arch Linux. Dystrybucje z jądrami starszymi niż 5.10, takie jak Debian 10 i Ubuntu 20.04, nie są narażone na ten problem.
Protokoł TIPC został pierwotnie opracowany przez firmę Ericsson i służy do organizacji międzyprocesowej komunikacji w klastrze, głównie uruchamiany na węzłach klastrów. TIPC może działać zarówno na Ethernet, jak i na UDP (port sieciowy 6118). W przypadku działania na Ethernet atak może być przeprowadzony z lokalnej sieci, a przy użyciu UDP — z globalnej sieci, jeśli port nie jest chroniony przez zaporę sieciową. Atak może być również przeprowadzony przez nieuprzywilejowanego lokalnego użytkownika hosta. Aby aktywować TIPC, konieczne jest załadowanie modułu jądra tipc.ko i skonfigurowanie powiązania z interfejsem sieciowym przy użyciu netlink lub narzędzia tipc.
Wrażliwość występuje w funkcji tipc_crypto_key_rc i jest spowodowana brakiem odpowiedniej weryfikacji zgodności podanego w nagłówku oraz rzeczywistej wielkości danych podczas analizy pakietów typu MSG_CRYPTO, używanych do uzyskania kluczy szyfrowania od innych węzłów w klastrze w celu późniejszego deszyfrowania wiadomości wysyłanych z tych węzłów. Rozmiar kopiowanych do pamięci danych oblicza się jako różnicę między wartościami pól z rozmiarem wiadomości a rozmiarem nagłówka, ale bez uwzględnienia rzeczywistego rozmiaru przesyłanej w wiadomości nazwy algorytmu szyfrowania i zawartości klucza. Zakłada się, że rozmiar nazwy algorytmu jest stały, a dla klucza dodatkowo przesyłany jest osobny atrybut z rozmiarem, a atakujący może wskazać w tym atrybucie wartość różniącą się od rzeczywistej, co doprowadzi do zapisania końca wiadomości poza przydzielonym buforem. struct tipc_aead_key { char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; dla bajtów char key[]; };

Źródło: opennet.ru
