Ho trovato questo PoC e come molte persone hanno detto, non ha funzionato.
Ho inserito printk in join_session_keyring e key_revoke , ricompilato il kernel, modificato il numero di loop e controllato che refcount è zero :
Ma non ha funzionato neanche. Ho impostato il permesso chiave su 0x3f000000 e mostra 0x3f3f3f3f, quindi è chiaro che la riscrittura keyring nel nostro keyring fallisce.
Inoltre, come puoi vedere, il conto della chiave trapelato è diventato 64 dopo msgsnd 64 molti loop . Penso che questo sia di pesce.
La mia domanda è:
- Il Refcount è probabilmente zero, ma l'override fallisce. Perché?
- Perché il numero di msgsnd è stato memorizzato in refcount ?
Ambiente:
- Ubuntu 14.04
- kernel upstream 3.18.25
- No SMAP e SMEP
Qualche idea mi aiuterebbe. Grazie.