<<< Date Index >>>     <<< Thread Index >>>

TSRT-06-10: Microsoft HLINK.DLL Hyperlink Object Library Buffer Overflow Vulnerability



TSRT-06-10: Microsoft HLINK.DLL Hyperlink Object Library Buffer
            Overflow Vulnerability

http://www.tippingpoint.com/security/advisories/TSRT-06-10.html
August 8, 2006

-- CVE ID:
CVE-2006-3086

-- Affected Vendor:
Microsoft

-- Affected Products:
Microsoft Windows Server 2003 SP1 and SP2
Microsoft Windows XP SP1 and SP2
Microsoft Windows 2000 Service Pack 4

-- TippingPoint(TM) IPS Customer Protection:
TippingPoint IPS customers have been protected against this
vulnerability since August 8, 2006 by Digital Vaccine protection
filter ID 4601. For further product information on the TippingPoint IPS:

    http://www.tippingpoint.com 

-- Vulnerability Details:
This vulnerability allows remote attackers to execute arbitrary code on
vulnerable applications that utilize Microsoft Hyperlink Component
Object Model (COM) objects. Specifically, this includes at least
Microsoft Word, PowerPoint and Excel. Exploitation over the web is
doable via Office Web Components (OWC). It is not required for the
target to have OWC installed.

The specific flaw exists within HLINK.DLL in the routine
HrShellOpenWithMonikerDisplayName(). The vulnerability is due to an
unchecked WzCopy (wide char string copy) to a stack based buffer from
user-supplied data in the following call chain:

  HLNK_Bsc::OnObjectAvailable
    HLNK::HrCompleteNavigation()
      HLNK::HrShowTarget()
        HrShellOpenWithMonikerDisplayName()

The specific WzCopy() responsible for the overflow is shown in the
following disassembly snippet from HLINK.DLL version 5.2.3790.227 from
Windows XP SP2:

    7682DA6B lea eax, [ebp+overflowed_buffer]     ; dst
    7682DA71 push eax
    7682DA72 push [ebp+var_E30]                   ; src
    7682DA78 call WzCopy(ushort const *,ushort *) ; vulnerable call

The overflowed buffer is at frame pointer offset 0x0E2C, requiring a
3,628 byte write before breaking out of the holding stack frame. Simply
specifying a long URI string will not trigger the vulnerability.
However, by requesting a URI that does a redirect with the HTTP
"Location:" tag to a long URI, then the vulnerable code will be reached
and a previous call to HrGetFullDisplayName() will pass the long URI to
the vulnerable WzCopy(). The long URI must actually exist, otherwise
the URI expansion will fail and the WzCopy() will never be reached.

-- Vendor Response:
Microsoft has issued an update to correct this vulnerability. More
details can be found at:

http://www.microsoft.com/technet/security/bulletin/MS06-050.mspx

-- Disclosure Timeline:
2006.02.28 - Vulnerability reported to vendor
2006.08.08 - Digital Vaccine released to TippingPoint customers
2006.08.08 - Coordinated public release of advisory

-- Credit:
This vulnerability was discovered by Pedram Amini, TippingPoint Security
Research Team.

-- About the TippingPoint Security Research Team (TSRT):
The TippingPoint Security Research Team (TSRT) consists of industry
recognized security researchers that apply their cutting-edge
engineering, reverse engineering and analysis talents in our daily
operations. More information about the team is available at:

    http://www.tippingpoint.com/security
 
The by-product of these efforts fuels the creation of vulnerability
filters that are automatically delivered to our customers' intrusion
prevention systems through the Digital Vaccine(R) service.