¿Cómo debo mitigar las vulnerabilidades de XSS en KnockoutJS descritas en big-security?

6

El sitio Mustache-Security describe las vulnerabilidades de XSS en KnockoutJS ... Las vulnerabilidades provienen de el uso de eval (o algún equivalente) para convertir texto en el atributo de enlace de datos a script ejecutable. La mayoría de los ejemplos muestran ataques en los que se podría ejecutar un script malicioso si se inyecta en un atributo de enlace de datos.

Ejemplo (HTML / JavaScript / KnockoutJS):

<script src="http://knockoutjs.com/downloads/knockout-3.0.0.debug.js"></script><divdata-bind="click: alert(1)"></div>
<div data-bind="value: alert(2)"></div>
<div data-bind="style: alert(3)"></div>
...
<select data-bind="options: alert(99)"></select>
<script> 
ko.applyBindings();
</script>

Aunque puedo reproducir los ejemplos tal como están definidos, normalmente evito poner JavaScript en los atributos de enlace de datos cuando uso KnockoutJS. Prefiero hacer referencia a una propiedad observable en un objeto JavaScript para separar el comportamiento de la vista de su diseño. Usando este enfoque, encuentro que el JavaScript no es ejecutable.

Ejemplo (HTML / JavaScript / KnockoutJS):

<script src="http://knockoutjs.com/downloads/knockout-3.0.0.debug.js"></script><divdata-bind="value: firstName"></div>
<script> 
var ViewModel = function() {
    this.firstName = ko.observable('alert(2)');
}

var vm = new ViewModel();
ko.applyBindings(vm); 
</script>

¿Mi aplicación corre el riesgo de XSS solo porque he usado KnockoutJS, o también tengo que encontrar una manera de poner una entrada no confiable en un atributo de enlace de datos, usando el código del lado del servidor?

Ejemplo (ASP.NET/HTML/JavaScript/KnockoutJS):

<div data-bind="value: <%=Request.QueryString("id")%>"></div>

Pensaría que si un atacante pudiera inyectar su script en la página usando JavaScript, entonces podría manipular el DOM directamente y con la misma facilidad KnockoutJS no aumenta mi riesgo de XSS.

¿Hay algo más que me esté perdiendo? ¿Qué más debo hacer para evitar las vulnerabilidades XSS que describe el autor?

    
pregunta scott stone 17.06.2014 - 17:34
fuente

1 respuesta

3

El ataque descrito en mustache-security describe una omisión de un Firewall de aplicaciones web (WAF ) que intentan evitar XSS eliminando solicitudes HTTP que contienen etiquetas <script> . Si una página usa KnockoutJS, entonces un atacante puede usar una etiqueta <div> en lugar de una etiqueta <script> para obtener la ejecución del código:

http://localhost/xss?id=<div data-bind="html: '&#x5c;x3cimg&#x5c;x20src=x&#x5c;x20onerror=alert&#x5c;x281&#x5c;x29&#x5c;x3e'"></div>

Para que el ataque anterior funcione, el atacante debe poder inyectar etiquetas HTML utilizando los corchetes angulares <> .

    
respondido por el rook 15.09.2014 - 20:55
fuente

Lea otras preguntas en las etiquetas