Lucene search

K
packetstormGoogle Security ResearchPACKETSTORM:144292
HistorySep 22, 2017 - 12:00 a.m.

Microsoft Edge Chakra Incorrect Parse

2017-09-2200:00:00
Google Security Research
packetstormsecurity.com
20

0.924 High

EPSS

Percentile

98.7%

`Microsoft Edge: Chakra incorrectly parses object patterns   
  
CVE-2017-8729  
  
  
When the Chakra's parser meets "{", at first, Chakra treats it as an object literal without distinguishing whether it will be an object literal(i.e., {a: 0x1234}) or an object pattern(i.e., {a} = {a: 1234}). After finishing to parse it using "Parser::ParseTerm", if it's an object pattern, Chakra converts it to an object pattern using the "ConvertObjectToObjectPattern" method.  
  
The problem is that "Parser::ParseTerm" also parses ".", etc. using "ParsePostfixOperators" without proper checks. As a result, an invalid syntax(i.e., {b = 0x1111...}.c) can be parsed and "ConvertObjectToObjectPattern" will fail to convert it to an object pattern.  
  
In the following PoC, "ConvertObjectToObjectPattern" skips "{b = 0x1111...}.c". So the object literal will have incorrect members(b = 0x1111, c = 0x2222), this leads to type confusion(Chakra will think "c" is a setter and try to call it).  
  
PoC:  
function f() {  
({  
a: {  
b = 0x1111,  
c = 0x2222,  
}.c = 0x3333  
} = {});  
}  
  
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  
  
`