stringtranslate.com

Política de seguridad de contenido

La Política de seguridad de contenido ( CSP ) es un estándar de seguridad informática introducido para evitar 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 confiable . [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] CSP proporciona un método estándar para que los propietarios de sitios web declaren los orígenes aprobados del contenido que los navegadores deben poder cargar en ese sitio web; los tipos cubiertos son JavaScript , CSS , marcos HTML , trabajadores web , fuentes , imágenes y objetos incrustables como Java. subprogramas , ActiveX , archivos de audio y vídeo y otras funciones 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 se publicaron versiones adicionales (Nivel 2) en 2014. A partir de 2023 , el borrador del Nivel 3 se está desarrollando y las nuevas características están siendo adoptadas rápidamente por el navegadores web. [6]

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

Un sitio web puede declarar múltiples encabezados CSP, combinando también encabezados de cumplimiento y de solo informe. El navegador procesará cada encabezado por separado.

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

Internet Explorer 10 e Internet Explorer 11 también admiten CSP, pero solo con la directiva sandbox, utilizando el X-Content-Security-Policyencabezado experimental. [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, el soporte del marco web solo es necesario si el contenido del 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 puede entregarse desde niveles de aplicación web superiores a la aplicación, por ejemplo, en un equilibrador de carga o un servidor web .nonce

Bypasses

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

Modo de operación

Mapeo entre funciones HTML5 y JavaScript y controles de política de seguridad de contenido

Si el Content-Security-Policyencabezado está presente en la respuesta del servidor, un cliente compatible aplica la política declarativa de lista permitida. Un objetivo de ejemplo 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 desactivadas de forma predeterminada:

Si bien usar CSP en una nueva aplicación puede ser bastante sencillo, especialmente con un marco 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 fuente 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. ^ ab Los bloques y en línea confiables se pueden incluir individualmente en la lista de permitidos en el CSP usando declaraciones o .<script><style>noncehash
  3. ^ Este comportamiento se puede desactivar globalmente mediante una 'unsafe-eval'declaración especial.
  4. ^ Por ejemplo, AngularJS requiere solo un indicador de inicialización para cambiar 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 activará 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 ser capturados por la propia API de la aplicación [26] o por receptores públicos de informes CSP. [ cita necesaria ]

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

Exención de complementos y extensiones del navegador

Según el modelo de procesamiento CSP (1.0) original (2012-2013), [28] CSP no debe 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 scripts en sitios web, independientemente del origen de ese script, 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 CSP 1.1 [29] ) con la siguiente redacción. Tenga en cuenta el uso de la palabra "puede" en lugar de la anterior redacción absoluta "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 navegadores utilizaban la redacción absoluta de "debería" para solicitar/exigir el cumplimiento de la política e instalar cambios en los navegadores populares (Firefox, Chrome, Safari) para respaldarla. Esto fue particularmente polémico cuando sitios como Twitter y GitHub comenzaron a utilizar políticas estrictas de CSP, que "rompieron" el uso de Bookmarklets. [30]

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

Medidas complementarias

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

Ver 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 borrador". 2016-09-13 . 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 contenidos de Mozilla". Archivado desde el original el 18 de marzo de 2015 . Consultado el 29 de junio de 2011 . Restricciones de contenido: una forma para que los sitios web le indiquen al navegador que aumente su seguridad en las páginas donde el sitio sabe que el contenido fue enviado por el usuario y, por lo tanto, potencialmente peligroso.
  5. ^ "Política de seguridad de contenidos 1.0". W3C . Consultado el 13 de noviembre de 2015 .
  6. ^ "Política de seguridad de contenido 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. ^ "La Política de seguridad de contenido 1.0 llega a Firefox Aurora". Fundación Mozilla. 29 de mayo de 2013 . Consultado el 16 de junio de 2013 .
  9. ^ "Lanzamiento rápido/Calendario". Fundación Mozilla. 29 de mayo de 2013 . Consultado el 16 de junio de 2013 .
  10. ^ "Error 96765: implementar el encabezado" Política de seguridad de contenido "". Kit web. 31 de octubre de 2012 . Consultado el 7 de agosto de 2015 .
  11. ^ "Política de seguridad de contenidos (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. ^ "Presentación de la política de seguridad de contenidos". Fundación Mozilla . Consultado el 22 de febrero de 2013 .
  14. ^ "Elemento HTML META". Política de seguridad de contenido nivel 2 . W3C . Consultado el 14 de noviembre de 2015 .
  15. ^ "Defensa en profundidad: bloqueo de combinaciones 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-seguridad". GitHub . 21 de noviembre de 2022.
  18. ^ "Política de seguridad de contenidos". GitHub. 19 de abril de 2013.
  19. ^ "CSP 2015". Rompecabezas XSS. 23 de noviembre de 2015. Archivado desde el original el 20 de diciembre de 2015 . Consultado el 12 de diciembre de 2015 .
  20. ^ Lekies, Sebastián. «Recolección de derivaciones 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: evitar las mitigaciones XSS mediante gadgets de secuencias de comandos por Sebastian Lekies , consultado el 5 de junio de 2017
  23. ^ Oeste, Mike (15 de junio de 2012). "Introducción a la política de seguridad de contenidos". Rocas HTML5 . Consultado el 22 de febrero de 2013 .
  24. ^ "Política de seguridad de contenido nivel 3". www.w3.org . Consultado el 12 de enero de 2021 .
  25. ^ "CSP: informe a - HTTP | MDN". desarrollador.mozilla.org . Consultado el 25 de enero de 2021 .
  26. ^ Por ejemplo, en Django hay un receptor CSP disponible en el módulo de seguridad de Django.
  27. ^ "Encendiendo al equipo azul: cuando los confundes, los pierdes". Secjugo . 2018-11-04 . Consultado el 27 de diciembre de 2019 .
  28. ^ "Modelo de procesamiento CSP". 2012-11-15 . 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: marcadores 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 para modificar la frase de bookmarklet/extensiones en CSP1.1". 2014-08-03 . Consultado el 8 de octubre de 2015 .
  33. ^ ab "Grupo de trabajo sobre seguridad de aplicaciones web". GitHub . Consultado el 13 de noviembre de 2015 .
  34. ^ "Complemento de la suite de seguridad Noscript para Firefox". addons.mozilla.org . Consultado el 11 de junio de 2017 .
  35. ^ "La extensión NoScript Firefox - Sitio oficial". noscript.net . Consultado el 11 de junio de 2017 .
  36. ^ "Centralita HTTP para Chrome". chrome.google.com . Archivado desde el original el 17 de agosto de 2014.
  37. ^ "Centralita HTTP para Opera". addons.opera.com . Consultado el 11 de junio de 2017 .

enlaces externos