Origen Arbitrario

Explotar una vulnerabilidad de origen arbitrario es relativamente sencillo comparado con otras vulnerabilidades CORS ya que la aplicación acepta peticiones cross-origin de cualquier dominio. Por ejemplo, debajo está el código vulnerable de http://corssop.thm/arbitrary.php:

php
if (isset($_SERVER['HTTP_ORIGIN'])){
    header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']."");
    header('Access-Control-Allow-Credentials: true');
}

El código arriba implementa una política CORS débil ya que hace echo del header Origin desde el que se hace la petición sin validación. Un atacante puede usar un origen como http://evilcors.thm y el servidor le hará echo.

Arbitrary Origin

Para explotar el código vulnerable ve a http://exploit.evilcors.thm/. El servidor exploit tiene un código JavaScript que hace peticiones cross-origin a la aplicación objetivo. El ejemplo de exploit code puede verse en http://corssop.thm/exploits/arbitrary.html. El código exploit usa XMLHttpRequest para mandar peticiones a la aplicación vulnerable y procesar la respuesta. La respuesta procesada será mandada al servidor web con el archivo receiver.php.

En el código exploit, cambia la URL objetivo a http://corssop.thm/arbitrary.php.

Arbitrary Origin

Cambia también la URL del servidor web que recibirá la información exfiltrada.

Arbitrary Origin

Una vez hechas las actualizaciones, dale a Save. Para verificar que el exploit funciona, haz click en el botón View exploit. Esto abrirá una nueva pestaña conteniendo el código exploit guardado en el servidor.

En la nueva pestaña, abre las herramientas de desarrollador y ve a Network. Debería haber dos conexiones XHR. La primera petición se manda al sitio objetivo, mientras que la segunda es mandada al servidor exfiltrante.

Arbitrary Origin

Ahora puedes hacer click en Send to victim.

Para comprobar que la víctima ha ejecutado el exploit, comprueba los logs del servidor haciendo click en el botón Logs en la barra de navegación. Los logs deberían tener una petición de la IP 10.10.39.12, ya que esta es la IP de la víctima.

Arbitrary Origin

En tu servidor de exfiltrado, deberías recibir una petición POST de la víctima. Esta petición POST contiene la respuesta completa de la página de la primera petición XHR en nuestro exploit.

Arbitrary Origin

Abre data.txt en /var/www/html.

Arbitrary Origin

En el mundo real si la respuesta del objetivo incluye información sensible como información de usuario, tokens, y tokens API, tu JavaScript puede capturar y mandar esto a un servidor bajo tu control.

Arbitrary Origin