È stata identificata una vulnerabilità critica (CVE-2021-43267) nell'implementazione del protocollo di rete TIPC (Transparent Inter-process Communication) fornita nel kernel Linux, che consente l'esecuzione di codice con privilegi di kernel tramite 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 di norma non è abilitato nelle distribuzioni Linux generiche.
Il protocollo TIPC è supportato a partire dal kernel Linux 3.19, ma il codice che causa la vulnerabilità è stato incluso nel kernel 5.10. La vulnerabilità è stata risolta nei kernel 5.15.0, 5.10.77 e 5.14.16. Il problema è presente e non è ancora risolto in Debian 11, Ubuntu 21.04/21.10, SUSE (nella versione non ancora rilasciata SLE15-SP4), RHEL (non sono stati forniti dettagli su eventuali backport delle correzioni) 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 tra processi in un cluster, attivandosi principalmente sui nodi del cluster. TIPC può operare sia su Ethernet che su UDP (porta di rete 6118). In caso di funzionamento su Ethernet, un attacco può essere compiuto dalla rete locale, mentre utilizzando UDP — dalla rete globale, se la porta non è protetta da un firewall. Un attacco può essere anche effettuato da un utente locale non privilegiato del host. Per attivare TIPC è necessario caricare il modulo del kernel tipc.ko e configurare il binding all'interfaccia di rete tramite netlink o l'utility tipc.
La vulnerabilità si manifesta nella funzione tipc_crypto_key_rc ed è causata dalla mancanza di verifica adeguata della corrispondenza tra la dimensione dei dati specificata nell'intestazione e quella effettiva durante l'analisi dei pacchetti di tipo MSG_CRYPTO, utilizzati per ottenere chiavi di crittografia da altri nodi nel cluster, al fine di decifrare 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 della dimensione dell'intestazione, ma senza considerare la dimensione effettiva del nome dell'algoritmo di crittografia e del contenuto della chiave trasmessa nel messaggio. Si presume che la dimensione del nome dell'algoritmo sia fissa, mentre per la chiave viene anche trasmesso un attributo separato con la dimensione, e l'attaccante può specificare in questo attributo un valore diverso da quello effettivo, il che porterà a scrivere la coda 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
