Vulnerabilidade no núcleo Linux afeta o protocolo de rede CAN BCM

Uma vulnerabilidade foi identificada no núcleo do Linux (CVE-2021-3609), permitindo que um usuário local aumente suas permissões no sistema. O problema é causado por uma condição de corrida na implementação do protocolo CAN BCM e se manifesta nas versões do núcleo do Linux, de 2.6.25 até 5.13-rc6. Nos distribuições, o problema ainda não foi corrigido (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).

O pesquisador que identificou a vulnerabilidade conseguiu preparar um exploit para obter privilégios de root em sistemas com núcleos Linux 5.4 e mais recentes, demonstrando a possibilidade de conduzir um ataque com sucesso no Ubuntu 20.04.02 LTS. Não está excluída a possibilidade de reestruturar o exploit para funcionar com núcleos mais antigos (no núcleo 5.4, o código CAN BCM (net/can/bcm.c) foi transferido de hrtimer_tasklet para HRTIMER_MODE_SOFT).

O protocolo CAN BCM permite registrar um próprio manipulador de mensagens que chegam pela barramento CAN (controller area network) e vinculá-lo a um socket de rede específico. Quando uma mensagem de entrada chega, a função bcm_rx_handler() é chamada. O atacante pode aproveitar a condição de corrida e provocar o fechamento do socket de rede ao mesmo tempo que bcm_rx_handler() está sendo executada. Ao fechar o socket, a função bcm_release() é chamada, que libera a memória alocada para as estruturas bcm_op e bcm_sock, que continuam a ser usadas no manipulador bcm_rx_handler() que ainda está em execução. Isso resulta em uma situação que leva a uma referência a um bloco de memória já liberado (use-after-free).

O ataque consiste na abertura de dois sockets CAN BCM e vinculá-los à interface vcan. No primeiro socket, a chamada sendmsg() é executada com a flag RX_SETUP para configurar o manipulador de mensagens CAN recebidas, enquanto no segundo socket, é feita uma chamada sendmsg() para enviar uma mensagem ao primeiro socket. Após a recepção da mensagem, a chamada bcm_rx_handler() é ativada, e o atacante escolhe o momento certo para fechar o primeiro socket, o que acarreta a execução de bcm_release() e a liberação das estruturas bcm_op e bcm_sock, mesmo com a execução de bcm_rx_handler() ainda não finalizada.

Através de manipulações no conteúdo do bcm_sock, um atacante pode redefinir o ponteiro para a função sk->sk_data_ready(sk), redirecionar a execução e, utilizando técnicas de programação orientada a retorno (ROP — Return-Oriented Programming), organizar a reescrita do parâmetro modprobe_path e obter a execução do seu código com privilégios de root. Ao usar a técnica ROP, o atacante não tenta colocar seu código na memória, mas opera com pedaços de instruções de máquina já existentes nas bibliotecas carregadas, que terminam com a instrução de retorno de controle (geralmente, são os finais das funções da biblioteca). O funcionamento do exploit se dá pela construção de uma cadeia de chamadas a esses blocos semelhantes ("gadgets") para obter a funcionalidade desejada.

Vulnerabilidade no núcleo Linux afeta o protocolo de rede CAN BCM

Para a ataque, é necessário ter acesso para criar soquetes CAN e uma interface de rede vcan configurada. Os privilégios necessários para realizar o ataque podem ser obtidos por um usuário não privilegiado em contêineres criados em sistemas com suporte a espaços de nomes de identificadores de usuários (user namespaces) ativado. Por exemplo, os namespaces de usuários são ativados por padrão no Ubuntu e no Fedora, mas não estão habilitados no Debian e no RHEL.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster