
Reproducción de la vulnerabilidad del kernel CVE-2017-5123 que permite escalada local de privilegios mediante escritura de memoria en la syscall waitid, demostrada con escape de contenedor Docker en Linux 4.13.
Nota: El código en este repositorio es para demostrar el aislamiento de tecnologías de sandbox de pods seguros como kata containers y no pretende atacar ninguna 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)
La implementación de waitid en los kernels upstream no restringía el destino objetivo para copiar los resultados de la información. Esto puede permitir a los usuarios locales escribir en memoria del kernel que de otro modo está protegida, lo que puede conducir a una escalada de privilegios.
El error se introdujo el 2017-05-21 y se corrigió el 2017-10-09.
Este CVE ya ha sido corregido en las versiones posteriores de la rama 4.13 y en los kernels mainline más recientes. Sin embargo, pueden existir CVEs similares que permitan la escalada de privilegios. El CVE en sí es bastante similar al famoso dirty cow, CVE-2016-5195 en realidad.
CVE-2017-5123.c usa esta vulnerabilidad para cambiar el valor de /proc/sys/vm/mmap_min_addr. Luego permite que el kernel de Linux llame al shellcode para obtener el permiso de acceso a archivos de la raíz del host.