Nell'implementazione del protocollo di rete TIPC (Transparent Inter-process Communication) nel kernel Linux è stata identificata una vulnerabilità critica (CVE-2021-43267) che consente l'esecuzione di codice con privilegi di kernel mediante l'invio di un pacchetto di rete appositamente formattato. La gravità del problema è attenuata dal fatto che per l'attacco è necessaria l'attivazione esplicita del supporto TIPC nel sistema (caricamento e configurazione del modulo kernel tipc.ko), che non è attivato di default nelle distribuzioni Linux generiche.
Il protocollo TIPC è supportato a partire dal kernel Linux 3.19, ma il codice che porta alla vulnerabilità è stato incluso nella versione 5.10 del kernel. La vulnerabilità è stata corretta nei kernel 5.15.0, 5.10.77 e 5.14.16. Il problema persiste e non è stato risolto in Debian 11, Ubuntu 21.04/21.10, SUSE (nella sua versione SLE15-SP4 non ancora rilasciata), RHEL (non è stato specificato se la correzione vulnerabile è stata backportata) e Fedora. Un aggiornamento del kernel è già stato rilasciato per Arch Linux. Le distribuzioni con kernel superiori a 5.10, come Debian 10 e Ubuntu 20.04, non sono vulnerabili al problema.
Il protocollo TIPC è stato originariamente sviluppato da Ericsson ed è progettato per facilitare la comunicazione interprocesso in un cluster, attivandosi principalmente sui nodi dei cluster. TIPC può operare sia su Ethernet che su UDP (porta di rete 6118). Se opera su Ethernet, è possibile effettuare un attacco dalla rete locale, mentre se utilizza UDP, l'attacco può avvenire dalla rete globale se la porta non è protetta da un firewall. L'attacco può essere eseguito anche da un utente locale non privilegiato del host. Per attivare TIPC è necessario caricare il modulo kernel tipc.ko e configurare il binding all'interfaccia di rete tramite netlink o l'utilità tipc.
La vulnerabilità si manifesta nella funzione tipc_crypto_key_rc ed è causata dall'assenza di un'adeguata verifica della corrispondenza tra la dimensione riportata nell'intestazione e la dimensione effettiva dei dati durante l'analisi dei pacchetti di tipo MSG_CRYPTO, utilizzati per ottenere le chiavi di crittografia da altri nodi nel cluster con l'obiettivo di decrittografare successivamente i messaggi inviati da questi nodi. La dimensione dei dati copiati in memoria viene calcolata come la differenza tra i valori dei campi della dimensione del messaggio e la dimensione dell'intestazione, ma senza tenere conto della dimensione effettiva del nome dell'algoritmo di crittografia e del contenuto della chiave trasmessa nel messaggio. Si presuppone che la dimensione del nome dell'algoritmo sia fissa e che per la chiave venga trasmesso un attributo separato con la dimensione, e un attaccante può specificare in questo attributo un valore diverso da quello reale, il che porterà a scrivere il finale del messaggio oltre il buffer allocato. struct tipc_aead_key { char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; /* in bytes */ char key[]; };

Fonte: opennet.ru
