Come dovrei mitigare le vulnerabilità XSS in KnockoutJS descritte alla sicurezza dei baffi?

6

Il sito Moustache-Security descrive le vulnerabilità XSS in KnockoutJS ... Le vulnerabilità derivano da l'uso di eval (o qualche equivalente) per convertire il testo nell'attributo data-bind in script eseguibile. La maggior parte degli esempi mostra attacchi in cui è possibile eseguire script dannosi se vengono inseriti in un attributo di associazione dati.

Esempio (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>

Mentre riesco a riprodurre gli esempi così come sono definiti, di solito evito di inserire JavaScript negli attributi data-bind quando utilizzo KnockoutJS. Preferisco fare riferimento a una proprietà osservabile su un oggetto JavaScript per separare il comportamento della vista dal suo layout. Utilizzando questo approccio, trovo che JavaScript non è eseguibile.

Esempio (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>

La mia applicazione è a rischio di XSS solo perché ho usato KnockoutJS, o devo anche trovare un modo per inserire un input non affidabile in un attributo data-bind, usando il codice lato server?

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

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

Penserei che se un utente malintenzionato immettesse il proprio script nella pagina utilizzando JavaScript, allora può facilmente manipolare il DOM direttamente e KnockoutJS non aumenta il rischio di XSS.

C'è qualcos'altro che mi manca? Che altro devo fare per prevenire le vulnerabilità XSS che l'autore descrive?

    
posta scott stone 17.06.2014 - 17:34
fonte

1 risposta

3

L'attacco descritto in sicurezza dei baffi descrive un bypass di un Web Application Firewall (WAF ) che tenta di prevenire XSS facendo cadere le richieste HTTP che contengono i tag <script> . Se una pagina utilizza KnockoutJS, un utente malintenzionato può utilizzare un <div> anziché un tag <script> per ottenere l'esecuzione del codice:

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

Affinché l'attacco di cui sopra funzioni, l'utente malintenzionato deve essere in grado di iniettare tag HTML utilizzando parentesi angolari <> .

    
risposta data 15.09.2014 - 20:55
fonte

Leggi altre domande sui tag