¿Qué es la cabecera Cross-Origin-Opener-Policy y por qué es importante?
La cabecera Cross-Origin-Opener-Policy, normalmente escrita como COOP, es una cabecera de respuesta que controla si su página comparte una relación de ventana con páginas de otros orígenes. Ajustada a same-origin, aísla su documento en su propio grupo de contextos de navegación, de modo que una página de otro origen que abra la suya, o que usted abra, no pueda conservar ninguna referencia scriptable hacia su ventana. Esto cierra una clase de ataques cross-origin conocidos como XS-Leaks y ataques de canal lateral, y es además el ajuste que desbloquea ciertas funciones potentes del navegador.
¿Por qué existe la cabecera Cross-Origin-Opener-Policy?
COOP existe porque abrir una ventana crea un vínculo que puede ser objeto de abuso. Cuando una página abre otra con window.open(), o una página abre la suya, el navegador puede conservar una referencia entre las dos ventanas mediante la propiedad window.opener. Si esas dos páginas proceden de orígenes distintos, esa referencia se convierte en una vía por la que una página cross-origin puede sondear la suya.
Los ataques que esto habilita son sutiles. No roban sus datos directamente, sino que los infieren mediante canales laterales, temporización y estado de navegador compartido, en una familia de técnicas que la comunidad de seguridad denomina XS-Leaks. Según la documentación de Mozilla, COOP se introdujo precisamente para que un sitio pueda garantizar que su documento de nivel superior no comparta un grupo de contextos de navegación con documentos cross-origin, y eso es exactamente lo que rompe esa referencia y cierra la vía.
¿Qué hace realmente la cabecera Cross-Origin-Opener-Policy?
COOP decide si su documento y las páginas con las que interactúa pertenecen al mismo grupo de contextos de navegación, el concepto interno del navegador que determina si dos ventanas pueden scriptarse entre sí. Cuando la ajusta de forma estricta, su ventana pasa a su propio grupo, y cualquier ventana cross-origin pierde su referencia hacia la suya.
La cabecera tiene un pequeño conjunto de valores. El valor predeterminado, unsafe-none, no aplica aislamiento y deja que su documento comparta un grupo de contextos de navegación con páginas cross-origin. El valor estricto, same-origin, aísla su documento de modo que solo las páginas del mismo origen que también ajusten same-origin puedan permanecer en el mismo grupo. Un valor intermedio, same-origin-allow-popups, mantiene ese aislamiento pero permite que los popups que usted abre deliberadamente funcionen con normalidad, lo que es la opción práctica para sitios que dependen de flujos mediante popup como el pago o el inicio de sesión único. Cuando una ventana cross-origin se abre bajo same-origin, su window.opener pasa a null, de modo que la referencia sencillamente no existe.
¿Qué ocurre si no la configura?
Sin COOP el valor predeterminado es unsafe-none, lo que significa que no hay aislamiento y la referencia de ventana permanece abierta. Una página cross-origin que abra la suya, o que usted abra, puede conservar un asidero sobre su ventana y usarlo como punto de apoyo para las técnicas de canal lateral descritas arriba.
Se trata de una brecha silenciosa, no ruidosa. Nada en su sitio parece roto, y la mayoría de los visitantes nunca la activarán, y precisamente por eso suele quedar sin atender. Pero para un sitio que trata algo sensible, un inicio de sesión, un portal de pacientes, un paso de pago, dejar abierta la relación de ventana es una exposición evitable, y es una que los escáneres de seguridad y las auditorías señalan cada vez más como una cabecera ausente.
¿Cómo se implementa la cabecera Cross-Origin-Opener-Policy?
Configura COOP como una única cabecera de respuesta HTTP. Para la mayoría de los sitios el valor de partida correcto es Cross-Origin-Opener-Policy: same-origin-allow-popups, que le da aislamiento a la vez que preserva los flujos mediante popup; un sitio sin tales dependencias puede pasar al same-origin más estricto. Puede añadirse en el servidor web, en la capa de aplicación, o en el borde en un CDN o una capa de seguridad situada delante del sitio.
La única recomendación firme es: pruebe antes de imponer. COOP admite un modo report-only, enviado como Cross-Origin-Opener-Policy-Report-Only, que utiliza la Reporting API del navegador para indicarle qué rompería la política sin romperlo realmente. Ejecutar primero en report-only, vigilar los flujos de popup o de ventana que se verían afectados, y solo entonces cambiar a la cabecera impuesta es la vía segura, sobre todo en un sitio con integraciones de terceros que usted no construyó.
¿Qué cambia en su sitio una vez activada?
Para la mayoría de los sitios, nada visible. Las cargas de página ordinarias, la navegación y el comportamiento del mismo origen no se ven afectados, y el aislamiento ocurre de forma invisible a nivel del navegador. La ganancia que obtiene es que las ventanas cross-origin ya no pueden conservar una referencia hacia la suya, lo que elimina la superficie de ataque sin tocar la experiencia de usuario.
El punto que conviene revisar es cualquier flujo que abra deliberadamente otro origen o sea abierto por él. Un proveedor de pagos, un proveedor de identidad, o una herramienta incrustada que se comunica mediante referencias de ventana puede verse afectada por un valor same-origin estricto, y precisamente por eso existe same-origin-allow-popups y por eso importa la prueba en report-only. Hay también una ventaja que vale la pena conocer: ajustar same-origin, junto con la cabecera afín Cross-Origin-Embedder-Policy, coloca su documento en un estado cross-origin isolated que algunas funciones potentes del navegador requieren, como SharedArrayBuffer y los temporizadores de alta resolución.
¿Qué debería hacer a continuación?
Empiece por comprobar si su sitio envía siquiera una cabecera Cross-Origin-Opener-Policy, ya que la ausencia predeterminada de cabecera significa que no hay aislamiento. Si falta, la vía de bajo riesgo es añadirla en modo report-only, confirmar que nada en sus flujos de popup o de terceros se rompe, y luego imponer same-origin-allow-popups como valor predeterminado sensato, o same-origin si su sitio no tiene dependencias de popups.
Si desea que esto se compruebe y configure correctamente en todo su sitio en lugar de pieza por pieza, EuroraCloud puede revisar sus cabeceras de seguridad actuales y mostrarle qué resuelve nuestra plataforma. Vea qué resuelve EuroraCloud
Conclusión: ¿qué debería retener sobre la cabecera Cross-Origin-Opener-Policy?
COOP es una cabecera silenciosa pero valiosa: aísla su ventana de navegador de las páginas cross-origin, cerrando una clase de ataques de canal lateral y mediante popups que no dejan ninguna señal visible hasta que un escáner o un atacante los encuentra. Para la mayoría de los sitios la vía segura es probar en modo report-only y luego imponer same-origin-allow-popups, que protege la ventana a la vez que preserva los flujos de popup legítimos. El paso más útil es comprobar si su sitio envía la cabecera hoy, porque mientras no lo haga, el valor predeterminado es la ausencia total de aislamiento.