Acaba de ser descoberta vulnerabilidade na implementação TIPC do kernel Linux. O problema foi identificado por um pesquisador de segurança. A vulnerabilidade crítica (já listada em CVE-2021-43267) na implementação do protocolo de rede TIPC fornecido no kernel Linux, que permite a execução remota de código. pacote de rede. O perigo do problema é atenuado pelo fato de que o ataque requer a ativação explícita do suporte TIPC no sistema (carregando e configurando o módulo do kernel tipc.ko), o que não é feito por padrão em distribuições não Linux.
CodeQL é um mecanismo de análise que permite executar consultas em seu código. De uma perspectiva de segurança, isso pode permitir que você encontre vulnerabilidades simplesmente descrevendo sua aparência. O CodeQL entrará em operação e encontrará todas as instâncias dessa vulnerabilidade.
Descoberta vulnerabilidade na implementação TIPC do kernel Linux
O TIPC tem suporte desde o kernel Linux 3.19, mas o código que leva à vulnerabilidade foi incluído no kernel 5.10. O protocolo TIPC original da Ericsson, destina-se a organizar a comunicação entre processos em um cluster e é ativado principalmente nos nós do cluster.
O TIPC pode funcionar tanto em Ethernet quanto em UDP (porta de rede 6118). No caso de trabalhar através de Ethernet, o ataque pode ocorrer desde a rede local e, quando se utiliza UDP, desde a rede global, se a porta não estiver coberta por firewall. O ataque também ocorrer por um usuário local sem privilégios no host. Para habilitar o TIPC, você deve carregar o módulo do kernel tipc.ko e configurar o link para a interface de rede usando o netlink ou o utilitário tipc.
O protocolo é implementado em um módulo de kernel empacotado com todas as principais distribuições do Linux. Quando carregado por um usuário, ele pode ser usado como um conector e pode ser configurado em uma interface usando netlink (ou usando a ferramenta de espaço de usuário tipc, que fará essas chamadas de netlink) como um usuário não privilegiado.
O TIPC pode ser configurado para operar sobre um protocolo de suporte, como Ethernet ou UDP (no último caso, o kernel escuta na porta 6118 as mensagens de entrada de qualquer máquina). Uma vez que um usuário com poucos privilégios não pode criar quadros Ethernet brutos, definir o portador como UDP torna mais fácil escrever um exploit local.
Sobre a falha
A vulnerabilidade se manifesta na função tipc_crypto_key_rc e é causada pela falta de verificação adequada da correspondência entre o que é especificado no cabeçalho e o tamanho real dos dados ao analisar pacotes com o tipo MSG_CRYPTO usado para obter chaves de criptografia de outros nós em o cluster para posteriormente descriptografar as mensagens enviadas desses nós.
O tamanho dos dados que estão na memória é calculado como a diferença entre os valores dos campos com o tamanho da mensagem e o tamanho do cabeçalho, mas sem levar em consideração o tamanho real do nome do algoritmo de criptografia transmitido na mensagem e no conteúdo da chave.
O tamanho do nome do algoritmo é considerado fixo e, além disso, um atributo separado com o tamanho é passado para a chave, e o invasor pode especificar um valor neste atributo que difere do valor real, o que levará à gravação em a fila da mensagem fora do buffer alocado.
A vulnerabilidade recebeu correção nos kernels 5.15.0, 5.10.77 e 5.14.16. Isso embora o problema apareça e ainda não tenha correção no Debian 11, Ubuntu 21.04/21.10, SUSE (no ramo SLE15-SP4 que ainda não saiu), RHEL (ainda sem detalhes se houve a solução ideal) e Fedora.
Embora uma atualização de kernel já exista para Arch Linux e distribuições com kernels anteriores a 5.10, como Debian 10 e Ubuntu 20.04, eles não apresentam problemas.
Por fim, se você tiver interesse em saber mais sobre o assunto , poderá verificar os detalhes no link a seguir.