
Full exploit chain (CVE-2019-11708 & CVE-2019-9810) against Firefox on Windows 64-bit.
Это полная цепочка эксплойтов для компрометации браузера (CVE-2019-11708 и CVE-2019-9810), нацеленная на Firefox в Windows 64-бит. Она использует CVE-2019-9810 для получения выполнения кода как в дочернем процессе, так и в родительском процессе, а CVE-2019-11708 для обмана родительского процесса, заставляя его перейти на произвольный URL.

Я ранее освещал первопричину и эксплуатацию CVE-2019-9810 в статье A journey into IonMonkey: root-causing CVE-2019-9810 и в сопутствующем github репозитории.
CVE-2019-11708 был исправлен бюллетенем mfsa2019-19 и получил номер Bug 1559858 в трекере ошибок Mozilla. Вот краткое описание проблемы:
Insufficient vetting of parameters passed with the Prompt:Open IPC message between child
and parent processes can result in the non-sandboxed parent process opening web content
chosen by a compromised child process. When combined with additional vulnerabilities this
could result in executing arbitrary code on the user's computer.
Вы можете найти коммит, исправляющий эту проблему, здесь: Clean up prompt open calls in Prompter.jsm.
Полное описание проблемы, а также методов, использованных в эксплойте, будет представлено в предстоящей статье на doar-e.github.io.
Эксплойт exploit был протестирован на Windows 19H2 64-bit и нацелен на пользовательскую сборку Firefox, так что не удивляйтесь, если потребуется некоторая работа, чтобы заставить его работать в другом месте :). Однако, если вы просто хотите запустить эксплойт без компиляции, я подготовил упакованный браузер, который загрузил в release/firefox-68.0a1.en-US.win64.7z. Он также включает оболочку js.exe и информацию о закрытых символах для js.exe, firefox.exe и xul.dll.
Эксплойт предполагает, что поддержка BigInt включена в Firefox, что можно сделать, переключив javascript.options.bigint в about:config.

Процесс эксплуатации использует повреждение данных для получения привилегированного выполнения JS, также известного как God Mode (что по сути является реализацией техники, использованной на Pwn2Own2014 Юри Аэдла), что очень отличается (и гораздо удобнее) от того, как я эксплуатировал CVE-2019-9810. Это означает, что в цепочке эксплойтов не происходит перехвата потока управления.
Services.mm.loadFrameScript) вместо грязных хаков.В реальности есть множество более тонких деталей, не описанных выше, поэтому если вам интересно, приглашаю вас найти истину и прочитать исходники / будущую статью :).
ОБНОВЛЕНИЕ 13 июня 2020: Согласно @rtfingc / Issue #1, Mozilla смягчила повреждение данных, представленное в этом эксплойте, с помощью коммита от 10 февраля 2020: Bug 1602485.
Для сборки нагрузки достаточно выполнить nmake из командной строки VS 2017 x64.
CVE-2019-11708\payload>nmake
Microsoft (R) Program Maintenance Utility Version 14.16.27034.0
Copyright (C) Microsoft Corporation. All rights reserved.
taskkill /f /im payload.exe
ERROR: The process "payload.exe" not found.
if not exist .\bin mkdir bin
python src\genheaders.py sprites
cl /O1 /nologo /ZI /W3 /D_AMD64_ /DWIN_X64 /sdl /Febin\payload.exe src\payload.cc /link /nologo /debug:full user32.lib
payload.cc
del *.obj *.pdb *.idb
if exist .\bin del bin\*.exp bin\*.ilk bin\*.lib
start .\bin\payload.exe
Это создает файлы payload.exe / payload.pdb в каталоге payload\bin.
Я написал этот эксплойт для локальной сборки Windows, синхронизированной с идентификатором ревизии: 2abb636ad481768b7c88619080cf224b2c266b2d (если вы не хотите собирать его самостоятельно, я загрузил свою сборку сюда: release/firefox-68.0a1.en-US.win64.7z):
$ hg --debug id -i
2abb636ad481768b7c88619080cf224b2c266b2d
И я использовал следующий файл mozconfig:
. "$topsrcdir/browser/config/mozconfigs/win64/common-win64"
ac_add_options --disable-crashreporter
ac_add_options --enable-debug-symbols
. "$topsrcdir/build/mozconfig.clang-cl"
. "$topsrcdir/build/mozconfig.lld-link"
# Use the clang version in .mozbuild
CLANG_LIB_DIR="$(cd ~/.mozbuild/clang/lib/clang/*/lib/windows && pwd)"
export LIB=$LIB:$CLANG_LIB_DIR
ac_add_options --enable-js-shell
ac_add_options --enable-jitspew
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff64