
exploit del kernel de Linux
Escalada de privilegios en Linux explotando la llamada al sistema waitid. El exploit es presentado por @XeR_0x2A y @chaign_c de HexpressoTeam únicamente con fines educativos.
El error fue introducido el 21 de mayo de 2017 y corregido el 9 de octubre de 2017; se sabe que 4.14.0-rc4+ es vulnerable.
Si tienes un nivel de escritor de exploits principiante/intermedio, te animamos a explotarlo tú mismo antes de leer nuestra implementación. Es un muy buen ejercicio con una primitiva de explotación sencilla (escritura arbitraria en memoria del kernel modificable).
También retamos a @LiveOverflow a que lo intente.
Aquí está la descripción:
oss-security:
Hola,Chris Salls descubrió que cuando se reestructuró la llamada al sistema waitid() en el kernel de Linux
v4.13, accidentalmente dejó de verificar que el
argumento entrante apuntara al espacio de usuario. Esto permitió
a atacantes locales escribir directamente en la memoria del kernel, lo que podría llevar a
una escalada de privilegios.Introducido por este commit:
https://git.kernel.org/linus/4c48abe91be03d191d0c20cc755877da2cb35622Corregido con este commit en el árbol principal:
https://git.kernel.org/linus/96ca579a1ecc943b75beba58bebb0356f6cc4b51Esto debería estar corregido en la versión -stable (en el futuro v4.13.7) pronto:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/log/?h=linux-4.13.yGracias,
waitid:
waitid -- esperar a que un proceso hijo cambie de estado.
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
El kernel no comprueba si infop es un puntero del kernel o del espacio de usuario, por lo que podemos sobrescribir la memoria de cualquier página de memoria del kernel con permisos de escritura. La parte divertida es que solo controlamos parcialmente lo que se escribe.
Hay más de mil formas de explotar esto. Decidimos convertir esta primitiva de escritura en una desreferencia de puntero nulo. Sobrescribimos la variable have_canfork_callback en la sección .BSS del kernel. Establecer esta variable a cualquier valor distinto de 0 (verdadero) hará que un callback no configurado (nulo) sea "llamado en una nueva tarea antes de que el proceso sea expuesto".
Gracias a Chris Salls y @kees_cook por compartir el CVE.
Primer exploit del kernel de Linux "del mundo real" de
@XeR_0x2A y
@chaign_c de
HexpressoTeam.
2017-10-22