
Un banco de pruebas para CVE-2016-0728, un error de fuga/desbordamiento del contador de referencias en Linux
Este repositorio contiene un programa de prueba para CVE-2016-0728, un fallo de fuga de contador de referencias (refcount leak) y desbordamiento en Linux que conduce a un use-after-free.
El fallo fue encontrado y explicado por Perception Point. No estoy afiliado a ellos.
Welcome to the CVE-2016-0728 testbed
sizeof(struct msg_msg) == 0x30, sizeof(struct key) == 0xb8
PID: 27673, UID: (1000/1000)
Keyring: 1b66e5d6, "test-1a328d6e"
Usage: 1
Press a key: (f)ork (i)ncref (a)uto-incref (r)evoke (h)eap-spray (s)hell (q)uit
En mi sistema de prueba, se podía obtener un shell de root de la siguiente manera:
revokeexecl("/bin/sh", "sh", NULL)Me resultó útil ejecutar watch -n0.1 cat /proc/keys para ver qué está sucediendo.
Este código solo se ha probado en x86-64, pero debería funcionar en otras arquitecturas también, porque no utilicé offsets mágicos, sino que copié las definiciones de las estructuras de los encabezados de Linux y usé sizeof (excepto que hardcodeé las direcciones de prepare_kernel_cred y commit_creds).