Uma técnica para explorar uma vulnerabilidade no subsistema tty do kernel do Linux foi divulgada

Pesquisadores da equipe do Google Project Zero publicaram um método para explorar uma vulnerabilidade (CVE-2020-29661) na implementação do manipulador ioctl TIOCSPGRP do subsistema tty do kernel Linux, e também examinaram detalhadamente os mecanismos de proteção que poderiam bloquear tal vulnerabilidades.

O bug que causa o problema foi corrigido no kernel do Linux em 3 de dezembro do ano passado. O problema aparece em kernels até a versão 5.9.13, mas a maioria das distribuições corrigiu o problema em atualizações de pacotes de kernel oferecidos no ano passado (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Uma vulnerabilidade semelhante (CVE-2020-29660) foi encontrada simultaneamente na implementação da chamada ioctl TIOCGSID, mas também já foi corrigida em todos os lugares.

O problema é causado por um erro ao definir bloqueios, levando a uma condição de corrida no código drivers/tty/tty_jobctrl.c, que foi usado para criar condições de uso após liberação exploradas do espaço do usuário por meio de manipulações ioct, chamando TIOCSPGRP. Uma exploração funcional foi demonstrada para escalonamento de privilégios no Debian 10 com kernel 4.19.0-13-amd64.

Ao mesmo tempo, o artigo publicado concentra-se não tanto na técnica de criação de uma exploração funcional, mas sim nas ferramentas existentes no kernel para proteção contra tais vulnerabilidades. A conclusão não é reconfortante; métodos como segmentação de memória no heap e controle de acesso à memória após sua liberação não são utilizados na prática, pois levam à diminuição do desempenho, e proteção baseada em CFI (Control Flow Integrity), que bloqueia explorações nos estágios posteriores de um ataque, precisa de melhorias.

Ao considerar o que faria diferença no longo prazo, um que se destaca é o uso de analisadores estáticos avançados ou o uso de linguagens seguras para memória, como Rust e dialetos C com anotações ricas (como Checked C) para verificar estado durante a fase de construção.locks, objetos e ponteiros. Os métodos de proteção também incluem a ativação do modo panic_on_oops, a mudança das estruturas do kernel para o modo somente leitura e a restrição do acesso às chamadas do sistema usando mecanismos como seccomp.

Fonte: opennet.ru

Adicionar um comentário