
Reprodução da vulnerabilidade do kernel CVE-2017-5123 que permite escalonamento de privilégio local por meio de escrita na memória da chamada de sistema waitid, demonstrada com escape de contêiner Docker no Linux 4.13.
Nota: O código neste repositório é para demonstrar o isolamento de tecnologias de sandbox de pods seguros, como kata containers, e não tem a intenção de atacar nenhuma plataforma.
echo 0 > /proc/sys/kernel/kptr_restrict
cat /proc/kallsyms
(gdb) p &(((struct task_struct *)0)->fs)
(gdb) p &(((struct task_struct *)0)->parent)
(gdb) p &(((struct fs_struct *)0)->root)
A implementação de waitid nos kernels upstream não restringia o destino alvo para copiar os resultados das informações. Isso pode permitir que usuários locais escrevam em memória do kernel que de outra forma estaria protegida, o que pode levar à escalada de privilégios.
O bug foi introduzido em 2017-05-21 e corrigido em 2017-10-09.
Este CVE já foi corrigido em versões posteriores do ramo 4.13 e em kernels mainline mais recentes. No entanto, podem existir CVEs semelhantes que permitem escalada de privilégios. O CVE em si é bastante semelhante ao famoso dirty cow, CVE-2016-5195 , na verdade.
CVE-2017-5123.c usa esta vulnerabilidade para alterar o valor de /proc/sys/vm/mmap_min_addr. Em seguida, faz o kernel Linux chamar um shellcode para obter permissão de acesso a arquivos do root do host.