Evite las fugas de información CSRF, XSSI y de origen cruzado.


Actualizado

Aparece en:
Seguro y a salvo

¿Por qué debería preocuparse por aislar sus recursos web?

Muchas aplicaciones web son vulnerables a ataques de origen cruzado como falsificación de solicitud entre sitios (CSRF), inclusión de secuencias de comandos entre sitios (XSSI), ataques de tiempo, fugas de información de origen cruzado o canal¿Qué es un canal?Es un punto de contacto entre la marca y sus públicos en la web. Pueden ser blogs, vídeos, comentarios en artículo, imágenes, contactos en redes sociales o cualquier otra forma de interacción de la web 2.0. más lateral de ejecución especulativa (Espectro) ataques.

Obtener metadatos Los encabezadosConcepto de Encabezados¿Qué son los Encabezados?Los Encabezados, además conocidos como headers en inglés, son una parte fundamental del diseño de cualquier web, dado que consiste en la parte principal que se ve de esta al acceder, la parte de arriba de cualquier página. El lugar más visible y al que todos los usuarios que visitan un lugar de Internet acceden cuando entran en él, pudiendo tener así una imagen rápida más de solicitud le permiten implementar un sólido mecanismo de defensa en profundidad, una política de aislamiento de recursos, para proteger su aplicación contra estos ataques comunes de origen cruzado.

Es común que los recursos expuestos por una determinada aplicación web solo los cargue la propia aplicación y no otros sitios web. En tales casos, la implementación de una política de aislamiento de recursos basada en los encabezados de solicitud de obtención de metadatosLos metadatos son datos estructurados que contienen información sobre una fuente como, por ejemplo, un libro o un documento web. Gracias a los metadatos resulta mucho más fácil hallar la fuente de información dado que contienen datos sobre el título, el autor, la fecha de publicación, la descripción, etc. Se utilizan en librerías pero además para la estadística y la ingeniería de software. Metadatos en WWW Los metadatos se utilizan más requiere poco esfuerzo y, al mismo tiempo, protege la aplicación de ataques entre sitios.

Compatibilidad del navegadorUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los más

Los encabezados de solicitud de obtención de metadatos se admiten a partir de Chrome 76 y en otros navegadoresConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet más basados ​​en Chromium, y están en desarrollo en Firefox. Ver Compatibilidad del navegador para obtener información actualizada sobre compatibilidad con el navegador.

Antecedentes

Muchos ataques entre sitios son posibles porque la web está abierta de forma predeterminada y su servidorLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en más de aplicaciones no puede protegerse fácilmente de la comunicación que se origina en aplicaciones externas. Un ataque típico de origen cruzado es la falsificación de solicitudes entre sitios (CSRF), en la que un atacante atrae a un usuario a un sitio que controla y luego envía un formulario al servidor en el que el usuario está conectado. Dado que el servidor no puede saber si la solicitud se originó en otro dominioUn dominio es una sección de Internet con direcciones que comparten un sufijo común o están bajo el control de una organización o individuo en particular. Está organizado jerárquicamente. Tanto los objetos físicos como los virtuales pueden ser direccionados con el nombre de dominio. Estos objetos pueden ser webs, ordenadores en red o servicios, como impresoras, faxes o servidores de correo. Cada objeto está referenciado por una dirección IP única, más (entre sitios) y el navegador adjunta automáticamente cookies a las solicitudes entre sitios, el servidor ejecutará la acción solicitada por el atacante en nombre del usuario.

Otros ataques entre sitios, como la inclusión de scriptsConcepto de Scripts¿Qué son los Scripts?Los Scripts son fragmentos de código que se usan para dar forma a herramientas tanto en Internet como en el sector de la informática en general. Son una parte crucial del software, puesto que se trata exactamente del código que conforma a una aplicación en su totalidad o a una de sus funciones, como además el que puedes hallar explorando cómo está hecha una web.Desde más entre sitios (XSSI) o las fugas de información de origen cruzado, son de naturaleza similar a CSRF y dependen de la carga de recursos de una aplicación de la víctima en un documento controlado por el atacante y de la filtración de información sobre las aplicaciones de la víctima. Dado que las aplicaciones no pueden distinguir fácilmente las solicitudes confiables de las no confiables, no pueden descartar el tráfico malicioso entre sitios.

Gotchas!

Aparte de los ataques a los recursos descritos anteriormente, referencias de ventana también puede provocar fugas de información de origen cruzado y ataques Spectre. Puede prevenirlos configurando el Cross-Origin-Opener-Policy encabezado de respuesta a same-origin.

Presentación de Fetch Metadata

Los encabezados de solicitud de Fetch Metadata son una nueva característica de seguridad de la plataforma web diseñada para ayudar a los servidores a defenderse contra ataques de origen cruzado. Al proporcionar información sobre el contexto de una solicitud HTTPEl HTTP (Hyper Text Transfer Protocol) es un protocolo que se usa para transmitir datos en redes. HTTP es un estándar técnico generalmente aceptado que establece cómo un cliente web se comunica con un servidor para que los datos solicitados por el cliente puedan ser cargados y mostrados. Información general Junto con el URL y el HTML, HTTP es uno de los conceptos más importantes de Internet (www). Fue desarrollado más en un conjunto de Sec-Fetch-* encabezados, permiten al servidor que responde aplicar políticas de seguridad antes de procesar la solicitud. Esto permite a los desarrolladores decidir si aceptan o rechazan una solicitud en función de la forma en que se realizó y el contexto en el que se utilizará, lo que permite responder solo a solicitudes legítimas realizadas por su propia aplicación.

Mismo origen

Las solicitudes que se originen en sitios atendidos por su propio servidor (mismo origen) seguirán funcionando.

same-origin-request-1058575

Cross-site

El servidor puede rechazar solicitudes maliciosas entre sitios debido al contexto adicional en la solicitud HTTP proporcionada por Sec-Fetch-* encabezados.

cross-origin-request-7423869

Sec-Fetch-Site

Sec-Fetch-Site le dice al servidor qué sitio envió la solicitud. El navegador establece este valor en uno de los siguientes:

  • same-origin, si la solicitud la realizó su propia aplicación (p. ej. site.example)
  • same-site, si la solicitud fue realizada por un subdominioConcepto de Subdominio¿Qué es un Subdominio?Un Subdominio es una extensión que se añade al nombre de un dominio para organizar las distintos secciones que pueda tener su web, aún cuando funcionando de forma totalmente independiente a esta. Por lo general, generalmente son palabras que lo preceden y que se separan de él utilizando un punto para remarcar tanto su independencia como la idea de que son algo desligado del contenido más de su sitio (p. ej. bar.site.example)
  • none, si la solicitud fue causada explícitamente por la interacción de un usuario con el agente de usuarioEl agente de usuario o agente es el identificador o nombre con el que un programa inicia sesión en el servidor web para solicitar un documento. El nombre se pasa por medio de del encabezado HTTP. Los programas de software y los robots de los motores de búsqueda pueden identificarse con este nombre. El agente de usuario permite ver precisamente cuándo un robot de motor de búsqueda visitó el portal más (por ejemplo, al hacer clic en un marcador)
  • cross-site, si la solicitud fue enviada por otro sitio web (p. ej. evil.example)

Sec-Fetch-Mode

Sec-Fetch-Mode indica el modo de la solicitud. Esto corresponde aproximadamente al tipo de solicitud y le permite distinguir las cargas de recursos de las solicitudes de navegación. Por ejemplo, un destino de navigate indica una solicitud de navegación de nivel superior mientras no-cors indica solicitudes de recursos como cargar una imagen.

Sec-Fetch-Dest

Sec-Fetch-Dest expone una solicitud destino (por ejemplo, si un script o un img provocó que el navegador solicitara un recurso).

La información adicional que brindan estos encabezados de solicitud es bastante simple, pero el contexto adicional le permite construir una lógica de seguridad poderosa en el lado del servidor, también conocida como Política de Aislamiento de Recursos, con solo unas pocas líneas de código.

Implementar una política de aislamiento de recursos

Una política de aislamiento de recursos evita que sus recursos sean solicitados por sitios web externos. El bloqueo de dicho tráfico mitiga las vulnerabilidades web comunes entre sitios, como CSRF, XSSI, ataques de tiempo y fugas de información de origen cruzado. Esta política se puede habilitar para todos los puntos finales de su aplicación y permitirá todas las solicitudes de recursos provenientes de su propia aplicación, así como navegaciones directas (a través de un HTTP GET solicitud). Los puntos finales que se supone deben cargarse en un contexto entre sitios (por ejemplo, puntos finales cargados mediante CORS) pueden excluirse de esta lógica.

Paso 1: Permitir solicitudes de navegadores que no envían Fetch Metadata

Dado que no todos los navegadores admiten la obtención de metadatos, debe permitir solicitudes que no se establezcan Sec-Fetch-* encabezados comprobando la presencia de sec-fetch-site.

Todos los siguientes ejemplos son código python.

if not req['sec-fetch-site']:
return True

Precaución:
Dado que Fetch Metadata solo es compatible con los navegadores modernos, debe usarse como un protección de defensa en profundidad y no como su principal línea de defensa.

Paso 2: Permitir solicitudes iniciadas en el mismo sitio y en el navegador

Cualquier solicitud que no se origine en un contexto de origen cruzado (como evil.example) será permitido. En particular, se trata de solicitudes que:

  • Procede de su propia aplicación (por ejemplo, una solicitud del mismo origen donde site.example peticiones site.example/foo.json siempre se permitirá).
  • Procede de tus subdominios.
  • Son causados ​​explícitamente por la interacción de un usuario con el agente de usuario (por ejemplo, navegación directa o al hacer clic en un marcador, etc.).

if req['sec-fetch-site'] in ('same-origin', 'same-site', 'none'):
return True

Gotchas!

En caso de que sus subdominios no sean completamente confiables, puede hacer que la política sea más estricta bloqueando las solicitudes de los subdominios eliminando el same-site valor.

Paso 3: Permita la navegación e iframing de nivel superior simples

Para asegurarse de que su sitio aún pueda estar vinculado desde otros sitios, debe permitir simples (HTTP GET) navegación de nivel superior.

if req['sec-fetch-mode'] == 'navigate' and req.method == 'GET'
and req['sec-fetch-dest'] not in ('object', 'embed'):
return True

Gotchas!

La lógica anterior protege los puntos finales de su aplicación para que no sean utilizados como recursos por otros sitios web, pero permitirá la navegación e incrustación de nivel superior (por ejemplo, cargar en un <iframeConcepto de Iframe¿Qué es un Iframe?Un Iframe es un documento de una web que se inserta en otra página web. Consiste en un elemento que puede albergar cualquier tipo de contenido en su interior y que ayuda, entre otras cosas, a ampliar el mensaje que se ofrece con fuentes externas o con material complementario que pueda resultar de interés para el usuario que entra.Este elemento web se usa especialmente al más>). Para mejorar aún más la seguridad, puede usar los encabezados de Obtener metadatos para restringir la navegación entre sitios a solo un conjunto permitido de páginas.

Paso 4: inhabilite los puntos finales que están destinados a brindar tráfico entre sitios (opcional)

En algunos casos, su aplicación puede proporcionar recursos que deben cargarse entre sitios. Estos recursos deben estar exentos por ruta o por punto final. Ejemplos de estos puntos finales son:

  • Endpoints destinados a ser accedidos en origen cruzado: si su aplicación está proporcionando endpoints que son CORS habilitado, debe excluirlos explícitamente del aislamiento de recursos para asegurarse de que las solicitudes entre sitios a estos puntos finales aún sean posibles.
  • Recursos públicos (por ejemplo, imágenes, estilos, etc.): cualquier recurso público y no autenticado que deba ser de origen cruzado cargable desde otros sitios también puede quedar exento.

if req.path in ('/my_CORS_endpoint', '/favicon.png'):
return True

Precaución:
Antes de excluir partes de su aplicación de estas restricciones de seguridad, asegúrese de que sean estáticas y no contengan información confidencial del usuario.

Paso 5: rechace todas las demás solicitudes que sean entre sitios y no de navegación

Cualquier otro cross-site La solicitud será rechazada por esta Política de aislamiento de recursos y, por lo tanto, protegerá su aplicación de ataques comunes entre sitios.

Gotchas!

De forma predeterminada, las solicitudes que infrinjan su política deben rechazarse con una HTTP 403 respuesta. Pero, dependiendo de su caso de uso, también puede considerar otras acciones, como:

  • Solo registrando violaciones. Esto es especialmente útil cuando se prueba la compatibilidad de la política y se encuentran puntos finales que pueden necesitar ser excluidos.
  • Modificar la solicitud. En ciertos escenarios, considere realizar otras acciones como redirigir a su página de destinoConcepto de Página de Destino¿Qué es una Página de Destino?Una Página de destino es aquella web a la que accede un usuario al hacer un clic en un anuncio de cualquier tipo o inclusive al clicar en cualquiera de los resultados de su búsqueda. Una página de bienvenida, orientada a la compra, a informar o inclusive al registro, que puede tener mil usos o inclusive ser una página de conversión.Por más y eliminar las credenciales de autenticación (por ejemplo, cookies). Sin embargo, tenga en cuenta que esto podría debilitar las protecciones de una política basada en Obtener metadatos.

Ejemplo: El siguiente código demuestra una implementación completa de una política sólida de aislamiento de recursos en el servidor o como un softwareConcepto de Software¿Qué es el Software y cuál es su función?Un Software es la parte lógica, o más bien el soporte lógico, de cualquier sistema de tipo informático. Sea un PC, un teléfono teléfono celular o inclusive una tablet, es todo aquel programa que se ejecuta en él gracias a la coordinación de la parte física, es decir, el hardware, para llevar adelante alguna tarea concretamente o un recopilatorio de más intermedio para denegar solicitudes de recursos entre sitios potencialmente maliciosos, al tiempo que permite solicitudes de navegación simples:


def allow_request(req):
if not req['sec-fetch-site']:
return True


if req['sec-fetch-site'] in ('same-origin', 'same-site', 'none'):
return True


if req['sec-fetch-mode'] == 'navigate' and req.method == 'GET'
and req['sec-fetch-dest'] not in ('object', 'embed'):
return True


if req.path in ('/my_CORS_endpoint', '/favicon.png'):
return True


return False

Implementar una política de aislamiento de recursos

  1. Instale un módulo como el fragmento de código de arriba para registrar y monitorear cómo se comporta su sitio y asegurarse de que las restricciones no afecten al tráfico legítimo.
  2. Solucione posibles infracciones eximiendo los puntos finales legítimos de origen cruzado.
  3. Haga cumplir la política descartando las solicitudes que no cumplan.

Identificar y corregir infracciones de políticas

Se recomienda que pruebe su política sin efectos secundarios habilitándola primero en modo de informes en su código del lado del servidor. Alternativamente, puede implementar esta lógica en middleware o en un proxy inverso que registra cualquier infracción que su política pueda producir cuando se aplica al tráfico de producción.

A partir de nuestra experiencia en la implementación de una Política de aislamiento de recursos de búsqueda de metadatos en Google, la mayoría de las aplicaciones son compatibles de forma predeterminada con dicha política y rara vez requieren la exención de extremos para permitir el tráfico entre sitios.

Aplicación de una política de aislamiento de recursos

Una vez que haya verificado que su política no afecta el tráfico de producción legítimo, estará listo para hacer cumplir las restricciones, garantizando que otros sitios no podrán solicitar sus recursos y protegiendo a sus usuarios de los ataques entre sitios.

Precaución:
Asegúrese de rechazar las solicitudes no válidas antes de ejecutar comprobaciones de autenticación o cualquier otro procesamiento de la solicitud para evitar revelar información confidencial de tiempo.

Otras lecturas