
Cadeia completa de exploração do Chrome 71.0.3578.98
https://googleprojectzero.blogspot.com/2019/04/virtually-unlimited-memory-escaping.html
Explora CVE-2019-7582 e CVE-2019-13768/P0 issue 1755
Tem como alvo Chrome 71.0.3578.98
Necessário atualizar o PoC original para funcionar no Windows 10 1909+.
Também necessário aumentar a confiabilidade em uma máquina alvo específica onde o PoC original tinha ~0% de confiabilidade (mas tinha ~100% em outro alvo).
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
A substituição do objeto liberado não estava ocorrendo, então aumentou-se o número de blocos alocados de tamanho 0x140 de 0x88 para 0x8000.
A alocação da página em 0x40404040000 não estava ocorrendo, então aumentou-se o número de páginas alocadas de 0xc88 para 2*0xc88.
O gadget ROP mov rcx, rax ; mov rax, rcx ; add rsp, 28h ; ret não está mais presente em ntdll.dll no Windows 1909. Em vez disso, os gadgets ROP mov rcx, rax ; test rcx, rcx ; setne al ; ret e mov rax, rcx ; add rsp, 0x28 ; ret em shell32.dll são usados.
pipe.producer.close() estava causando a liberação dos blocos de tamanho 0x140 que foram espalhados. A memória estava sendo limpa muito rapidamente. Então, a chamada da função foi atrasada até que o exploit fosse concluído.
O shellcode foi alterado para que um comando arbitrário (até o tamanho do shellcode 0x200) possa ser usado. Para editar o shellcode, modifique shellcode.asm e execute yasm -f bin -o shellcode.bin shellcode.asm ou edite hexadecimalmente a string da linha de comando em shellcode.bin. O payload de comando atual é calc.