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] 7682DA71 push eax 7682DA72 push [ebp+var_E30] 7682DA78 call WzCopy(ushort const *,ushort *)
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.