stringtranslate.com

Política de seguridad de contenidos

La Política de Seguridad de Contenido ( CSP ) es un estándar de seguridad informática introducido para prevenir ataques de secuencias de comandos entre sitios (XSS), clickjacking y otros ataques de inyección de código resultantes de la ejecución de contenido malicioso en el contexto de una página web de confianza . [1] Es una Recomendación Candidata del grupo de trabajo del W3C sobre Seguridad de Aplicaciones Web, [2] ampliamente respaldada por los navegadores web modernos . [3] La CSP proporciona un método estándar para que los propietarios de sitios web declaren los orígenes aprobados del contenido que los navegadores deberían poder cargar en ese sitio web; los tipos cubiertos son JavaScript , CSS , marcos HTML , trabajadores web , fuentes , imágenes, objetos integrables como subprogramas Java , ActiveX , archivos de audio y video y otras características HTML5 .

Estado

El estándar, originalmente llamado Restricciones de contenido, fue propuesto por Robert Hansen en 2004, [4] implementado por primera vez en Firefox 4 y rápidamente adoptado por otros navegadores. La versión 1 del estándar se publicó en 2012 como recomendación candidata del W3C [5] y rápidamente con versiones posteriores (Nivel 2) publicadas en 2014. A partir de 2023 , se está desarrollando el borrador del Nivel 3 y las nuevas características están siendo adoptadas rápidamente por los navegadores web. [6]

Los siguientes nombres de encabezado se utilizan como parte de implementaciones experimentales de CSP: [3]

Un sitio web puede declarar varios encabezados CSP, incluso los de cumplimiento y los de solo informes. El navegador procesará cada encabezado por separado.

El CSP también se puede entregar dentro del código HTML utilizando una etiqueta meta , aunque en este caso su efectividad será limitada. [14]

Internet Explorer 10 e Internet Explorer 11 también admiten CSP, pero solo la directiva sandbox, utilizando el encabezado experimental X-Content-Security-Policy. [15]

Varios marcos de aplicaciones web admiten CSP, por ejemplo AngularJS [16] (de forma nativa) y Django (middleware). [17] GitHub ha publicado instrucciones para Ruby on Rails . [18] Sin embargo, la compatibilidad con marcos web solo es necesaria si el contenido de CSP depende de alguna manera del estado de la aplicación web, como el uso del origen. De lo contrario, el CSP es bastante estático y se puede entregar desde niveles de aplicación web por encima de la aplicación, por ejemplo, en el balanceador de carga o el servidor web .nonce

Bypasses

En diciembre de 2015 [19] y diciembre de 2016 [20] se publicaron algunos métodos para eludir 'nonce'la inclusión en listas blancas de orígenes. En enero de 2016 [21] se publicó otro método que aprovecha la inclusión en listas blancas de CSP en todo el servidor para explotar versiones antiguas y vulnerables de bibliotecas de JavaScript alojadas en el mismo servidor (caso frecuente con servidores CDN). En mayo de 2017 [22] se publicó un método más para eludir la inclusión en listas blancas de CSP utilizando el código de los marcos de aplicaciones web.

Modo de funcionamiento

Asignación entre funciones HTML5 y JavaScript y controles de la Política de seguridad de contenido

Si el Content-Security-Policyencabezado está presente en la respuesta del servidor, un cliente que cumple con las normas aplica la política de lista blanca declarativa. Un ejemplo de objetivo de una política es un modo de ejecución más estricto para JavaScript con el fin de evitar ciertos ataques de secuencias de comandos entre sitios. En la práctica, esto significa que una serie de funciones están deshabilitadas de forma predeterminada:

Si bien el uso de CSP en una nueva aplicación puede ser bastante sencillo, especialmente con un marco de JavaScript compatible con CSP , [d] las aplicaciones existentes pueden requerir cierta refactorización o flexibilización de la política. La práctica de codificación recomendada para aplicaciones web compatibles con CSP es cargar código desde archivos de origen externos ( <script src>), analizar JSON en lugar de evaluarlo y usarlo EventTarget.addEventListener()para configurar controladores de eventos. [23]

Notas

  1. ^ Este comportamiento se puede desactivar globalmente mediante una 'unsafe-inline'declaración especial
  2. ^ Los bloques en línea y confiables se pueden incluir individualmente en la lista de permitidos del CSP mediante declaraciones o .<script><style>noncehash
  3. ^ Este comportamiento se puede desactivar globalmente mediante una 'unsafe-eval'declaración especial
  4. ^ Por ejemplo, AngularJS requiere que solo se cambie un indicador de inicialización al modo compatible con CSP:<html ng-app ng-csp>

Informes

Cada vez que un recurso solicitado o la ejecución de un script viola la política, el navegador enviará una POSTsolicitud al valor especificado en report-uri[24] o report-to[25] que contiene detalles de la violación.

Los informes CSP son estructuras JSON estándar y pueden capturarse mediante la propia API de la aplicación [26] o mediante receptores de informes CSP públicos. [ cita requerida ]

En 2018, los investigadores de seguridad demostraron cómo enviar informes de falsos positivos al receptor designado especificado en report-uri. Esto permite a los atacantes potenciales activar arbitrariamente esas alarmas y podría hacerlas menos útiles en caso de un ataque real. [27] Este comportamiento es intencional y no se puede corregir, ya que el navegador (cliente) es el que envía los informes.

Exención de complementos y extensiones del navegador

Según el modelo de procesamiento original de CSP (1.0) (2012-2013), [28] CSP no debería interferir con el funcionamiento de los complementos o extensiones del navegador instalados por el usuario. Esta característica de CSP habría permitido efectivamente que cualquier complemento, extensión o Bookmarklet inyectara secuencias de comandos en sitios web, independientemente del origen de dichas secuencias de comandos, y por lo tanto estaría exento de las políticas de CSP.

Sin embargo, esta política ha sido modificada desde entonces (a partir de la versión 1.1 de la CSP [29] ) con la siguiente redacción. Obsérvese el uso de la palabra "puede" en lugar de la expresión absoluta anterior "debería (no)":

Nota: Los agentes de usuario pueden permitir a los usuarios modificar o eludir la aplicación de políticas a través de preferencias de usuario, marcadores, adiciones de terceros al agente de usuario y otros mecanismos similares.

Los usuarios de los navegadores utilizaban la expresión "debería" para solicitar/exigir el cumplimiento de la política y la instalación de cambios en los navegadores más populares (Firefox, Chrome, Safari) para respaldarla. Esto fue particularmente polémico cuando sitios como Twitter y GitHub comenzaron a utilizar políticas CSP estrictas que "rompieron" el uso de Bookmarklets. [30]

El Grupo de Trabajo de Seguridad de Aplicaciones Web del W3C considera que dicho script es parte de la Base de Computación Confiable implementada por el navegador; sin embargo, un representante de Cox Communications argumentó ante el grupo de trabajo que esta exención es un potencial agujero de seguridad que podría ser explotado por complementos o extensiones maliciosos o comprometidos. [31] [32]

Medidas complementarias

A partir de 2015, el W3C ha propuesto una serie de nuevos estándares de seguridad de navegadores, la mayoría de ellos complementarios a CSP: [33]

Véase también

Referencias

  1. ^ Sid Stamm (11 de marzo de 2009). "Seguridad/CSP/Especificaciones - MozillaWiki". wiki.mozilla.org . Consultado el 29 de junio de 2011 . La Política de seguridad de contenido tiene como objetivo ayudar a los diseñadores web o administradores de servidores a especificar cómo interactúa el contenido en sus sitios web. Ayuda a mitigar y detectar tipos de ataques como XSS e inyección de datos.
  2. ^ "Estado del proyecto". 13 de septiembre de 2016. Consultado el 5 de octubre de 2016 .
  3. ^ ab "¿Puedo utilizar la Política de seguridad de contenido?". Fyrd . Consultado el 22 de febrero de 2013 .
  4. ^ Robert Hansen (1 de junio de 2009). "Política de seguridad de contenido de Mozilla". Archivado desde el original el 18 de marzo de 2015. Consultado el 29 de junio de 2011. Restricciones de contenido: una forma en que los sitios web le indican al navegador que aumente la seguridad en las páginas en las que el sitio sabe que el contenido es enviado por el usuario y, por lo tanto, potencialmente peligroso.
  5. ^ "Política de seguridad de contenido 1.0". W3C . Consultado el 13 de noviembre de 2015 .
  6. ^ "Política de seguridad de contenido de nivel 3". W3C . Consultado el 5 de mayo de 2023 .
  7. ^ "Chrome 25 Beta: Política de seguridad de contenido y Shadow DOM". Google. 14 de enero de 2013. Consultado el 22 de febrero de 2013 .
  8. ^ "Content Security Policy 1.0 llega a Firefox Aurora". Fundación Mozilla. 29 de mayo de 2013. Consultado el 16 de junio de 2013 .
  9. ^ "RapidRelease/Calendar". Fundación Mozilla. 29 de mayo de 2013. Consultado el 16 de junio de 2013 .
  10. ^ "Error 96765 - Implementar el encabezado "Content-Security-Policy"". WebKit. 31 de octubre de 2012. Consultado el 7 de agosto de 2015 .
  11. ^ "Política de seguridad de contenido (CSP)". Microsoft . Consultado el 6 de febrero de 2020 .
  12. ^ "Nuevas funciones de seguridad de Chromium, junio de 2011". Google. 14 de junio de 2011. Consultado el 22 de febrero de 2013 .
  13. ^ "Introducción a la política de seguridad de contenido". Fundación Mozilla . Consultado el 22 de febrero de 2013 .
  14. ^ "Elemento HTML META". Política de seguridad de contenido de nivel 2 . W3C . Consultado el 14 de noviembre de 2015 .
  15. ^ "Defensa en profundidad: bloqueo de mash-ups con HTML5 Sandbox". Equipo de ingeniería de Windows Internet Explorer . Consultado el 13 de abril de 2014 .
  16. ^ "Directiva ngCsp". AngularJS . Consultado el 27 de octubre de 2020 .
  17. ^ "django-security". GitHub . 21 de noviembre de 2022.
  18. ^ "Política de seguridad de contenidos". GitHub. 19 de abril de 2013.
  19. ^ "CSP 2015". XSS Jigsaw. 23 de noviembre de 2015. Archivado desde el original el 20 de diciembre de 2015. Consultado el 12 de diciembre de 2015 .
  20. ^ Lekies, Sebastian. "Recopilación de desvíos de CSP" . Consultado el 5 de junio de 2017 .
  21. ^ "Una relación abusiva con AngularJS". 12 de diciembre de 2015. Consultado el 5 de enero de 2016 .
  22. ^ OWASP (25 de mayo de 2017), AppSec EU 2017 No confíe en el DOM: cómo eludir las mitigaciones XSS mediante gadgets de scripts, por Sebastian Lekies , consultado el 5 de junio de 2017
  23. ^ West, Mike (15 de junio de 2012). "Introducción a la política de seguridad de contenido". HTML5 Rocks . Consultado el 22 de febrero de 2013 .
  24. ^ "Política de seguridad de contenido de nivel 3". www.w3.org . Consultado el 12 de enero de 2021 .
  25. ^ "CSP: report-to - HTTP | MDN". developer.mozilla.org . Consultado el 25 de enero de 2021 .
  26. ^ Por ejemplo, en Django, un receptor CSP está disponible en el módulo django-security.
  27. ^ "Flaring The Blue Team - Cuando los confundes, los pierdes". Secjuice . 2018-11-04 . Consultado el 2019-12-27 .
  28. ^ "Modelo de procesamiento CSP". 15 de noviembre de 2012. Consultado el 6 de octubre de 2013 .
  29. ^ "CSP 1.1: Agregar lenguaje no normativo para extensiones". GitHub w3c webappsec . GitHub. 27 de febrero de 2014 . Consultado el 14 de septiembre de 2016 .
  30. ^ "Error 866522: Bookmarklets afectados por CSP". Bugzilla . Mozilla. 28 de abril de 2013 . Consultado el 14 de septiembre de 2016 .
  31. ^ "Subvertir las políticas de CSP para complementos (extensiones) del navegador". 25 de septiembre de 2013. Consultado el 6 de octubre de 2013 .
  32. ^ "Re: [CSP] Solicitud de modificación de la oración sobre marcadores/extensiones en CSP1.1". 2014-08-03 . Consultado el 2015-10-08 .
  33. ^ ab "Grupo de trabajo de seguridad de aplicaciones web". GitHub . Consultado el 13 de noviembre de 2015 .
  34. ^ "Complemento de seguridad Noscript para Firefox". addons.mozilla.org . Consultado el 11 de junio de 2017 .
  35. ^ "La extensión NoScript para Firefox — Sitio oficial". noscript.net . Consultado el 11 de junio de 2017 .
  36. ^ "Panel de control HTTP para Chrome". chrome.google.com . Archivado desde el original el 17 de agosto de 2014.
  37. ^ "Central HTTP para Opera". addons.opera.com . Consultado el 11 de junio de 2017 .

Enlaces externos