O vulnerabilitate critică (CVE-2021-43267) a fost identificată în implementarea protocolului de rețea TIPC (Transparent Inter-process Communication) din nucleul Linux, permițând executarea codului în mod la distanță prin trimiterea unui pachet de rețea special format, cu privilegii de nucleu. Pericolul problemei este atenuat de faptul că pentru atac este necesară activarea explicită a suportului TIPC în sistem (încărcarea și configurarea modulului de nucleu tipc.ko), ceea ce nu se efectuează din oficiu în distribuții Linux nespecializate.
Protocolul TIPC este disponibil începând cu nucleul Linux 3.19, dar codul care duce la vulnerabilitate a fost inclus în nucleul 5.10. Vulnerabilitatea a fost remediată în nucleele 5.15.0, 5.10.77 și 5.14.16. Problema persistă și nu a fost rezolvată în Debian 11, Ubuntu 21.04/21.10, SUSE (într-o ramură SLE15-SP4 nepublicată) și RHEL (încă nu se specifică dacă a fost aplicat patch-ul vulnerabil) și Fedora. O actualizare a nucleului a fost deja lansată pentru Arch Linux. Distribuții cu nucleul mai vechi de 5.10, cum ar fi Debian 10 și Ubuntu 20.04, nu sunt afectate de problemă.
Protocolul TIPC a fost dezvoltat inițial de compania Ericsson, fiind destinat organizării interacțiunii între procese în cluster și este activat în principal pe nodurile clusterelor. TIPC poate funcționa atât pe Ethernet, cât și pe UDP (portul de rețea 6118). În cazul funcționării pe Ethernet, un atac poate fi efectuat din rețeaua locală, iar în cazul utilizării UDP — din rețeaua globală, dacă portul nu este protejat de un firewall. Atacul poate fi efectuat și de un utilizator local fără privilegii ale gazdelor. Activarea TIPC necesită încărcarea modulului de nucleu tipc.ko și configurarea asocierii cu interfața de rețea prin netlink sau utilitarul tipc.
Vulnerabilitatea se manifestă în funcția tipc_crypto_key_rc și este cauzată de absența unei verificări adecvate a corelării între dimensiunea specificată în antet și dimensiunea efectivă a datelor în timpul analizei pachetelor de tip MSG_CRYPTO, utilizate pentru a obține chei de criptare de la alte noduri din cluster, în scopul decriptării mesajelor trimise de aceste noduri. Dimensiunea datelor copiate în memorie este calculată ca diferența dintre valorile câmpurilor cu dimensiunea mesajului și dimensiunea antetului, dar fără a lua în considerare dimensiunea efectivă a numelui algoritmului de criptare și conținutul cheii transmise în mesaj. Se presupune că dimensiunea numelui algoritmului este fixă, iar pentru cheie se transmite un atribut separat cu dimensiunea, atacatorul putând specifica în acest atribut o valoare diferită de dimensiunea efectivă, ceea ce va conduce la scrierea unei părți din mesaj dincolo de bufferul alocat. struct tipc_aead_key { char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; (în bytes) * char key[]; };

Sursa: opennet.ro
