Qui pubblicherò analisi di exploit pubblici o alcuni dei miei exploit 1day.
[ Analisi di exploit pubblici ]
Personalmente penso che il modo migliore per imparare un exploit pubblico sia capirlo riga per riga finché non lo comprendo appieno. Pubblicherò alcuni di questi exploit (eccessivamente commentati ;) ) così, si spera, altri possano imparare e come tentativo di restituire qualcosa alla community. Anche per scopi di documentazione, perché queste cose tendono a svanire dalla mia testa con il passare del tempo.
Questo exploit sovrascrive un puntatore a oggetto in un altro oggetto. Usa l'attacco ret2dir per fare in modo che il puntatore corrotto punti a un indirizzo fisso prevedibile nel kernel che contiene il payload dell'exploit. Questa tecnica di exploit bypassa PXN e PAN.
Questo exploit azzera 16 byte di un utile oggetto globale, che si trova a un indirizzo fisso nel kernel.
Un puntatore a oggetto corrotto all'interno dell'oggetto globale fa riferimento al payload dell'exploit dall'userland. Questo tipo di attacco non funziona su dispositivi/kernel con PAN (o emulazione PAN).
extra_recipe
Il mio tentativo di comprendere il jailbreak extra_recipe
Ero particolarmente interessato alla parte del bypass di kpp. Anche se c'erano un paio di slide sull'argomento da cui potevo intravedere un'immagine vaga del bypass, volevo davvero addentrarmi nei dettagli più fini e vedere cosa succede realmente nel codice.
Volevo anche capire gli ingredienti finali per un jailbreak (installazione di Cydia, ecc.)
yalu102 (ViewController.m)
Ho commentato la parte relativa al bug vero e proprio e a come è stato sfruttato.
Il motivo per cui ho esaminato yalu102 invece dell'exploit originale è che la tecnica port-feng-shui sembrava più pulita e più semplice da capire.
Usa tecniche straordinarie per partire da primitive davvero deboli, costruire un AAR più robusto e infine creare un task port completo. La magia dei port dietro il codice dell'exploit è incredibile. Tutto questo con un heap overflow di 8 byte NULL. Semplicemente allucinante.
Ho abbozzato alcune idee ingenue per migliorare l'affidabilità. Spero che qualcuno rilasci una versione più affidabile dell'exploit in futuro. :)
Un enorme ringraziamento a kudima (@begger_dd) per il writeup molto chiaro, conciso e accuratamente annotato! :)
Il writeup spiega il bug di type confusion JIT, alcune limitazioni nelle conversioni di boxing/unboxing (che possono introdurre inaffidabilità), e una descrizione dettagliata di come vengono costruite le primitive AAR/AAW iniziali/finali. Fornisce inoltre approfondimenti sui cambiamenti nelle tecniche di exploit dopo l'ultima tornata di mitigazioni (index masking, avvelenamento del backing store di ArrayBuffer, alcune modifiche al meccanismo del W^X JIT, cambiamenti nella struttura di JSObject, ecc.)
jsc_ConcatMemcpy_infoleak
Questa è una versione commentata dell'exploit infoleak WebKit di kudima (corretto in 2018.8.27).
Deriva da una correzione incompleta di uno dei bug segnalati da lokihardt. La patch del report di lokihardt ha corretto la primitiva di type confusion Double -> Object, ma non l'ha corretta nell'altro senso; Object -> Double.
Fa uno spray dell'heap di WebKit con butterfly contenenti un singolo oggetto e un marker, e successivamente attiva il bug di concat e riempie gran parte di diversi array di double con dati di heap non inizializzati. Scorre gli array di double non inizializzati prodotti dal concat difettoso finché non trova l'indirizzo dell'oggetto precedentemente spruzzato e lo leakka.
Grazie ancora a kudima (@begger_dd) per il bell'exploit e il writeup! :)
[ 1Day ]
CVE-2017-2547
Un giorno ho guardato l'exploit di singi dopo la sua presentazione allo Zer0con 2018, e ho deciso di migliorarlo.
Questa è una versione autonoma dell'exploit, prima che lo integrassi in pwnjs.
I miglioramenti includono
Maggiore affidabilità (funziona perfettamente dopo lunghe sessioni di navigazione con memoria contaminata)
Rimossi tutti gli offset hardcoded per renderlo compatibile con diverse versioni del browser
Usata una tecnica di sfruttamento diversa (la tecnica standard di misalign)
Alla fine lo ho integrato nel framework pwnjs creando un prototipo webkit
Reso il codice molto più leggibile e aggiunti molti commenti
Ringraziamenti speciali
qwertyoruiop e Samuel Grob per lo straordinario articolo su Phrack e gli exploit pubblici
Brian Pak e Andrew Wesie per il fantastico framework pwnjs!