
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.