Recentemente ho letto delle implicazioni delle dereferenze con il puntatore NULL nel codice del kernel (spesso LKM / moduli), privilegiando i privilegi per root tramite mmap()
ing la pagina NULL e poi memcpy()
un po 'di shellcode che chiama commit_creds(prepare_kernels_cred(0));
(o qualsiasi altra cosa) da user-land per far sì che il codice successivo venga eseguito nel contesto dell'utente root (in genere per generare una shell di root). Questo era un metodo di sfruttamento molto popolare circa oltre un decennio fa.
È stata introdotta una mitigazione, mmap_min_addr
, che impedisce l'introduzione di mmap()
di pagine basse e le persone (ovviamente) hanno trovato il modo di aggirarlo (gli articoli che ho letto erano tutti nel 2009). Tuttavia, ci sono (apparentemente) metodi (conosciuti o pubblici) per aggirare questa mitigazione (e ovviamente altri problemi di indurimento del kernel causano errori di memoria come questo a diventare più difficili o completamente non fattibili).
Dato questo, quanto dannose sono le dereferenze con puntatore NULL oggi? Sembra che la cosa migliore da sfruttare sia il denial-of-service (in un kernel moderno con mmap_min_addr
abilitato [forse trascurando ASLR, DEP / NX, SELinux / AppArmor / PaX / grsec, ecc.]). È possibile sfruttare l'escalation dei privilegi in particolari ambienti? (Esclusa la disabilitazione di mmap_min_addr
, ovviamente). E se sì, quali sono alcuni esempi?