He encontrado este PoC y, como mucha gente dijo, no funcionó.
Inserté printk en join_session_keyring y key_revoke , recompilé el kernel, modifiqué el número de bucles y verifiqué que refcount es cero :
Pero tampoco funcionó. He establecido el permiso de clave en 0x3f000000 y muestra 0x3f3f3f3f3f, así que está claro que no se puede volver a escribir keyring en nuestro propio keyring .
También, como puede ver, el refcount de la clave filtrada se convirtió en 64 después de msgsnd 64 muchos bucles . Creo que esto es sospechoso.
Mi pregunta es:
- Es probable que Refcount sea cero, pero la anulación falla. ¿Por qué?
- ¿Por qué se almacenó el número de msgsnd en refcount ?
Ambiente:
- Ubuntu 14.04
- Upstream kernel 3.18.25
- No SMAP y SMEP
Cualquier idea me ayudaría. Gracias.