
Herramienta automatizada de descubrimiento de configuraciones erróneas de CORS usando dominios de typosquatting y service workers del navegador para sondear redes internas de objetivos de bug bounty.
of-CORS es el conjunto de herramientas de Truffle Security para identificar y explotar configuraciones incorrectas de CORS en redes internas de objetivos de bug bounty mediante typosquatting.
Puedes leer más aquí https://trufflesecurity.com/blog/of-CORS
of-CORS es una aplicación web Python3 construida sobre Django y Django Rest Framework. Una vez configurada y puesta en marcha, of-CORS registrará automáticamente service workers del navegador en los navegadores de cualquier víctima que visite la aplicación. Estos service workers envían solicitudes HTTP a una lista de dominios internos preconfigurados con la intención de descubrir configuraciones incorrectas de CORS en redes internas. Los resultados de estas solicitudes (ya sean exitosas o no) se envían luego a través de la API de vuelta a la instancia de of-CORS.
Una vez que un service worker ha sido registrado en el navegador de una víctima, un payload de JavaScript redirige el navegador a la página que of-CORS cree que originalmente estaban intentando acceder.
Los resultados recopilados pueden verse posteriormente en un panel minimalista disponible en la aplicación of-CORS.
Se pueden seguir los siguientes pasos para configurar of-CORS en tu propio despliegue.
Debido a la complejidad de poner en marcha of-CORS (especialmente las complicaciones relacionadas con SSL/TLS, DNS y permitir solicitudes comodín a ambos) utilizamos dos proveedores de nube (Heroku y Cloudflare) en la pila de la aplicación y Terraform para automatizar su configuración.
Comienza comprando un dominio que sea probable que un empleado interno de la empresa objetivo visite. Recomendamos comprar un typo-squat de un dominio interno. Hemos descubierto que los errores de copiar y pegar son un buen punto de partida.
Por ejemplo, si la empresa que estás probando usa uberinternal.com para dominios internos, quizás quieras comprar berinternal.com para empezar a recibir tráfico de navegador de empleados internos.
of-CORS usa Cloudflare para recibir y enrutar solicitudes DNS comodín, así como para terminar conexiones SSL/TLS.
Necesitarás una cuenta activa de Cloudflare para que el DNS funcione correctamente con of-CORS. Una vez que tengas una cuenta de Cloudflare, querrás crear una clave de API (lo que puedes hacer en el panel aquí).
La clave de API necesitará tener suficientes privilegios para agregar, eliminar y configurar zonas, así como registros DNS. Esto se puede lograr seleccionando los siguientes permisos en la página de creación de tokens de API:

Una vez que hayas creado un token de API con los permisos correctos, puedes continuar al siguiente paso.
of-CORS usa Heroku para facilitar el despliegue y alojamiento de la aplicación.
Necesitarás una cuenta activa de Heroku para poner en funcionamiento la pila de aplicaciones de of-CORS. Una vez que tengas una cuenta, querrás instalar la herramienta de línea de comandos (CLI) de Heroku. Con la CLI instalada, puedes usarla para iniciar una sesión CLI autenticada con el siguiente comando:
heroku login
Luego puedes confirmar que tu CLI está autenticada correctamente ejecutando el siguiente comando:
heroku whoami
Más documentación sobre la autorización de la CLI de Heroku para usar con Terraform se puede encontrar aquí.
Con las claves de API necesarias para nuestra infraestructura ahora configuradas y listas, podemos pasar a configurar of-CORS para el despliegue. Echa un vistazo al contenido del siguiente archivo de configuración YAML de ejemplo que se puede encontrar en el repositorio:
terraform:
# You must change this to a unique string that is a valid Heroku app name
heroku_app_name: best-of-cors
# Fill this out with your Cloudflare API token
cloudflare_api_token: this-is-my-api-token
hosts:
# This can be an arbitrary string, but must be unique as a direct descendant of hosts
testing:
host_domain: 127.0.0.1:8080
redirect_domain: google.com
targets:
- enable-cors.org
- example.com
Necesitarás crear un nuevo archivo de configuración YAML con este formato para el despliegue.
En la sección terraform, deberás establecer heroku_app_name como un nombre de aplicación compatible con Heroku que sea único para tu cuenta. También deberás agregar tu clave de API de Cloudflare que generaste en la sección anterior bajo la directiva cloudflare_api_token.
La sección hosts es donde definimos los dominios en los que esperamos que of-CORS reciba tráfico y qué hacer cuando lleguen visitantes web. Supongamos que tenemos una empresa a la que estamos atacando y sabemos que tienen dos dominios internos (myinternalcorp1.com y myinternalcorp2.com). Compramos el dominio yinternalcorp1.com con la expectativa de que los empleados lo visiten accidentalmente. En este caso, querríamos configurar hosts de la siguiente manera:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
Aquí host_domain es el dominio donde esperas recibir tráfico (es decir, el dominio que se compró). redirect_domain define el dominio al que las víctimas deben ser redirigidas una vez que se lance un payload. targets especifica los dominios contra los que se lanzarán los payloads cuando una víctima visite of-CORS.
Supongamos que también compramos yinternalcorp2.com y queremos configurar of-CORS para lanzar ataques cuando sea visitado. La sección hosts podría actualizarse de la siguiente manera:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
testing_2:
host_domain: yinternalcorp2.com
redirect_domain: myinternalcorp2.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
Ahora, si una víctima visita accidentalmente yinternalcorp1.com o yinternalcorp2.com, se lanzarán los payloads para enumerar configuraciones incorrectas de CORS en myinternalcorp1.com y myinternalcorp2.com, y el navegador de la víctima será redirigido posteriormente al dominio correcto.
No será necesario instalar Terraform, Heroku, Python con la opción de Docker. Simplemente ejecuta este comando con la ruta correcta para tu archivo yaml:
docker run -v $PWD/config.yml:/config.yml -it --rm trufflesecurity/of-cors