CSP
Last updated
Last updated
CSP (Política de Seguridad de Contenido) es un estándar de seguridad creado para ayudar a prevenir XSS y otros tipos de ataques de inyección de contenido. Evitando lo siguiente:
Los scripts externos que no están alojados en el mismo dominio o dominós permitidos por el CSP
Elementos de script en línea, como <script>
JavaScript evaluado, como <img scr='x' onerror='alert(1)'>
Elementos básicos, que podrían romper los scripts cargados desde una ruta relativa
Elementos de objeto, que pueden alojar contenido interactivo, como Flash
La política se implementa por medio de encabezados que son enviados con la respuesta del servidor. A partir de ahí, depende de los navegadores el tomar esa política y bloquear las violaciones a la misma que sean detectadas.
Acedemos al nivel y vemos un input que nos dice que podemos incluir scripts de fuentes externas.
Tenemos dos maneras de ver las políticas del CSP, mirando las cabeceras que vienen en la petición o tirando un script y mirando la consola de error.
Como podemos ver tenemos una serie de dominios permitidos :
Nosotros mismo
pastebin
example.com
code.jquery.com
google-analytics.com
Para resolver el problema tenemos dos caminos, encontrar otra vulnerabilidad que nos permitiera subir un fichero malicioso al servidor en cuestión, por lo que ya estaríamos ejecutando código desde nosotros mismo o lanzar código desde uno de los otros dominios.
Como disponemos del dominio pastebin entre los dominios permitidos vamos a realizar un Paste (https://pastebin.com/9s0yDkAx) y lo vamos a introducir en el input (https://pastebin.com/raw/9s0yDkAx). Ejecutando nuestro código
Subimos el nivel y volvemos a ver que políticas de CSP tiene la página
Como vemos en este caso no tenemos dominios permitidos pero si tenemos dos políticas nuevas:
unsafe-inline. Permite el uso de elementos en linea como <script>, JavaScript urls.
nonce-<base64-value>. Es una lista blanca para scripts en línea específicos que utilizan una fuente criptográfica (número usado una vez). La especificación de nonce hace que un navegador moderno ignore 'unsafe-inline' que aún podría configurarse para los navegadores antiguos sin soporte de nonce.
Con estas dos nuevas políticas si el navegador es antiguo simplemente realizando el ataque simple de XSS seria suficiente.
En un navegador moderno tendríamos que realizar el ataque añadiendo el nonce y su base64 correspondiente.
Obteniendo nuestra ejecución de código