
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
Il deployment di of-CORS si basa su Terraform. Puoi seguire le istruzioni per installare Terraform qui. Una volta installato, il binario terraform dovrebbe essere disponibile nel PATH del tuo sistema.
Il deployment di of-CORS si basa anche su Python3. Assicurati che sia installato e disponibile nel PATH del tuo sistema.
Con l'autenticazione ai nostri provider cloud gestita e il file di configurazione of-CORS pronto, possiamo ora passare al deployment.
Innanzitutto, dovremo inizializzare Terraform. Questo comando deve essere eseguito dalla directory radice del codice sorgente:
cd terraform && terraform init && cd ../
Diciamo che il nostro file di configurazione si trova in /tmp/of_cors_config.yml. Dovremmo quindi eseguire i seguenti comandi per avviare tutta l'infrastruttura of-CORS (nota che si presume che i comandi vengano eseguiti in bash). L'esecuzione di questo comando può richiedere 5-10 minuti, quindi sii paziente!
Nota anche che per enumerazioni molto grandi, heroku spesso esaurisce le risorse. Questo è un problema noto, e apprezziamo il tuo aiuto per una soluzione. Possibili soluzioni future includono la possibilità di caricare tu stesso le enumerazioni, aumentare la dimensione del Dyn di Heroku o passare a Sublist3r o un altro strumento di enumerazione.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure
NOTA BENE - Esiste una race condition che può verificarsi quando l'infrastruttura Heroku viene avviata e una console viene immediatamente acceduta al suo interno. Se l'esecuzione di quest'ultimo comando make deploy_and_configure fallisce, attendi qualche minuto e riprova.
Dopo che il comando deploy_and_configure ha terminato l'esecuzione, avrai ora...
of-CORS popolato con domini candidati interni di configurazione errata CORSL'ultima cosa che dobbiamo fare affinché il deployment di of-CORS sia pronto a ricevere traffico è configurare i nomi di dominio che hai acquistato per utilizzare Cloudflare come server DNS autorevoli. Cloudflare ha una guida approfondita per farlo qui.
Segui i seguenti passaggi per confermare che il tuo software sia in esecuzione correttamente. Ai fini di questa sezione utilizzeremo un'istanza di of-CORS configurata sotto il dominio hackersofhollywood.com.
Per prima cosa controlliamo che i record SOA del nostro dominio puntino a Cloudflare:
dig soa <domain>
Come mostrato di seguito, i record SOA per hackersofhollywood.com puntano correttamente ai nameserver di Cloudflare:

Esaminiamo quindi l'account Cloudflare per confermare che siano stati impostati record DNS sia per hackersofhollywood.com che per *.hackersofhollywood.com con contenuti CNAME che puntano ai domini Heroku. Questo viene fatto tramite l'interfaccia web di Cloudflare nella sezione DNS:

Il passo successivo è confermare che Heroku sia configurato per ricevere traffico tramite questi due record CNAME. Questo può essere fatto tramite l'interfaccia web di Heroku in Settings -> Domains:

Effettivamente vediamo due nomi di dominio con i target DNS appropriati configurati in Heroku e questi target sono correttamente riflessi nei record CNAME di Cloudflare.
Possiamo quindi eseguire il seguente comando per aprire una sessione browser autenticata alla pagina di visualizzazione dei risultati di of-CORS:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
Questo dovrebbe far apparire una dashboard vuota nel tuo browser:

Infine possiamo testare che il probing delle configurazioni errate CORS venga lanciato con successo. Apri un browser verso il dominio base per una delle tue configurazioni (nel nostro esempio, https://hackersofhollywood.com) e conferma che la pagina reindirizzi dopo alcuni secondi:

Ora torna alla pagina della dashboard e cambia il filtro Success per filtrare per Unknown e premi il pulsante Submit Query. Dovresti ora vedere un sacco di risultati popolati:

La tua trappola è pronta! Ora siediti e rilassati e aspetta che le tue vittime inciampino nel tuo piccolo dominio appetitoso.
Il seguente comando può essere utilizzato per visualizzare e interrogare tutti i risultati in una sessione browser autenticata:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
Il file di configurazione of-CORS è progettato per supportare l'aggiunta e la rimozione flessibile dei domini per cui vengono lanciati gli attacchi. Basta aggiornare i contenuti della sezione hosts nel tuo file di configurazione e rieseguire lo script di provisioning:
source venv/bin/activate
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure