
Ferramenta automatizada de descoberta de configurações incorretas de CORS usando domínios de typosquatting e service workers do navegador para sondar redes internas de alvos de bug bounty.
of-CORS é um conjunto de ferramentas da Truffle Security para identificar e explorar configurações incorretas de CORS em redes internas de alvos de bug bounty usando typosquatting.
Você pode ler mais aqui https://trufflesecurity.com/blog/of-CORS
of-CORS é uma aplicação web Python3 construída sobre Django e Django Rest Framework. Uma vez configurada, of-CORS registra automaticamente service workers de navegador nos navegadores de qualquer vítima que visite a aplicação. Esses service workers enviam requisições HTTP para uma lista de domínios internos pré-configurados com o objetivo de descobrir configurações incorretas de CORS em redes internas. Os resultados dessas requisições (bem-sucedidas ou não) são então enviados via API de volta para a instância do of-CORS.
Assim que um service worker é registrado no navegador de uma vítima, um payload JavaScript redireciona o navegador para a página que of-CORS acredita que a vítima estava tentando acessar originalmente.
Os resultados coletados podem ser visualizados em um painel minimalista disponível na aplicação of-CORS.
Os passos a seguir podem ser seguidos para configurar o of-CORS em sua própria implantação.
Devido à complexidade de configurar o of-CORS (principalmente complicações relacionadas a SSL/TLS, DNS e à permissão de requisições curinga para ambos), utilizamos dois provedores de nuvem (Heroku e Cloudflare) na pilha da aplicação e Terraform para automatizar a configuração.
Comece comprando um domínio que um funcionário interno da empresa alvo provavelmente acessará. Recomendamos comprar um typo-squat de um domínio interno. Descobrimos que erros de copiar e colar são um bom ponto de partida.
Por exemplo, se a empresa que você está testando usa uberinternal.com para domínios internos, você pode querer comprar berinternal.com para começar a receber tráfego de navegador de funcionários internos.
of-CORS usa Cloudflare para receber e rotear requisições DNS curinga, bem como para terminar conexões SSL/TLS.
Você precisará de uma conta ativa no Cloudflare para que o DNS funcione corretamente com o of-CORS. Depois de ter uma conta no Cloudflare, você vai querer criar uma chave de API (o que pode ser feito no painel aqui).
A chave de API precisará ter privilégios suficientes para adicionar, excluir e configurar zonas, bem como registros DNS. Isso pode ser alcançado selecionando as seguintes permissões na página de criação de token de API:

Depois de criar um token de API com as permissões corretas, você pode prosseguir para o próximo passo.
of-CORS usa Heroku para implantação e hospedagem fáceis da aplicação.
Você precisará de uma conta ativa no Heroku para colocar a pilha da aplicação of-CORS em funcionamento. Depois de ter uma conta, instale a ferramenta de linha de comando (CLI) do Heroku. Com a CLI instalada, você pode usá-la para iniciar uma sessão CLI autenticada com o seguinte comando:
heroku login
Você pode então confirmar que sua CLI está autenticada com sucesso executando o seguinte comando:
heroku whoami
Documentação adicional sobre autorização da CLI do Heroku para uso com Terraform pode ser encontrada aqui.
Com as chaves de API necessárias para nossa infraestrutura agora configuradas e prontas, podemos prosseguir para configurar o of-CORS para implantação. Dê uma olhada no conteúdo do seguinte arquivo de configuração YAML de exemplo que pode ser encontrado no repositório:
terraform:
# Você deve alterar isso para uma string única que seja um nome de aplicativo Heroku válido
heroku_app_name: best-of-cors
# Preencha com seu token de API do Cloudflare
cloudflare_api_token: this-is-my-api-token
hosts:
# Isso pode ser uma string arbitrária, mas deve ser única como descendente direto de hosts
testing:
host_domain: 127.0.0.1:8080
redirect_domain: google.com
targets:
- enable-cors.org
- example.com
Você precisará criar um novo arquivo de configuração YAML com esse formato para implantação.
Na seção terraform, defina heroku_app_name para um nome de aplicativo compatível com Heroku que seja único para sua conta. Você também precisará adicionar sua chave de API do Cloudflare gerada na seção acima sob a diretiva cloudflare_api_token.
A seção hosts é onde definimos os domínios nos quais esperamos que o of-CORS receba tráfego e o que fazer quando visitantes web chegarem. Digamos que temos uma empresa que estamos mirando e sabemos que ela tem dois domínios internos (myinternalcorp1.com e myinternalcorp2.com). Compramos o domínio yinternalcorp1.com com a expectativa de que funcionários o acessem acidentalmente. Nesse caso, configuraríamos hosts da seguinte forma:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
Aqui, host_domain é o domínio onde você espera receber tráfego (ou seja, o domínio que foi comprado). redirect_domain define o domínio para onde as vítimas devem ser redirecionadas após o payload ser lançado. targets especifica os domínios contra os quais os payloads devem ser lançados quando uma vítima visita o of-CORS.
Digamos que também compramos yinternalcorp2.com e queremos configurar o of-CORS para lançar ataques quando for visitado. A seção hosts poderia então ser atualizada da seguinte forma:
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
Agora, se uma vítima acessar acidentalmente yinternalcorp1.com ou yinternalcorp2.com, os payloads para enumerar configurações incorretas de CORS em myinternalcorp1.com e myinternalcorp2.com serão lançados e o navegador da vítima será subsequentemente redirecionado para o domínio correto.
Você não precisará instalar Terraform, Heroku, Python com a opção Docker. Basta executar este comando com o caminho correto para seu arquivo yaml:
docker run -v $PWD/config.yml:/config.yml -it --rm trufflesecurity/of-cors