
Exploit em C para CVE-2017-16995, uma elevação de privilégio local no kernel Linux via chamada de sistema eBPF bpf(2), visando sistemas Ubuntu/Debian com versões de kernel 4.4-4.14.
Ubuntu é um sistema operacional GNU/Linux de código aberto focado em desktop, baseado no Debian GNU/Linux. Recentemente, um hacker de chapéu branco descobriu que a versão mais recente do Ubuntu (Ubuntu 16.04) possui uma vulnerabilidade de escalonamento de privilégio local, identificada como CVE-2017-16995. Essa vulnerabilidade existe no sistema kernel Linux que chama eBPF bpf(2). Quando um usuário fornece um programa BPF malicioso, o módulo de validação eBPF gera erros de cálculo, levando a problemas de leitura e gravação arbitrária de memória. Usuários com privilégios baixos podem explorar essa vulnerabilidade para obter privilégios administrativos. Essa vulnerabilidade foi corrigida em versões antigas, mas ainda é explorável na versão mais recente. O desenvolvedor oficial ainda não lançou um patch correspondente, e a vulnerabilidade está em estado 0day.
Linux Kernel Version 4.14-4.4 Apenas afeta as distribuições Ubuntu/Debian
Alto
bearcat@ubuntu:/opt$ lsb_release -a
<br>No LSB modules are available.
<br>Distributor ID: Ubuntu
<br>Description: Ubuntu 16.04.4 LTS
<br>Release: 16.04
<br>Codename: xenial
<br>bearcat@ubuntu:/opt$ uname -a
<br>Linux ubuntu 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
<br>bearcat@ubuntu:/opt$ id
<br>uid=1000(bearcat) gid=1000(bearcat) <br>groups=1000(bearcat),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
<br>bearcat@ubuntu:/opt$ ls
<br>exploit.c
<br>bearcat@ubuntu:/opt$ gcc exploit.c -o exploit
<br>bearcat@ubuntu:/opt$ ./exploit
<br>task_struct = ffff88003a0db800
<br>uidptr = ffff8800374b76c4
<br>spawning root shell
<br>root@ubuntu:/opt# id
<br>uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare),1000(bearcat)
<br>root@ubuntu:/opt#
Atualmente, não há uma solução clara de atualização de patch proposta, mas recomenda-se que os usuários mitiguem o problema modificando os parâmetros do kernel para restringir o uso da chamada de sistema bpf(2) por usuários comuns:
Defina o parâmetro "kernel.unprivileged_bpf_disabled = 1" para evitar esse escalonamento de privilégio, restringindo o acesso à chamada bpf(2).
root@Ubuntu# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
Atualize a versão do Linux Kernel, que requer reinicialização do servidor para entrar em vigor:
Esta etapa já foi descrita em detalhes durante a configuração do ambiente; os usuários só precisam modificar a versão do kernel!
Patch de código https://github.com/torvalds/linux/commit/95a762e2c8c942780948091f8f2a4f32fce1ac6f