
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
A implantação do of-CORS depende do Terraform. Você pode seguir as instruções para instalar o Terraform aqui. Uma vez instalado, espera-se que o binário terraform esteja disponível no PATH do seu sistema.
A implantação do of-CORS também depende do Python3. Certifique-se de que ele esteja instalado e disponível no PATH do seu sistema.
Com a autenticação em nossos provedores de nuvem resolvida e o arquivo de configuração do of-CORS pronto, podemos prosseguir para a implantação.
Primeiro, precisaremos inicializar o Terraform. Este comando deve ser executado a partir do diretório raiz do código-fonte:
cd terraform && terraform init && cd ../
Digamos que nosso arquivo de configuração está em /tmp/of_cors_config.yml. Executaríamos então os seguintes comandos para colocar toda a infraestrutura do of-CORS em funcionamento (note que isso assume que os comandos estão sendo executados no bash). Executar este comando pode levar de 5 a 10 minutos, então seja paciente!
Observe também que para enumerações muito grandes, o heroku frequentemente fica sem recursos. Este é um problema conhecido, e adoraríamos sua ajuda para uma correção. Possíveis correções futuras incluem poder fazer upload das enumerações você mesmo, aumentar o tamanho do Dyno do heroku ou mudar para Sublist3r ou outra ferramenta de enumeração.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure
OBSERVAÇÃO - Existe uma condição de corrida que pode ocorrer quando a infraestrutura do Heroku é iniciada e um console é imediatamente acessado dentro dela. Se a execução deste último comando make deploy_and_configure falhar, aguarde alguns minutos e tente executá-lo novamente.
Após o comando deploy_and_configure terminar de executar, você terá...
of-CORS populado com domínios candidatos de configuração incorreta de CORS internosA última coisa que precisamos fazer para que a implantação do of-CORS esteja pronta para receber tráfego é configurar os nomes de domínio que você comprou para usar o Cloudflare como seus servidores DNS autoritativos. O Cloudflare tem um guia detalhado sobre como fazer isso aqui.
Siga os passos abaixo para confirmar que seu software está funcionando corretamente. Para fins desta seção, usaremos uma instância do of-CORS configurada sob o domínio hackersofhollywood.com.
Primeiro, vamos verificar se os registros SOA do nosso domínio apontam para o Cloudflare:
dig soa <dominio>
Como mostrado abaixo, os registros SOA para hackersofhollywood.com apontam corretamente para os nameservers do Cloudflare:

Em seguida, revisamos a conta do Cloudflare para confirmar que os registros DNS foram configurados tanto para hackersofhollywood.com quanto para *.hackersofhollywood.com com conteúdo CNAME apontando para domínios do Heroku. Isso é feito através da interface web do Cloudflare na seção DNS:

O próximo passo é confirmar que o Heroku está configurado para receber tráfego através desses dois registros CNAME. Isso pode ser feito através da interface web do Heroku em Settings -> Domains:

De fato, vemos dois nomes de domínio com os alvos DNS apropriados configurados no Heroku e esses alvos são corretamente refletidos nos registros CNAME do Cloudflare.
Podemos então executar o seguinte comando para abrir uma sessão de navegador autenticada para a página de visualização de resultados do of-CORS:
CONFIG_FILE=<caminho_para_arquivo_config> make open_heroku_console
Isso deve abrir um painel vazio no seu navegador:

Por último, podemos testar se a sondagem de configuração incorreta de CORS está sendo lançada com sucesso. Abra um navegador no domínio base de uma de suas configurações (no nosso exemplo, https://hackersofhollywood.com) e confirme se a página redireciona após alguns segundos:

Agora navegue de volta para a página do painel e altere o filtro Success para filtrar por Unknown e clique no botão Submit Query. Você deve ver vários resultados preenchidos:

Sua armadilha está pronta! Agora é só sentar, relaxar e esperar que suas vítimas tropecem no seu domínio tentador.
O seguinte comando pode ser usado para visualizar e consultar todos os resultados em uma sessão de navegador autenticada:
CONFIG_FILE=<caminho_para_arquivo_config> make open_heroku_console
O arquivo de configuração do of-CORS foi projetado para suportar a adição e remoção flexível de domínios contra os quais os ataques são lançados. Basta atualizar o conteúdo da seção hosts no seu arquivo de configuração e executar novamente o script de provisionamento:
source venv/bin/activate
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure