E foi descoberta uma vulnerabilidade na implementação TIPC do kernel Linux. Confira os detalhes dessa nova ameaça e atualize seus sistemas.
Recentemente, foi divulgada a notícia de que um pesquisador de segurança identificou uma vulnerabilidade crítica (já listada em CVE-2021-43267) na implementação do protocolo de rede TIPC fornecido no kernel do Linux, que permite a execução remota de código. Com privilégios de kernel enviando um especialmente pacote de rede criado.
Descoberta uma vulnerabilidade na implementação TIPC do kernel Linux
Sim. Foi descoberta uma vulnerabilidade na implementação TIPC do kernel Linux. 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.”
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 foi originalmente desenvolvido pela 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 ser realizado 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 pode ser executado 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). Como 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.”
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 copiados para a 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 conta 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 foi corrigida nos kernels 5.15.0, 5.10.77 e 5.14.16, embora o problema apareça e ainda não tenha sido corrigido no Debian 11, Ubuntu 21.04/21.10, SUSE (no ramo SLE15-SP4 ainda não lançado), RHEL (ainda não detalhado se a solução vulnerável foi atualizada) e Fedora.
Embora uma atualização de kernel já tenha sido lançada para Arch Linux e distribuições com kernels anteriores a 5.10, como Debian 10 e Ubuntu 20.04, eles não são afetados.
Por fim, se você tiver interesse em saber mais sobre o assunto, poderá verificar os detalhes no seguinte endereço.