[NT] SetWindowLong Shatter Attacks
From: SecuriTeam (support_at_securiteam.com)
Date: 10/17/04
- Previous message: SecuriTeam: "[NT] Microsoft IIS WebDAV (XML Parser) Attribute Blowup DoS"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]
To: list@securiteam.com Date: 17 Oct 2004 16:19:46 +0200
The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
- - promotion
The SecuriTeam alerts list - Free, Accurate, Independent.
Get your security news from a reliable source.
http://www.securiteam.com/mailinglist.html
- - - - - - - - -
SetWindowLong Shatter Attacks
------------------------------------------------------------------------
SUMMARY
The Windows SetWindowLong and SetWindowLongPtr API function calls can be
used to exploit Windows applications to various degrees. The degree of
exploitation is highly dependant upon the application itself.
DETAILS
Vulnerable Systems:
* Microsoft Windows 98, 98SE, ME
* Microsoft Windows NT 4.0
* Microsoft Windows 2000 Service Pack 4
* Microsoft Windows XP, Microsoft Windows XP Service Pack 1
* Microsoft Windows Server 2003
The SetWindowLong function changes an attribute of the specified window.
The function also sets a 32-bit (long) value at the specified offset into
the extra window memory of a window. The function prototype is as follows:
LONG SetWindowLong(
HWND hWnd, // handle of window
int nIndex, // offset of value to set
LONG dwNewLong // new value
);
Parameters:
hWnd
Handle to the window and, indirectly, the class to which the window
belongs.
nIndex
Specifies the zero-based offset to the value to be set. Valid values
are in the range zero through the number of bytes of extra window
memory, minus 4; for example, if you specified 12 or more bytes of
extra memory, a value of 8 would be an index to the third 32-bit
integer.
To set any other value, specify one of the following values:
Value Action
GWL_EXSTYLE Sets a new extended window style.
GWL_STYLE Sets a new window style.
GWL_WNDPROC Sets a new address for the window procedure.
GWL_HINSTANCE Sets a new application instance handle.
GWL_ID Sets a new identifier of the window.
GWL_USERDATA Sets the 32-bit value associated with the window. Each
window has a corresponding 32-bit value intended for use
by the application that created the window.
The following values are also available when the hWnd parameter identifies
a dialog box:
Value Action
DWL_DLGPROC Sets the new address of the dialog box procedure.
DWL_MSGRESULT Sets the return value of a message processed in the
dialog box procedure.
DWL_USER Sets new extra information that is private to the
application, such as handles or pointers.
dwNewLong
Specifies the replacement value.
Remarks
The SetWindowLong function fails if the window specified by the hWnd
parameter does not belong to the same process as the calling thread.
As with the SendMessage() function (as used by standard shatter attacks)
any user can call the SetWindowLong() function to alter the data stored in
the window memory.
Multiple third party and core windows services have been found that used
the memory space pointed to by the GWL_USERDATA, to store specific data.
In some cases this data could be manipulated to gain execution control.
Since each application stores different information in this memory, the
degree of danger is highly dependant on the application itself. An example
of how execution control could be obtained will be shown below.
A certain service that did not normally have a window, could be enticed
into generating an error that would display a window. The service stored a
pointer to a lookup table in the window memory pointed to by GWL_USERDATA.
This lookup table held the address of functions, and was later used to
retrieve an address and pass it to a CALL instruction.
By using the process mapped heap, as explained in Brett Moore's Blackhat
presentation, it was possible to place our shellcode into a known
location. We could also
construct a new lookup table, pointing to our shellcode, in a known
location. Then by using SetWIndowLongPtr() API we replaced the pointer to
the lookup table with the address of our new lookup table. The service
would use our lookup table and execution would therefore reach the
shellcode.
Vendor Status:
Microsoft has issued a security patch that will mitigate this
vulnerability. It is available at
<http://www.microsoft.com/technet/security/bulletin/ms04-032.mspx>
http://www.microsoft.com/technet/security/bulletin/ms04-032.mspx.
ADDITIONAL INFORMATION
The information has been provided by
<mailto:brett.moore@security-assessment.com> Brett Moore.
The original article can be found at:
<http://www.securiteam.com/windowsntfocus/6V00F0UBFU.html>
http://www.securiteam.com/windowsntfocus/6V00F0UBFU.html
========================================
This bulletin is sent to members of the SecuriTeam mailing list.
To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@securiteam.com
In order to subscribe to the mailing list, simply forward this email to: list-subscribe@securiteam.com
====================
====================
DISCLAIMER:
The information in this bulletin is provided "AS IS" without warranty of any kind.
In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.
- Previous message: SecuriTeam: "[NT] Microsoft IIS WebDAV (XML Parser) Attribute Blowup DoS"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]
Relevant Pages
- SetWindowLong Shatter Attacks
... The SetWindowLong() function is documented in MSDN as; ... The SetWindowLong
function changes an attribute of the specified window. ... the extra window memory
of a window. ... Specifies the zero-based offset to the value to be set. ... (Vuln-Dev) - SetWindowLong Shatter Attacks
... The SetWindowLong() function is documented in MSDN as; ... The SetWindowLong
function changes an attribute of the specified window. ... the extra window memory
of a window. ... Specifies the zero-based offset to the value to be set. ... (Bugtraq) - [Full-Disclosure] SetWindowLong Shatter Attacks
... The SetWindowLong() function is documented in MSDN as; ... The SetWindowLong
function changes an attribute of the specified window. ... the extra window memory
of a window. ... Specifies the zero-based offset to the value to be set. ... (Full-Disclosure) - [NEWS] Palm OS Treo Find Feature System Password Bypass
... The following security advisory is sent to the securiteam mailing list, and can be
found at the SecuriTeam web site: http://www.securiteam.com ... use this vulnerability
to retrieve information from a locked device. ... the Find window on the bottom half of
the screen. ... To access the Edit window, press the Menu key while the Find window is
... (Securiteam) - [NT] Microsoft Internet Explorer JavaScript Window() Code Execution
... The following security advisory is sent to the securiteam mailing list, and can be
found at the SecuriTeam web site: http://www.securiteam.com ... * Microsoft Internet Explorer
version 6 ... As offset 0x006F005B points to an invalid ... which, coincidently,
is reserved for the facilitation of all opened Window ... (Securiteam)