Contexto
En nuestro equipo de desarrollo, tenemos que construir un componente. Este componente es un lado del cliente completo escrito en Javascript.
Una aplicación web cliente que desee incrustar este componente lo llamará como se muestra a continuación:
<iframe id="fullScreenIframe" src="http://my-server.com/component?param1=val1¶m2=..."></iframe>
Elproblema
Unodelosparámetrosaceptadosporelcomponentenosponenerviosos.Elparámetroorigin
seusaparagenerarunenlaceparallevaralusuarioalaaplicaciónwebdelcliente.
Aquíescómoelcomponentegestionaesteparámetro:
$(document).ready(function(){varorigin=urlParameters["origin"];// Dynamically built from the current document url
if(origin != undefined){
// The link to take the user back...
$("#welcomePage").attr("href",origin);
// Another link in the breadcrumb using the same 'origin' parameter
$("#simulationPage").attr("href", "index.html"+"?origin="+origin);
}
// ...
}
Lo que ya le dijimos
- Phishing del sitio web
Incluso si el parámetro origin
se pasa a jQuery, cualquier sitio web puede usarse en una estafa de phishing. Se le puede pedir a un usuario que (re) ingrese sus credenciales pensando que está en un sitio real. El agujero aquí será el componente.
- Lista blanca con valores válidos
Los valores válidos de origin
se pueden almacenar de forma remota en una lista blanca. El componente verificará la lista blanca primero antes de generar el enlace. Se puede generar un enlace predeterminado si se encuentra un valor inesperado.
Esos dos argumentos no lo convencieron. Quiere que se le demuestre que el parámetro origin
puede ser un agujero de seguridad. Así que chicos, ¿qué le dirías?
Por cierto, estoy buscando un buen PoC que demuestre la debilidad del parámetro origin
.