Pesquisadores da Check Point decidiram recentemente revisar o kernel do Linux, e, mais especificamente, eles analisaram os drivers que tentavam fazer seu próprio uso do mmap() função.
CVE-2018-8781 Oficial Descrição:
A função udl_fb_mmap em drivers / gpu / drm / udl / udl_fb.c na versão do kernel do Linux 3.4 e até e incluindo 4.15 tem uma vulnerabilidade de estouro de número inteiro, permitindo que usuários locais com acesso ao driver udldrmfb obtenham permissões completas de leitura e gravação nas páginas físicas do kernel, resultando em uma execução de código no espaço do kernel.
Como o CVE-2018-8781 foi descoberto?
A ideia de reimplementar as funções do kernel provavelmente levará a erros devido ao fato de que menos equipe de QA nas organizações analisa seu código e corrige problemas de segurança como parte de seu processo, os pesquisadores explicaram.
Revendo isto, eles descobriram e divulgaram uma série de problemas e um bug específico que é na verdade uma vulnerabilidade de oito anos em um driver. O bug pode ser usado para aumentar os privilégios nas versões do kernel 3.4 e até e incluindo 4.15.
Este bug específico é identificado como CVE-2018-8781, e isso afeta o mmap interno() função definida nas operações de arquivo fb_helper do driver udl de DisplayLink:
O módulo video / drm no kernel define um mmap padrão() wrapper que chama aquele mmap real() manipulador definido pelo driver específico. No nosso caso, a vulnerabilidade está no mmap interno() definido nas operações do arquivo fb_helper do driver “udl” do “DisplayLink”.
Este é um exemplo clássico de um estouro de número inteiro, Check Point clarificado. O que é um estouro de inteiro? Ocorre um estouro de inteiro quando uma operação aritmética tenta criar um valor numérico que está fora do intervalo que pode ser representado por um determinado número de bits.
Uma vez que o deslocamento não está assinado, o programador ignorou a verificação #1 e fui diretamente verificar #2. Contudo, o cálculo “compensar + tamanho ”poderia ser reduzido para um valor baixo, permitindo-nos contornar a verificação e ainda usar um valor de “deslocamento” ilegal.
Como o CVE-2018-8781 foi verificado? Para fazê-lo, os pesquisadores usaram uma máquina virtual Ubuntu de 64 bits, e carregou um driver vulnerável simulado. Em cada teste, o mmap do driver() manipulador continha a implementação que eles pretendiam verificar. Uma análise posterior revelou que o usuário pode ler e escrever de / para as páginas mapeadas, permitindo que um invasor acione a execução de código no espaço do kernel.
Mais detalhes sobre CVE-2018-8781 e como abordá-lo são acessível.