
Un banc d'essai pour CVE-2016-0728, un bug de fuite/dépassement de refcount dans Linux
Ce dépôt contient un programme de test pour CVE-2016-0728, une fuite de compteur de références (refcount) et un débordement dans Linux, menant à une utilisation après libération (use-after-free).
Le bogue a été découvert et expliqué par Perception Point. Je ne suis pas affilié à eux.
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
Sur mon système de test, un shell root pouvait être obtenu de la façon suivante :
revokeexecl("/bin/sh", "sh", NULL)J'ai trouvé utile d'exécuter watch -n0.1 cat /proc/keys pour voir ce qui se passe.
Ce code n'a été testé que sur x86-64, mais il devrait fonctionner sur d'autres architectures également, car je n'ai pas utilisé de décalages magiques, mais j'ai copié les définitions de structures depuis les en-têtes Linux et utilisé sizeof (sauf que j'ai codé en dur les adresses de prepare_kernel_cred et commit_creds).