
exploit do kernel linux
Escalação de privilégios no Linux explorando a chamada de sistema waitid. O exploit é trazido a você por @XeR_0x2A e @chaign_c do HexpressoTeam apenas para fins educacionais.
O bug foi introduzido em 21/05/2017 e corrigido em 09/10/2017, sabendo-se que 4.14.0-rc4+ está vulnerável.
Se você tem um nível iniciante/intermediário em escrita de exploits, encorajamos você a explorá-lo sozinho antes de ler nossa implementação. É um exercício muito bom com uma primitiva de exploração fácil (escrita arbitrária em memória do kernel gravável).
Também desafiamos @LiveOverflow a tentar.
Aqui está a descrição:
oss-security:
Olá,Chris Salls descobriu que, quando a chamada de sistema waitid() no kernel Linux
v4.13 foi refatorada, acidentalmente deixou de verificar se o
argumento recebido apontava para o espaço do usuário. Isso permitiu que
atacantes locais escrevessem diretamente na memória do kernel, o que poderia
levar à escalação de privilégios.Introduzido por este commit:
https://git.kernel.org/linus/4c48abe91be03d191d0c20cc755877da2cb35622Corrigido com este commit na árvore principal:
https://git.kernel.org/linus/96ca579a1ecc943b75beba58bebb0356f6cc4b51Isso deve ser corrigido no -stable free (no futuro v4.13.7) em breve:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/log/?h=linux-4.13.yObrigado,
waitid:
waitid -- espera que um processo filho mude de estado.
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
O kernel não verifica se infop é um ponteiro do kernel ou do espaço do usuário, então podemos sobrescrever memória de qualquer página de memória do kernel com permissões de escrita. A parte divertida é que controlamos apenas parcialmente o que é escrito.
Existem mais de mil maneiras de explorar isso. Decidimos transformar essa primitiva de escrita em uma desreferência de ponteiro nulo. Sobrescrevemos a variável have_canfork_callback na seção .BSS do kernel. Definir esta variável para qualquer coisa diferente de 0 (verdadeiro) fará com que um callback não definido (nulo) seja "chamado em uma nova tarefa antes de o processo ser exposto".
Agradecemos a Chris Salls e @kees_cook por compartilharem o CVE.
Primeiro exploit "no mundo real" do kernel Linux de @XeR_0x2A e @chaign_c do HexpressoTeam.
2017-10-22