Acceso a redes privadas: Presentación de las solicitudes preliminares

Titouan Rigoudy
Titouan Rigoudy
Yifan Luo
Yifan Luo

Actualizaciones

  • 7 de julio de 2022: Se actualizó el estado actual y se agregó la definición del espacio de direcciones IP.
  • 27 de abril de 2022: Se actualizó el anuncio sobre el cronograma.
  • 7 de marzo de 2022: Se anunció la reversión después de que se descubrieran problemas en Chrome 98.

Introducción

Chrome dará de baja el acceso directo a los extremos de red privada de los públicos sitios web como parte del Acceso a redes privadas (PNA) especificación.

Chrome comenzará a enviar una solicitud preliminar de CORS antes de cualquier solicitud de red privada para un subrecurso, que solicita para obtener permisos explícitos del servidor de destino. Esta solicitud preliminar tienen un nuevo encabezado, Access-Control-Request-Private-Network: true, y el debe llevar el encabezado correspondiente, Access-Control-Allow-Private-Network: true

El objetivo es proteger a los usuarios de los ataques de falsificación de solicitudes entre sitios (CSRF). orientar a routers y otros dispositivos en redes privadas. Estos ataques han afectado a cientos de miles de usuarios, lo que permite que los atacantes los redireccionen a servidores maliciosos.

Plan de lanzamiento

Chrome lanzará este cambio en dos fases para que los sitios web tengan tiempo para notar el cambio y realizar los ajustes necesarios.

  1. En Chrome 104:

    • Chrome experimenta con el envío de solicitudes preliminares antes de la red privada solicitudes de subrecursos.
    • Las fallas de solicitud preliminar solo muestran advertencias en Herramientas para desarrolladores, sin lo contrario que afectan las solicitudes de red privada.
    • Chrome recopila datos de compatibilidad y se comunica con las principales sitios web.
    • Esperamos que esta función sea ampliamente compatible con los sitios web existentes.
  2. Como muy pronto en Chrome 113, ocurre lo siguiente:

    • Este comenzará solo si los datos de compatibilidad indican que el el cambio es lo suficientemente seguro, y nos contactamos directamente cuando es necesario.
    • Chrome exige que las solicitudes preliminares se completen correctamente; de lo contrario, fallarán. las solicitudes.
    • Una prueba de baja comienza en para permitir que los sitios web afectados por esta fase soliciten extensión de tiempo. La prueba durará al menos 6 meses.

¿Qué es el acceso a redes privadas (PNA)?

Acceso a redes privadas (anteriormente conocido como CORS-RFC1918) restringe la capacidad de los sitios web de enviar solicitudes a servidores privados redes.

Chrome ya implementó parte de la especificación: a partir de Chrome 96, solo los contextos seguros tienen permitido realizar solicitudes de red privada. Consulta nuestra entrada de blog anterior para obtener más detalles.

La especificación también extiende el uso compartido de recursos entre dominios (CORS) protocolo para que los sitios web deban solicitar explícitamente un otorgamiento a los servidores en redes privadas antes de que se les permita enviar solicitudes arbitrarias.

¿Cómo PNA clasifica las direcciones IP e identifica una red privada?

Las direcciones IP se clasifican en tres espacios de direcciones IP: - public - private - local

El espacio de direcciones IP locales contiene direcciones IP que son IPv4 Direcciones de bucle invertido (127.0.0.0/8) definidas en la sección 3.2.1.3 de RFC1122 o direcciones IPv6 de bucle invertido (::1/128) definidas en la sección 2.5.3 de RFC4291.

El espacio de direcciones IP privadas contiene direcciones IP que solo tienen significado dentro de la red actual, incluidas 10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16 definido en RFC1918, las direcciones de vínculo local 169.254.0.0/16 definidas en RFC3927. direcciones IPv6 unicast locales únicas fc00::/7 definidas en RFC4193, Direcciones IPv6 de unidifusión IPv6 de vínculo local fe80::/10 definidas en la sección 2.5.6 de RFC4291 y las direcciones IPv6 asignadas con IPv4 en las que la dirección IPv4 asignada es privada.

El espacio de direcciones IP públicas contiene todas las demás direcciones que no se mencionaron anteriormente.

Una dirección IP local se considera más privada que una dirección IP privada, se considera más privada que una dirección IP pública.

Las solicitudes son privadas cuando una red más disponible envía una solicitud a un
   menos disponible.
Relación entre redes públicas, privadas y locales en la red privada Acceso (CORS-RFC1918)
.

Obtén más información en Feedback solicitados: CORS para redes privadas (RFC1918).

Solicitudes preliminares

Información general

Las solicitudes preliminares son un mecanismo que introduce el estándar de uso compartido de recursos entre dominios (CORS) que se usa solicitar permiso a un sitio web objetivo antes de enviarle una solicitud HTTP que pueden tener efectos secundarios. Esto garantiza que el servidor de destino entienda protocolo CORS y reduce significativamente el riesgo de ataques CSRF.

La solicitud de permiso se envía como una solicitud HTTP OPTIONS con encabezados de solicitud CORS específicos. para describir la próxima solicitud HTTP. La respuesta debe llevar encabezados de respuesta de CORS específicos aceptando explícitamente la próxima solicitud.

Diagrama de secuencias que representa la solicitud preliminar de CORS. Un HTTP OPTIONS
   la solicitud se envía al destino, lo que devuelve un 200 OK. Luego, el CORS
   encabezado de la solicitud y se muestra un encabezado de respuesta CORS

Novedades de Acceso a redes privadas

Se presenta un nuevo par de encabezados de solicitud y respuesta a las solicitudes con verificación previa:

  • Se establece Access-Control-Request-Private-Network: true en todas las solicitudes preliminares de PNA
  • Se debe establecer Access-Control-Allow-Private-Network: true en todas las respuestas preliminares de PNA

Las solicitudes preliminares de PNA se envían para todas las solicitudes de red privada independientemente del método de solicitud y mode. Se envían antes que en las solicitudes en el modo cors, así como en no-cors y en todos los demás modos. Esta es que todas las solicitudes de red privada pueden utilizarse para ataques CSRF, independientemente del modo de solicitud y si el contenido de la respuesta se hace o no disponibles para el iniciador.

Las solicitudes preliminares de PNA también se envían para las solicitudes del mismo origen, si la la dirección IP de destino es más privada que la del iniciador. No se parece a lo normal CORS, en el que las solicitudes de comprobación previa son solo para solicitudes de origen cruzado. Preliminar las solicitudes de solicitudes del mismo origen protegen contra Ataques de revinculación de DNS.

Ejemplos

El comportamiento observable depende del modo de solicitud.

Modo sin CORS

Di https://foo.example/index.html incorporaciones <img src="https://bar.example/cat.gif" alt="dancing cat"/> y bar.example se resuelve en 192.168.1.1, una dirección IP privada según RFC 1918

Chrome primero envía una solicitud preliminar:

HTTP/1.1 OPTIONS /cat.gif
Origin: https://foo.example
Access-Control-Request-Private-Network: true

Para que esta solicitud se procese correctamente, el servidor debe responder con lo siguiente:

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Private-Network: true

Luego, Chrome enviará la solicitud real:

HTTP/1.1 GET /cat.gif
...

A la que el servidor puede responder normalmente.

Modo CORS

Supongamos que https://foo.example/index.html ejecuta el siguiente código:

await fetch('https://bar.example/delete-everything', {
  method: 'PUT',
  credentials: 'include',
})

Una vez más, supongamos que bar.example se resuelve en 192.168.1.1.

Chrome primero envía una solicitud preliminar:

HTTP/1.1 OPTIONS /delete-everything
Origin: https://foo.example
Access-Control-Request-Method: PUT
Access-Control-Request-Credentials: true
Access-Control-Request-Private-Network: true

Para que esta solicitud se procese correctamente, el servidor debe responder con lo siguiente:

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Credentials: true
Access-Control-Allow-Private-Network: true

Luego, Chrome enviará la solicitud real:

HTTP/1.1 PUT /delete-everything
Origin: https://foo.example

A la cual el servidor puede responder según las reglas de CORS habituales:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://foo.example

Cómo saber si tu sitio web se ve afectado

A partir de Chrome 104, si se detecta una solicitud de red privada, se crea la solicitud se enviará antes. Si esta solicitud preliminar falla, se enviará una solicitud, pero aparecerá una advertencia en las Herramientas para desarrolladores de problemas.

Una advertencia de solicitud preliminar con errores en el panel Problemas de Herramientas para desarrolladores. Esto indica lo siguiente:
   garantiza que las solicitudes de red privada solo
se realicen a los recursos que las permiten
   junto con detalles sobre la solicitud específica y los recursos afectados enumerados.

Las solicitudes preliminares afectadas también se pueden ver y diagnosticar en el panel de red:

Una solicitud preliminar con errores en el panel de red de Herramientas para desarrolladores para localhost
   da un estado 501.

Si tu solicitud hubiera activado una solicitud preliminar normal de CORS sin Acceso a redes privadas, pueden aparecer dos solicitudes preliminares de red, y el primero parece haber fallado. Este es un error conocido y puedes ignorarlo sin problemas.

Una solicitud preliminar errónea y falsa antes de una solicitud preliminar exitosa en
   el panel Network de Herramientas para desarrolladores.

Para revisar qué sucede si se aplicó de manera forzosa la solicitud preliminar correcta, puedes pasa el siguiente argumento de línea de comandos, a partir de Chrome 98:

--enable-features=PrivateNetworkAccessRespectPreflightResults

Cualquier solicitud de comprobación previa con errores dará como resultado una recuperación con errores. Esto puede permitirte para probar si tu sitio web funcionaría después del la segunda fase de nuestro plan de implementación. Los errores se pueden diagnosticar de la misma manera que las advertencias con los paneles de Herramientas para desarrolladores mencionados anteriormente.

Qué hacer si su sitio web se ve afectado

Cuando se lance este cambio en Chrome 104, no se espera que dañe sitio web. Sin embargo, te recomendamos que actualices las rutas de las solicitudes afectadas a para garantizar que tu sitio web funcione como se espera.

Hay dos soluciones disponibles para ti:

  1. Controla las solicitudes preliminares del servidor
  2. Inhabilitar verificaciones de PNA con políticas empresariales

Controla las solicitudes preliminares del servidor

Actualiza el servidor de destino de cualquier recuperación afectada para controlar la comprobación previa de PNA solicitudes. Primero, implementa la compatibilidad con las solicitudes preliminares de CORS estándar en las rutas afectadas. Luego, agrega compatibilidad para los dos encabezados de respuesta nuevos.

Cuando tu servidor recibe una solicitud de comprobación previa (una solicitud OPTIONS con CORS) encabezados), el servidor debe comprobar la presencia de un Encabezado Access-Control-Request-Private-Network: true. Si este encabezado es presente en la solicitud, el servidor debe examinar el encabezado Origin y el la ruta de la solicitud junto con cualquier otra información relevante (como Access-Control-Request-Headers) para garantizar que se pueda permitir la solicitud con seguridad. Por lo general, debes permitir el acceso a un único origen bajo tu control.

Una vez que tu servidor decida permitir la solicitud, debería responder 204 No Content (o 200 OK) con los encabezados de CORS necesarios y el nuevo PNA encabezado. Estos encabezados incluyen Access-Control-Allow-Origin y Access-Control-Allow-Private-Network: true y otras que sean necesarias.

Consulta los ejemplos para ver situaciones concretas.

Inhabilitar las verificaciones de Acceso a redes privadas mediante políticas empresariales

Si tienes control de administrador sobre tus usuarios, puedes inhabilitar El acceso a la red realiza verificaciones mediante cualquiera de las siguientes políticas:

Para obtener más información, consulta Comprende la administración de políticas de Chrome.

Envíanos tus comentarios

Si alojas un sitio web en una red privada que espera solicitudes de redes públicas, al equipo de Chrome le interesan tus comentarios y casos de uso. Comunícate con nosotros informando un problema con Chromium en crbug.com y, luego, establece el componente a Blink>SecurityFeature>CORS>PrivateNetworkAccess.

¿Qué sigue?

A continuación, Chrome extenderá las verificaciones de Acceso a redes privadas para Trabajadores web: trabajadores dedicados, trabajadores compartidos y service workers. Nuestro objetivo es pronosticar para que Chrome 107 empiece a mostrar advertencias.

Luego, Chrome extenderá las verificaciones de Acceso a redes privadas para cubrir las navegaciones, incluidos iframes y emergentes. Nuestro objetivo es comenzar la versión 108 de Chrome mostrando advertencias.

En ambos casos, procederemos con cautela con un lanzamiento en etapas similar, con el fin de dar tiempo a los desarrolladores web para ajustar y estimar el riesgo de compatibilidad.

Agradecimientos

Foto de portada de Mark Olsen en Retiro: