
Automatisiertes Tool zur Erkennung von CORS-Fehlkonfigurationen unter Verwendung von Typosquatting-Domains und Browser-Service-Workern, um interne Netzwerke von Bug-Bounty-Zielen zu untersuchen.
of-CORS ist die Tool-Suite von Truffle Security zur Identifizierung und Ausnutzung von CORS-Fehlkonfigurationen in internen Netzwerken von Bug-Bounty-Zielen mithilfe von Typosquatting.
Mehr dazu gibt es hier: https://trufflesecurity.com/blog/of-CORS
of-CORS ist eine Python3-Webanwendung, die auf Django und Django Rest Framework basiert. Nach der Einrichtung und Konfiguration registriert of-CORS automatisch Browser-Service-Worker in den Browsern aller Opfer, die die Anwendung besuchen. Diese Service-Worker senden HTTP-Anfragen an eine Liste vorkonfigurierter interner Domains, um CORS-Fehlkonfigurationen in internen Netzwerken zu entdecken. Die Ergebnisse dieser Anfragen (ob erfolgreich oder nicht) werden dann über die API an die of-CORS-Instanz zurückgesendet.
Sobald ein Service-Worker im Browser eines Opfers registriert wurde, leitet ein JavaScript-Payload den Browser auf die Seite weiter, von der of-CORS annimmt, dass das Opfer ursprünglich darauf zugreifen wollte.
Die gesammelten Ergebnisse können anschließend in einem minimalistischen Dashboard angezeigt werden, das in der of-CORS-Anwendung verfügbar ist.
Die folgenden Schritte können unternommen werden, um of-CORS in Ihrer eigenen Umgebung einzurichten.
Aufgrund der Komplexität der Einrichtung von of-CORS (insbesondere Komplikationen mit SSL/TLS, DNS und der Ermöglichung von Wildcard-Anfragen für beide) nutzen wir zwei Cloud-Anbieter (Heroku und Cloudflare) im Anwendungsstack und Terraform zur Automatisierung ihrer Konfiguration.
Beginnen Sie mit dem Kauf einer Domain, auf die ein interner Mitarbeiter des Zielunternehmens wahrscheinlich stoßen wird. Wir empfehlen den Kauf einer Tippfehler-Domain einer internen Domain. Wir haben festgestellt, dass Kopierfehler ein guter Ausgangspunkt sind.
Wenn das Unternehmen, das Sie auf CORS testen, beispielsweise uberinternal.com für interne Domains verwendet, möchten Sie möglicherweise berinternal.com kaufen, um Browser-Traffic von internen Mitarbeitern zu erhalten.
of-CORS verwendet Cloudflare zum Empfangen und Weiterleiten von Wildcard-DNS-Anfragen sowie zur Beendigung von SSL/TLS-Verbindungen.
Sie benötigen ein aktives Cloudflare-Konto, damit DNS mit of-CORS korrekt funktioniert. Sobald Sie ein Cloudflare-Konto haben, möchten Sie einen API-Schlüssel erstellen (was im Dashboard hier möglich ist).
Der API-Schlüssel muss ausreichende Berechtigungen haben, um Zonen sowie DNS-Einträge hinzuzufügen, zu löschen und zu konfigurieren. Dies kann erreicht werden, indem Sie auf der Seite zur Erstellung des API-Tokens die folgenden Berechtigungen auswählen:

Sobald Sie einen API-Token mit den richtigen Berechtigungen erstellt haben, können Sie mit dem nächsten Schritt fortfahren.
of-CORS verwendet Heroku für eine einfache Anwendungsbereitstellung und Hosting.
Sie benötigen ein aktives Heroku-Konto, um den of-CORS-Anwendungsstack zum Laufen zu bringen. Sobald Sie ein Konto haben, sollten Sie das Heroku Command Line Interface (CLI)-Tool installieren. Mit installierter CLI können Sie eine authentifizierte CLI-Sitzung mit dem folgenden Befehl starten:
heroku login
Sie können dann bestätigen, dass Ihre CLI erfolgreich authentifiziert ist, indem Sie den folgenden Befehl ausführen:
heroku whoami
Weitere Dokumentation zur Autorisierung der Heroku CLI für die Verwendung mit Terraform finden Sie hier.
Nachdem die für unsere Infrastruktur notwendigen API-Schlüssel eingerichtet und bereit sind, können wir zur Konfiguration von of-CORS für die Bereitstellung übergehen. Werfen Sie einen Blick auf den Inhalt der folgenden Beispiel-YAML-Konfigurationsdatei, die im Repository zu finden ist:
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
Sie müssen eine neue Konfigurations-YAML-Datei dieses Formats für die Bereitstellung erstellen.
Im Abschnitt terraform sollten Sie heroku_app_name auf einen Heroku-konformen App-Namen setzen, der für Ihr Konto eindeutig ist. Sie sollten außerdem Ihren Cloudflare-API-Schlüssel, den Sie im obigen Abschnitt generiert haben, unter der Direktive cloudflare_api_token hinzufügen.
Im Abschnitt hosts definieren wir die Domains, von denen wir erwarten, dass of-CORS Traffic empfängt, und was zu tun ist, wenn Web-Besucher kommen. Nehmen wir an, wir haben ein Unternehmen im Visier und wissen, dass es zwei interne Domains hat (myinternalcorp1.com und myinternalcorp2.com). Wir haben die Domain yinternalcorp1.com gekauft, in der Erwartung, dass Mitarbeiter versehentlich darauf zugreifen. In diesem Fall möchten wir hosts wie folgt konfigurieren:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
host_domain ist hier die Domain, von der Sie Traffic erwarten (d. h. die gekaufte Domain). redirect_domain definiert die Domain, zu der Opfer weitergeleitet werden sollen, sobald ein Payload gestartet wurde. targets gibt die Domains an, gegen die Payloads gestartet werden sollen, wenn ein Opfer of-CORS besucht.
Nehmen wir an, wir haben auch yinternalcorp2.com gekauft und möchten of-CORS so konfigurieren, dass Angriffe gestartet werden, wenn sie besucht wird. Der Abschnitt hosts könnte dann wie folgt aktualisiert werden:
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
Wenn nun ein Opfer versehentlich yinternalcorp1.com oder yinternalcorp2.com besucht, werden die Payloads zur Aufzählung von CORS-Fehlkonfigurationen auf myinternalcorp1.com und myinternalcorp2.com gestartet, und der Browser des Opfers wird anschließend auf die richtige Domain weitergeleitet.
Mit der Docker-Option müssen Sie Terraform, Heroku und Python nicht installieren. Führen Sie einfach diesen Befehl mit dem richtigen Pfad für Ihre YAML-Datei aus:
docker run -v $PWD/config.yml:/config.yml -it --rm trufflesecurity/of-cors
Die Bereitstellung von of-CORS basiert auf Terraform. Sie können die Anweisungen zur Installation von Terraform hier befolgen. Nach der Installation sollte sich die terraform-Binärdatei im PATH Ihres Systems befinden.
Die Bereitstellung von of-CORS erfordert auch Python3. Stellen Sie sicher, dass es installiert und im PATH Ihres Systems verfügbar ist.
Nachdem die Authentifizierung bei unseren Cloud-Anbietern erledigt und die of-CORS-Konfigurationsdatei bereit ist, können wir nun zur Bereitstellung übergehen.
Zuerst müssen wir Terraform initialisieren. Dieser Befehl sollte aus dem Wurzelverzeichnis des Quellcodes ausgeführt werden:
cd terraform && terraform init && cd ../
Nehmen wir an, unsere Konfigurationsdatei befindet sich unter /tmp/of_cors_config.yml. Dann würden wir die folgenden Befehle ausführen, um die gesamte of-CORS-Infrastruktur zum Laufen zu bringen (beachten Sie, dass dies voraussetzt, dass die Befehle in bash ausgeführt werden). Die Ausführung dieses Befehls kann 5-10 Minuten dauern, also bitte geduldig sein!
Bitte beachten Sie auch, dass Heroku bei sehr großen Aufzählungen oft die Ressourcen ausgehen. Dies ist ein bekanntes Problem, und wir würden uns über Ihre Hilfe bei einer Lösung freuen. Mögliche zukünftige Lösungen umfassen das Hochladen eigener Aufzählungen, die Erhöhung der Heroku-Dyn-Größe oder die Umstellung auf Sublist3r oder ein anderes Aufzählungstool.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure
BITTE BEACHTEN - Es kann eine Race Condition auftreten, wenn die Heroku-Infrastruktur hochgefahren wird und sofort eine Konsole darin aufgerufen wird. Wenn die Ausführung des letzten Befehls make deploy_and_configure fehlschlägt, warten Sie bitte einige Minuten und versuchen Sie es erneut.
Nachdem der Befehl deploy_and_configure abgeschlossen ist, haben Sie nun...
of-CORS mit Kandidaten-Domains für interne CORS-Fehlkonfigurationen bestücktDas Letzte, was wir tun müssen, damit die of-CORS-Bereitstellung bereit ist, Traffic zu empfangen, ist, die von Ihnen gekauften Domains so zu konfigurieren, dass sie Cloudflare als ihre autoritativen DNS-Server verwenden. Cloudflare hat eine ausführliche Anleitung dazu hier.
Gehen Sie die folgenden Schritte durch, um zu bestätigen, dass Ihre Software korrekt läuft. Für diesen Abschnitt verwenden wir eine Instanz von of-CORS, die unter der Domain hackersofhollywood.com eingerichtet wurde.
Zuerst überprüfen wir, ob die SOA-Einträge unserer Domain auf Cloudflare verweisen:
dig soa <domain>
Wie unten gezeigt, verweisen die SOA-Einträge für hackersofhollywood.com korrekt auf die Cloudflare-Nameserver:

Wir überprüfen dann das Cloudflare-Konto, um zu bestätigen, dass DNS-Einträge für sowohl hackersofhollywood.com als auch *.hackersofhollywood.com mit CNAME-Inhalten, die auf Heroku-Domains verweisen, eingerichtet wurden. Dies geschieht über die Cloudflare-Weboberfläche im DNS-Bereich:

Der nächste Schritt besteht darin, zu bestätigen, dass Heroku so konfiguriert ist, dass es Traffic über diese beiden CNAME-Einträge empfängt. Dies kann über die Heroku-Weboberfläche unter Settings -> Domains erfolgen:

Tatsächlich sehen wir zwei Domainnamen mit den entsprechenden DNS-Zielen, die in Heroku konfiguriert wurden, und diese Ziele werden korrekt in den CNAME-Einträgen von Cloudflare widergespiegelt.
Wir können dann den folgenden Befehl ausführen, um eine authentifizierte Browser-Sitzung zur Ergebnisansichtsseite von of-CORS zu öffnen:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
Dies sollte ein leeres Dashboard in Ihrem Browser öffnen:

Zuletzt können wir testen, ob die CORS-Fehlkonfigurationsprüfung erfolgreich gestartet wird. Öffnen Sie einen Browser zur Basisdomain einer Ihrer Konfigurationen (in unserem Beispiel https://hackersofhollywood.com) und bestätigen Sie, dass die Seite nach einigen Sekunden weiterleitet:

Navigieren Sie nun zurück zur Dashboard-Seite und ändern Sie den Filter Success, um nach Unknown zu filtern, und klicken Sie auf die Schaltfläche Submit Query. Sie sollten jetzt eine Reihe von Ergebnissen sehen:

Ihre Falle ist gestellt! Lehnen Sie sich jetzt zurück, entspannen Sie sich und warten Sie, bis Ihre Opfer auf Ihre verlockende kleine Domain stoßen.
Der folgende Befehl kann verwendet werden, um alle Ergebnisse in einer authentifizierten Browser-Sitzung anzuzeigen und abzufragen:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
Die of-CORS-Konfigurationsdatei ist darauf ausgelegt, das flexible Hinzufügen und Entfernen von Domains zu unterstützen, gegen die Angriffe gestartet werden. Aktualisieren Sie einfach den Inhalt des Abschnitts hosts in Ihrer Konfigurationsdatei und führen Sie das Bereitstellungsskript erneut aus:
source venv/bin/activate
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure