Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Leer una CSP y encontrar su hueco

5 tareas · 40 min · Principiante

La política de seguridad de contenido le dice al navegador de dónde puede cargar scripts, estilos, marcos y conexiones una página, y si puede ejecutar código escrito dentro del propio HTML. Bien escrita, convierte muchas inyecciones de script en un fallo sin efecto; mal escrita, es una cabecera larga que no frena nada. Esta sala lee las políticas de cinco páginas de Boletería Jerusalén, separa la que solo aparenta de la que protege y encuentra el hueco de cada una.

0 de 5 · 0%

Objetivo de la sala

La política de seguridad de contenido le dice al navegador de dónde puede cargar scripts, estilos, marcos y conexiones una página, y si puede ejecutar código escrito dentro del propio HTML. Bien escrita, convierte muchas inyecciones de script en un fallo sin efecto; mal escrita, es una cabecera larga que no frena nada. Esta sala lee las políticas de cinco páginas de Boletería Jerusalén, separa la que solo aparenta de la que protege y encuentra el hueco de cada una.

Una CSP llega como cabecera Content-Security-Policy y es una lista de directivas separadas por punto y coma. Cada directiva nombra un tipo de recurso y las fuentes permitidas: script-src para scripts, img-src para imágenes, connect-src para las conexiones que abre el código, object-src para complementos. default-src es el valor de respaldo para las directivas de carga que no aparecen.

Las fuentes más comunes son 'self' (el mismo origen), nombres de host, esquemas como https: y dos mecanismos para autorizar código escrito dentro de la página: un nonce, un valor aleatorio que cambia en cada respuesta y que solo los scripts legítimos llevan, o la huella del script. 'unsafe-inline' autoriza todo el código en línea, el legítimo y el inyectado.

La CSP no arregla la inyección: si la página mete texto del usuario sin escapar, el fallo sigue ahí. Lo que hace es que el navegador se niegue a ejecutar el script inyectado. Por eso se informa como defensa en profundidad, al lado del hallazgo de inyección, no en su lugar.

Responde para continuar

Una página tiene una inyección de script y además una CSP estricta con nonce. ¿Cómo se escribe en el informe?

Ver pista de ayuda

Una defensa que frena el efecto no elimina la causa.

Existe una segunda cabecera, Content-Security-Policy-Report-Only. Con ella el navegador evalúa la política y envía un aviso por cada violación a la dirección de report-uri, pero no bloquea nada. Sirve para probar una política antes de aplicarla. El hallazgo aparece cuando una página sensible se queda en ese modo de forma indefinida: la política puede ser perfecta y no proteger en absoluto.

Abre el laboratorio y lee csp-cabeceras.txt; después mira informes-csp.txt para entender por qué está así.

Responde para continuar

Escribe la ruta de la página cuya política no se aplica, solo se informa.

Ver pista de ayuda

Fíjate en el nombre de la cabecera de cada bloque, no en las directivas.

En la especificación de CSP del W3C hay una regla que desconcierta a quien lee rápido: si la lista de fuentes de scripts contiene un nonce o una huella, el navegador ignora 'unsafe-inline'. Los equipos lo dejan a propósito para que navegadores muy antiguos, que no entienden los nonces, sigan funcionando. En un navegador actual, solo corre el código en línea que lleva el nonce correcto.

Mira la política de /eventos/detalle con esa regla delante.

Responde para continuar

¿Cómo tratas el 'unsafe-inline' de la política de /eventos/detalle?

Ver pista de ayuda

Busca qué más hay en la misma directiva script-src.

Ahora recorre las cinco páginas con una sola pregunta: si alguien consiguiera inyectar un script en línea, sin nonce, ¿lo ejecutaría el navegador? Recuerda tres cosas: la cabecera de solo informe no bloquea, 'unsafe-inline' sin nonce ni huella deja pasar todo el código en línea, y una directiva script-src que no menciona 'unsafe-inline' lo bloquea.

Responde para continuar

¿Cuántas de las cinco páginas bloquearían de verdad un script en línea inyectado sin nonce?

Ver pista de ayuda

Descarta primero la que solo informa y después la que autoriza el código en línea sin nonce.

Una política sin 'unsafe-inline' todavía puede tener hueco por la lista de hosts. Si permite un origen donde cualquiera puede publicar archivos, quien logre inyectar una etiqueta de script en la página solo tiene que apuntarla a un archivo publicado ahí, y el navegador lo cargará porque el host está autorizado. Por eso las guías actuales prefieren nonces o huellas a listas de hosts. También conviene mirar lo que falta: base-uri no hereda de default-src, y sin ella una inyección puede cambiar la base de las rutas relativas de la página.

Responde para continuar

Escribe el host de terceros que la política de /ayuda autoriza y que publica archivos de cualquiera.

Ver pista de ayuda

Cruza la directiva script-src de /ayuda con lo que el cliente contestó en cdn-y-terceros.txt.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad