
Полная цепочка эксплойта для Chrome, нацеленная на CVE-2019-5782 и CVE-2019-13768, с собственными ROP-гаджетами и шеллкодом для выполнения произвольных команд в Windows 10 1909+.
https://googleprojectzero.blogspot.com/2019/04/virtually-unlimited-memory-escaping.html
Эксплойты CVE-2019-7582 и CVE-2019-13768/P0 issue 1755
Цели Chrome 71.0.3578.98
Необходимо обновить исходный PoC для работы на Windows 10 1909+.
Также необходимо повысить надёжность на конкретной целевой машине, где исходный PoC имел ~0% надёжности (но ~100% на другой цели).
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python2 get-pip.py
pip2 install cherrypy
python2 server.py
Замена освобождённого объекта не происходила, поэтому количество выделенных блоков размером 0x140 увеличено с 0x88 до 0x8000.
Выделение страницы по адресу 0x40404040000 не происходило, поэтому количество выделенных страниц увеличено с 0xc88 до 2*0xc88.
ROP-гаджет mov rcx, rax ; mov rax, rcx ; add rsp, 28h ; ret больше не присутствует в ntdll.dll на Windows 1909. Вместо него используются ROP-гаджеты mov rcx, rax ; test rcx, rcx ; setne al ; ret и mov rax, rcx ; add rsp, 0x28 ; ret из shell32.dll.
pipe.producer.close() приводил к освобождению распылённых блоков размером 0x140. Память очищалась слишком быстро. Поэтому вызов функции был отложен до завершения эксплойта.
Шеллкод был изменён так, чтобы можно было использовать произвольную команду (до длины шеллкода 0x200). Чтобы отредактировать шеллкод, измените shellcode.asm и выполните yasm -f bin -o shellcode.bin shellcode.asm или отредактируйте строку команды в shellcode.bin с помощью hex-редактора. Текущая команда полезной нагрузки — calc.