
webkit; ma pwned
Questo programma non è decisamente spyware.
Eseguitelo sul vostro dispositivo iOS a 64 bit il prima possibile.
La vostra obbedienza sarà premiata.
[ Versione live su totally-not.spyware.lol ]
Il frontend e l'exploit WebKit sono in /root.
L'exploit del kernel è in /glue.
La post-exploitation è in /glue/dep.
DoubleH3lix e Meridian possono essere compilati indipendentemente come librerie statiche con make headless e make all rispettivamente, nelle rispettive directory.
Questi vengono poi usati per compilare il payload in /glue, che è il binario eseguito tramite JIT dopo l'exploit WebKit. Può essere compilato con un semplice make e compilerà tutte le dipendenze necessarie.
E infine tutto viene assemblato insieme all'exploit WebKit eseguendo make in /root, che compilerà nuovamente le dipendenze necessarie.
Inizialmente volevamo fare il backport della patch WebKit a 10.x, ma alla fine abbiamo rinunciato.
Vedi /patch per i dettagli, ma il succo è:
Una parte del bug di WebKit consisteva in predizioni errate in JSC::DFG::clobberize, che è praticamente un enorme switch-case. La correzione consisteva nel reindirizzare alcuni valori a blocchi già usati per altri valori.
Sulle versioni che abbiamo controllato, il compilatore aveva generato delle jump table a tale scopo, quindi la nostra idea sarebbe stata semplicemente trovare e patchare tutte quelle jump table, dato che il codice corretto sarebbe già stato presente.
Il problema è che i valori da cui tutto dipende sono cambiati centinaia di volte nel corso della vita di iOS 10 (sì, molto più frequentemente di quante siano state le release di iOS), e non sembrano esserci punti di riferimento da nessuna parte nel codice, quindi per noi è praticamente impossibile determinare quali valori patchare. :(