
Cadena de exploit completa (CVE-2019-11708 y CVE-2019-9810) contra Firefox en Windows de 64 bits.
Esta es una cadena de explotación completa de compromiso del navegador (CVE-2019-11708 & CVE-2019-9810) dirigida a Firefox en Windows de 64 bits. Utiliza CVE-2019-9810 para obtener ejecución de código tanto en el proceso de contenido como en el proceso padre, y CVE-2019-11708 para engañar al proceso padre para que navegue a una URL arbitraria.

He cubierto la causa raíz y la explotación de CVE-2019-9810 anteriormente en el artículo Un viaje a IonMonkey: descubriendo la causa raíz de CVE-2019-9810 y en el repositorio de github asociado.
CVE-2019-11708 fue corregido por el boletín mfsa2019-19 y se le asignó el Bug 1559858 en el rastreador de bugs de Mozilla. Aquí está el resumen del problema:
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.
Puede encontrar el commit que soluciona el problema aquí: .
Un análisis completo del problema, así como las técnicas utilizadas en el exploit, se describirán en un próximo artículo en doar-e.github.io.
El exploit ha sido probado en Windows 19H2 de 64 bits y está dirigido a una compilación personalizada de Firefox, así que no se sorprenda si se requiere un poco de trabajo para que funcione en otros lugares :). Sin embargo, si solo tiene ganas de ejecutar el exploit sin compilar nada, preparé un navegador empaquetado que subí en release/firefox-68.0a1.en-US.win64.7z. También incluye el shell js.exe así como información de símbolos privados para js.exe, firefox.exe y xul.dll.
El exploit asume que el soporte para BigInt está activado en Firefox, lo cual puede hacer alternando javascript.options.bigint en about:config.

El proceso de explotación utiliza una corrupción de datos para obtener ejecución de JS privilegiado, también conocido como God Mode (que es básicamente una implementación de una técnica utilizada en Pwn2Own2014 por Jüri Aedla), lo cual es muy diferente (y mucho más conveniente) de la forma en que exploté CVE-2019-9810. Esto significa que no hay secuestro de flujo de control durante la cadena de explotación.
Services.mm.loadFrameScript) en lugar de hacks sucios y poco elegantes.En realidad, hay muchos detalles más sutiles que no se describen arriba, así que si está interesado, está invitado a buscar la verdad y leer las fuentes / el artículo futuro :).
ACTUALIZACIÓN 13 de junio de 2020: Según @rtfingc / Issue #1, Mozilla ha mitigado la corrupción de datos presentada en este exploit con un commit del 10 de febrero de 2020: Bug 1602485.
Para construir la carga útil, solo tiene que ejecutar nmake desde un símbolo del sistema de 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
Esto crea un archivo payload.exe / payload.pdb dentro del directorio payload\bin.
Escribí este exploit contra una compilación local de Windows sincronizada con el siguiente id de revisión: 2abb636ad481768b7c88619080cf224b2c266b2d (si no quiere compilarlo usted mismo, he subido mi compilación aquí: release/firefox-68.0a1.en-US.win64.7z):
$ hg --debug id -i
2abb636ad481768b7c88619080cf224b2c266b2d
Y he usado el siguiente archivo 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