
フルチェーン Chrome 71.0.3578.98 エクスプロイト
https://googleprojectzero.blogspot.com/2019/04/virtually-unlimited-memory-escaping.html
悪用 CVE-2019-7582 および CVE-2019-13768/P0 issue 1755
Windows 10 1909+ で動作させるために、元のPoC を更新する必要がありました。
また、特定のターゲットマシンで信頼性を高める必要がありました。元の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 は Windows 1909 の ntdll.dll には存在しなくなりました。代わりに、shell32.dll 内の ROP ガジェット mov rcx, rax ; test rcx, rcx ; setne al ; ret と mov rax, rcx ; add rsp, 0x28 ; ret を使用します。
pipe.producer.close() によってスプレーされた 0x140 サイズのブロックが解放されていました。メモリが速すぎるタイミングでクリーンアップされていました。そのため、関数呼び出しをエクスプロイト完了後まで遅延させました。
シェルコードを変更し、任意のコマンド(シェルコード長 0x200 まで)を使用できるようにしました。シェルコードを編集するには、shellcode.asm を修正して yasm -f bin -o shellcode.bin shellcode.asm を実行するか、コマンドライン文字列を shellcode.bin に hexedit してください。現在のペイロードコマンドは calc です。