
Strumento automatizzato per la scoperta di configurazioni errate CORS che utilizza domini typosquatting e service worker del browser per sondare le reti interne dei target di bug bounty.
of-CORS è la suite di strumenti di Truffle Security per identificare e sfruttare le configurazioni errate CORS sulle reti interne dei target di bug bounty utilizzando il typosquatting.
Puoi leggere di più qui https://trufflesecurity.com/blog/of-CORS
of-CORS è un'applicazione web Python3 costruita su Django e Django Rest Framework. Una volta impostato e configurato, of-CORS registrerà automaticamente i service worker del browser nei browser di tutte le vittime che visitano l'applicazione. Questi service worker inviano richieste HTTP a un elenco di domini interni preconfigurati con l'intenzione di scoprire configurazioni errate CORS sulle reti interne. I risultati di queste richieste (sia positivi che negativi) vengono poi inviati via API all'istanza di of-CORS.
Una volta che un service worker è stato registrato nel browser di una vittima, un payload JavaScript reindirizza il browser verso la pagina che of-CORS ritiene stessero cercando di visitare originariamente.
I risultati raccolti possono successivamente essere visualizzati in una dashboard minimalista disponibile sull'applicazione of-CORS.
I seguenti passaggi possono essere seguiti per configurare of-CORS nel tuo deployment.
A causa della complessità della configurazione di of-CORS (in particolare le complicazioni legate a SSL/TLS, DNS e la gestione delle richieste wildcard per entrambi) utilizziamo due provider cloud (Heroku e Cloudflare) nello stack dell'applicazione e Terraform per automatizzare la loro configurazione.
Inizia acquistando un dominio su cui è probabile che un dipendente interno dell'azienda target cada. Ti consigliamo di acquistare un dominio typo-squat di un dominio interno. Abbiamo scoperto che gli errori di copia-incolla sono un buon punto di partenza.
Quindi, ad esempio, se l'azienda che stai testando per CORS utilizza uberinternal.com per i domini interni, potresti voler acquistare berinternal.com per iniziare a ricevere traffico dal browser dei dipendenti interni.
of-CORS utilizza Cloudflare per ricevere e instradare le richieste DNS wildcard e per terminare le connessioni SSL/TLS.
Avrai bisogno di un account Cloudflare attivo per far funzionare correttamente il DNS con of-CORS. Una volta che hai un account Cloudflare, vorrai creare una chiave API (che può essere fatta nella dashboard qui).
La chiave API dovrà avere privilegi sufficienti per aggiungere, eliminare e configurare zone e record DNS. Questo può essere ottenuto selezionando le seguenti autorizzazioni nella pagina di creazione del token API:

Una volta creato un token API con le autorizzazioni corrette, puoi procedere al passaggio successivo.
of-CORS utilizza Heroku per una facile distribuzione e hosting dell'applicazione.
Avrai bisogno di un account Heroku attivo per far funzionare lo stack dell'applicazione of-CORS. Una volta che hai un account, vorrai installare lo strumento di interfaccia a riga di comando (CLI) di Heroku. Con la CLI installata, puoi usarla per avviare una sessione CLI autenticata con il seguente comando:
heroku login
Puoi quindi confermare che la tua CLI sia autenticata correttamente eseguendo il seguente comando:
heroku whoami
Ulteriore documentazione sull'autorizzazione della CLI di Heroku per l'uso con Terraform può essere trovata qui.
Con le chiavi API necessarie per la nostra infrastruttura ora pronte e configurate, possiamo passare alla configurazione di of-CORS per il deployment. Dai un'occhiata al contenuto del seguente file di configurazione YAML di esempio che può essere trovato nel repository:
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
Dovrai creare un nuovo file YAML di configurazione di questo formato per il deployment.
Nella sezione terraform vorrai impostare heroku_app_name su un nome di app conforme a Heroku unico per il tuo account. Dovrai anche aggiungere la tua chiave API Cloudflare generata nella sezione precedente sotto la direttiva cloudflare_api_token.
La sezione hosts è dove definiamo i domini in cui ci aspettiamo che of-CORS riceva traffico e cosa fare quando arrivano visitatori web. Diciamo che abbiamo un'azienda che stiamo prendendo di mira e sappiamo che ha due domini interni (myinternalcorp1.com e myinternalcorp2.com). Abbiamo acquistato il dominio yinternalcorp1.com con l'aspettativa che i dipendenti lo visitino accidentalmente. In questo caso, vorremmo configurare hosts come segue:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
Il host_domain qui è il dominio in cui ti aspetti di ricevere traffico (cioè il dominio acquistato). redirect_domain definisce il dominio a cui le vittime devono essere reindirizzate una volta lanciato un payload. targets specifica i domini contro cui lanciare i payload quando una vittima visita of-CORS.
Diciamo che abbiamo anche acquistato yinternalcorp2.com e vogliamo configurare of-CORS per lanciare attacchi quando viene visitato. La sezione hosts potrebbe quindi essere aggiornata come segue:
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
Ora, se una vittima visita accidentalmente yinternalcorp1.com o yinternalcorp2.com, i payload per enumerare le configurazioni errate CORS su myinternalcorp1.com e myinternalcorp2.com verranno lanciati e il browser della vittima verrà successivamente reindirizzato al dominio corretto.
Non avrai bisogno di installare Terraform, Heroku, Python con l'opzione Docker. Basta eseguire questo comando con il percorso corretto per il tuo file yaml:
docker run -v $PWD/config.yml:/config.yml -it --rm trufflesecurity/of-cors