V dodávaní v jadre Linuxu realizácii sieťového protokolu TIPC (Transparent Inter-process Communication) bola zistená kritická zraniteľnosť (CVE-2021-43267), ktorá umožňuje vzdialene, prostredníctvom odoslania špeciálne formátovaného sieťového paketu, vykonať svoj kód s privilegovaním jadra. Nebezpečenstvo problému zmierňuje skutočnosť, že na útok je potrebné explicitné zapnutie podpory TIPC v systéme (nahranie a nastavenie modulu jadra tipc.ko), čo sa v nespecializovaných distribúciách Linuxu predvolene nevykonáva.
Protokol TIPC je podporovaný od jadra Linux 3.19, ale k zraniteľnosti vedúci kód bol zahrnutý do jadra 5.10. Zraniteľnosť bola odstránená v jadrách 5.15.0, 5.10.77 a 5.14.16. Problém sa prejavuje a zatiaľ nebol odstránený v Debian 11, Ubuntu 21.04/21.10, SUSE (v ešte nevydanej vetve SLE15-SP4), RHEL (zatiaľ sa nešpecifikuje, či bolo spätne portované zraniteľné opravenie) a Fedora. Aktualizácia jadra už bola vydaná pre Arch Linux. Distribúcie s jadrom starším ako 5.10, ako Debian 10 a Ubuntu 20.04, problému nie sú vystavené.
Protokol TIPC bol pôvodne vyvinutý spoločnosťou Ericsson a je určený na organizáciu medziprocesovej komunikácie v klastri, pričom sa aktivuje hlavne na uzloch klastrov. TIPC môže fungovať ako nad Ethernet, tak aj nad UDP (sieťový port 6118). V prípade fungovania nad Ethernet môže byť útok vykonaný z lokálnej siete, a pri použití UDP — z globálnej siete, ak port nie je chránený firewallom. Útok môže byť tiež vykonaný nepoužívateľom bez privilégií lokálneho hostiteľa. Na aktiváciu TIPC je potrebné nahratie modulu jadra tipc.ko a nastavenie viazania na sieťové rozhranie pomocou netlink alebo nástroja tipc.
Zraniteľnosť sa prejavuje vo funkcii tipc_crypto_key_rc a je spôsobená nedostatočnou kontrolou zhodnosti uvedenej v hlavičke a skutočnej veľkosti dát pri spracovaní paketov typu MSG_CRYPTO, ktoré sa používajú na získanie šifrovacích kľúčov od iných uzlov v klastre, s cieľom následnej dešifrovania správ zaslaných z týchto uzlov. Veľkosť kopírovaných do pamäte dát sa vypočítava ako rozdiel medzi hodnotami polí veľkosti správy a veľkosti hlavičky, ale bez zohľadnenia skutočnej veľkosti prenášanej v správe názvu šifrovacieho algoritmu a obsahu kľúča. Predpokladá sa, že veľkosť názvu algoritmu je fixná, a pre kľúč sa navyše posiela samostatný atribút s veľkosťou, pričom útočník môže zadať v tomto atribúte hodnotu, ktorá sa líši od skutočnej, čo povedie k zápisu konca správy za hranice vyhradeného vyrovnávacieho priestoru. struct tipc_aead_key { char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; /* v bajtoch */ char key[]; };

Zdroj: opennet.ru
