VIKIROOT
Questo è un PoC per CVE-2016-5195 per Android 6.0.1 Marshmallow a 64 bit (forse 7.0?), oltre a uno strumento di root temporaneo universale e stabile. Non richiede un eseguibile SUID né modifiche al filesystem.
Caratteristiche
- Bypass di SELinux (vedi sotto per i dettagli).
- Solo in memoria: non modifica il filesystem e non necessita di eseguibili speciali.
- Stabile: non influisce sulla stabilità del dispositivo.
- Scalabile: facile aggiungere nuovi kernel e/o nuovi dispositivi.
- Reversibile: il backdoor viene cancellato automaticamente al termine della shell root, quindi non è necessario riavviare dopo l'uso.
Attenzione
Con "bypass di SELinux" intendo che il payload verrà eseguito nel dominio init anche se SELinux è in modalità enforcing, tuttavia è ancora necessaria una patch a sepolicy per rendere il dominio init sconfinato. Di solito ciò richiede un'immagine di boot modificata.
Prerequisiti
- Io, Robot di Isaac Asimov.
- Dispositivo "dirtycow-capable".
- sepolicy patchata.
Compilazione
I binari precompilati sono disponibili nella pagina delle release. In caso contrario, aggiungi la toolchain standalone NDK a PATH ed esegui make.
Utilizzo
Puoi eseguirlo tramite una shell adb (posizionalo in /data/local/tmp) e ottenere una shell root sia nel terminale integrato che in un server terminale remoto come nc. Per i dettagli, eseguilo senza parametri.
Risoluzione dei problemi
- per prima cosa, leggi attentamente la sezione "Attenzione" sopra.
- "insufficient place for payload" o "unknown kernel": è necessario un riavvio.
- "waiting for reverse connect shell": accendi il dispositivo, apri l'app orologio/sveglia o attiva l'interruttore Bluetooth per attivare il backdoor.
- ancora senza fortuna: esegui la versione "dbg" e inviami un'email con i file generati, che sono solo dump di una parte del kernel e non contengono informazioni personali.
Crediti
- scumjr per il metodo di patching vDSO.
- Tzul per l'aiuto nel debug del problema di sepolicy.
- RenaKunisaki per averlo fatto funzionare con bionic.
TODO
- Arricchire il database dei kernel per il supporto x86 e così via.
- Testarlo su Android 7 Nougat (aiuto richiesto!).