{"id":2286,"date":"2023-09-28T10:58:32","date_gmt":"2023-09-28T08:58:32","guid":{"rendered":"https:\/\/certitude.consulting\/blog\/?p=2286"},"modified":"2023-10-05T06:55:03","modified_gmt":"2023-10-05T04:55:03","slug":"cloudflare-verwenden-um-cloudflare-zu-umgehen","status":"publish","type":"post","link":"https:\/\/certitude.consulting\/blog\/de\/cloudflare-verwenden-um-cloudflare-zu-umgehen\/","title":{"rendered":"Mit Cloudflare Cloudflare umgehen"},"content":{"rendered":"\n<p>Von Cloudflare-Kunden konfigurierte Schutzmechanismen (z. B. Firewall, DDoS-Schutz) f\u00fcr Webseiten k\u00f6nnen aufgrund von L\u00fccken in den mandanten\u00fcbergreifenden Schutzma\u00dfnahmen umgangen werden, wodurch Kunden potenziell Angriffen ausgesetzt sind, welche von Cloudflare verhindert werden sollten.&nbsp; Angreifer k\u00f6nnen ihre eigenen Cloudflare-Konten verwenden, um die Vertrauensbeziehung zwischen Cloudflare und den Webseiten ihrer Kunden zu missbrauchen, wodurch die Schutzmechanismen unwirksam werden. Cloudflare-Kunden sollten ihre Origin-Server-Schutzstrategie \u00fcberpr\u00fcfen, um sicherzustellen, dass ihre konfigurierten Schutzmechanismen zuverl\u00e4ssig angewandt werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einleitung<\/h2>\n\n\n\n<p>Cloudflare ist ein gro\u00dfer Anbieter aus dem Bereich der Cybersicherheit, der gehostete Website-Schutzdienste [1] anbietet (z.B. Web Application Firewall (WAF), DDoS-Schutz, Bot-Management). Dies wird durch das Hosting eines Netzwerks von Reverse-Proxy-Servern erreicht, die sich zwischen dem Webserver eines Kunden (im Folgenden als &#8220;Origin-Server&#8221; bezeichnet) und seinen Benutzern befinden und eine Analyse des Datenverkehrs auf b\u00f6swillige Aktivit\u00e4ten erm\u00f6glichen. Da Kunden von Cloudflare potenziell auf dieses Serviceangebot angewiesen sind, ist es wichtig, den Origin-Server vor jeglichem Zugriff zu sch\u00fctzen, welcher nicht \u00fcber die konfigurierten Reverse-Proxy-Server geroutet wurde. Bei Umsetzung gem\u00e4\u00df der offiziellen Cloudflare-Dokumentation [2] k\u00f6nnen Kunden unwissentlich Mechanismen verwenden, die von Angreifern \u00fcber <strong>die Cloudflare-Plattform selbst ausgenutzt werden k\u00f6nnen<\/strong>. Diese Schwachstelle ergibt sich aus der gemeinsamen Infrastruktur, welche allen Mandanten innerhalb von Cloudflare zur Verf\u00fcgung steht; unabh\u00e4ngig davon, ob sie legitim oder b\u00f6sartig sind, und es ihnen erm\u00f6glicht, konfigurierte Sicherheitsma\u00dfnahmen zu umgehen und Kundensysteme ins Visier zu nehmen.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"604\" height=\"420\" src=\"https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-4.png\" alt=\"\" class=\"wp-image-2287\" srcset=\"https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-4.png 604w, https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-4-300x209.png 300w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><figcaption class=\"wp-element-caption\">Cloudflare Origin Server Protection Services visualisiert<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Dieses Angriffsvektor ist nicht klar dokumentiert, weshalb wir uns entschieden haben, dies im Rahmen von Responsible-Disclosure \u00fcber das Bug-Bounty-Programm an Cloudflare weiterzugeben. Cloudflare hat den Bericht als &#8220;informativ&#8221; eingestuft und geschlossen. Daher geben wir diese Details \u00f6ffentlich bekannt. Dies soll es Kunden erm\u00f6glichen, ihre Konfigurationen auf die unten beschriebenen Schwachstellen zu \u00fcberpr\u00fcfen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00dcbersicht \u00fcber die Schwachstelle<\/h2>\n\n\n\n<p>Cloudflare skizziert in ihrer offiziellen Dokumentation&nbsp; [2] auf verschiedenen Ebenen des OSI-Modells verschiedene Mechanismen, um &#8220;Angreifer daran zu hindern, den Origin-Server zu entdecken und mit Anfragen zu \u00fcberlasten&#8221; (Anwendungsschicht, Transportschicht und Netzwerkschicht) . Die Mechanismen sind mit unterschiedlichen Sicherheitsstufen versehen, entweder &#8220;m\u00e4\u00dfig sicher&#8221; oder &#8220;sehr sicher&#8221;, sowie den damit verbundenen technischen Herausforderungen. W\u00e4hrend unserer Analyse haben wir festgestellt, dass zwei der vorgeschlagenen Mechanismen auf der Pr\u00e4misse basieren, dass der gesamte von Cloudflare stammende Datenverkehr zum Origin-Server als vertrauensw\u00fcrdig betrachtet wird, w\u00e4hrend der Datenverkehr von anderen Parteien abgelehnt werden soll. <strong>Wir demonstrieren in diesem Bericht, dass Angreifer dieses Vertrauen in Cloudflare missbrauchen k\u00f6nnen, indem sie ihren Schadcode \u00fcber die Cloudflare-Plattform senden<\/strong> und dabei verschiedene Schutzmechanismen (z. B. die Web Application Firewall) umgehen, welche ein Kunde m\u00f6glicherweise f\u00fcr seine Umgebung konfiguriert hat. Die effektive Auswirkung dieser Umgehung h\u00e4ngt von der Konfiguration des Origin-Servers des Kunden ab.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Authenticated Origin Pulls<\/h2>\n\n\n\n<p>Bei Verwendung des Mechanismus &#8220;Authenticated Origin Pulls&#8221; auf Transportschicht, der in der Cloudflare Dokumentation als &#8220;sehr sicher&#8221; bezeichnet wird, authentifizieren sich die Reverse-Proxy-Server von Cloudflare beim Origin-Server mit einem Client-SSL-Zertifikat [3]. In der Dokumentation zur Zoneneinrichtung [4] werden zwei Optionen zur Authentifizierung von Verbindungen durch Clients, die \u00fcber den Reverse-Proxy-Server von Cloudflare geroutet werden, zum Origin-Server vorgestellt. Kunden k\u00f6nnen entweder ein &#8220;Cloudflare-Zertifikat&#8221; oder ein benutzerdefiniertes Zertifikat w\u00e4hlen. In der Dokumentation werden jedoch nicht die Auswirkungen dieser Optionen auf die Sicherheit er\u00f6rtert. Benutzerdefinierte Zertifikate k\u00f6nnen zu diesem Zeitpunkt nur \u00fcber eine API konfiguriert werden. Ohne zus\u00e4tzliche Dokumentation ist davon auszugehen, dass sich potentiell viele Kunden f\u00fcr die einfacheren Weg der Verwendung des Cloudflare-Zertifikats entscheiden werden.<\/p>\n\n\n\n<p>Die undokumentierte schwerwiegende Auswirkung der Verwendung eines gemeinsam genutzten &#8220;Cloudflare-Zertifikats-Infrastruktur&#8221; [5] anstelle eine mandantenspezifische benutzerdefinierten CA besteht darin, dass alle von Cloudflare ausgehenden Verbindungen zul\u00e4ssig sind, unabh\u00e4ngig davon, welcher Cloudflare-Mandant die Verbindung initiiert. <strong>Ein Angreifer kann eine eigene Domain bei Cloudflare einrichten und den DNS-A-Eintrag auf die IP-Adresse des Opfers setzen. Der Angreifer deaktiviert dann alle Schutzfunktionen f\u00fcr diese eigene Domain in seinem Mandanten und tunnelt seine Angriffe durch die Cloudflare-Infrastruktur. Dieser Ansatz erm\u00f6glicht es Angreifern, die Schutzmechanismen des Opfers zu umgehen.<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"604\" height=\"420\" src=\"https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-5.png\" alt=\"\" class=\"wp-image-2288\" srcset=\"https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-5.png 604w, https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-5-300x209.png 300w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><figcaption class=\"wp-element-caption\">Beispiel f\u00fcr Ausnutzung von gemeinsamen Cloudflare-Zertifikaten<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Dies kann derzeit nur durch die Verwendung von benutzerdefinierten Zertifikaten behoben werden, bei denen der Kunde seine eigenen Origin-Server Zertifikats-Infrastruktur erstellen und verwalten muss.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Allowlist Cloudflare IP addresses<\/h2>\n\n\n\n<p>Wenn den Mechanismus &#8221; Allowlist Cloudflare IP addresses&#8221; auf Netzwerkebene verwendet wird, welcher als &#8220;m\u00e4\u00dfig sicher&#8221; angegeben ist, lehnt der Origin-Server jede Verbindung ab, die nicht aus den IP-Adressbereichen von Cloudflare stammt. Die Setup-Dokumentation [6] dokumentiert, wie diese Adressbereiche mittels einer .htaccess-Datei oder iptables eingerichtet werden k\u00f6nnen.<\/p>\n\n\n\n<p>Wie bei \u201eAuthenticated Origin Pull\u201c besteht die undokumentierte schwerwiegende Auswirkung dieses Mechanismus darin, dass alle Verbindungen, welche von Cloudflare stammen, unabh\u00e4ngig vom Mandanten zul\u00e4ssig sind. <strong>Ein Angreifer kann eine eigene Domain bei Cloudflare einrichten und den DNS-A-Eintrag auf die IP-Adresse des Opfers setzen. Als N\u00e4chstes deaktiviert er alle Schutzfunktionen f\u00fcr diese eigene Domain und routet seine Angriffe durch die Infrastruktur von Cloudflare, wodurch die vom Opfer konfigurierten Schutzmechanismen umgangen werden.<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"604\" height=\"420\" src=\"https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-6.png\" alt=\"\" class=\"wp-image-2289\" srcset=\"https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-6.png 604w, https:\/\/certitude.consulting\/blog\/wp-content\/uploads\/2023\/09\/image-6-300x209.png 300w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><figcaption class=\"wp-element-caption\">Beispiel f\u00fcr Ausnutzung von Allowlist Cloudflare IPs<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Dies kann derzeit nur durch die Verwendung von Cloudflare Aegis [7] behoben werden, ein Produkt welches dedizierte Outbound-IP-Adressen bietet, anstatt des gemeinsam genutzten IP-Adressbereichs. Dieser Service ist m\u00f6glicherweise nicht f\u00fcr alle Kunden verf\u00fcgbar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Proof of Concent<\/h2>\n\n\n\n<p>Im Folgenden wird das Setup f\u00fcr eine erfolgreiche Umgehung einer WAF-gesch\u00fctzten Domain <em>victim.test<\/em> beschrieben, in welcher der Origin-Server <em>203.0.113.42 <\/em>durch die Verwendung von &#8220;Authenticated Origin Pulls&#8221; mit dem Cloudflare-Zertifikat sowie &#8220;Allowlist Cloudflare IP addresses&#8221; gesch\u00fctzt werden soll, basierend auf der offiziellen Dokumentation. Der Angreifer konfiguriert die Domain <em>attacker.test <\/em>ohne WAF-Schutz und legt die gleiche Origin-Server IP-Adresse wie <em>victim.test<\/em> fest. Dies erm\u00f6glicht es dem Angreifer, erfolgreich Anfragen an <em>203.0.113.42<\/em> via <em>attacker.test <\/em>zu senden, welche bei dem Versuch, dies direkt \u00fcber <em>victim.test<\/em> zu tun, blockiert werden w\u00fcrden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Konfiguration des Cloudflare-Kontos des Opfers<\/h3>\n\n\n\n<p>Domain: <em>victim.test<\/em><br>DNS A record points to: <em>203.0.113.42<\/em><br>Cloudflare settings:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SSL\/TLS encryption mode: &#8220;Full (strict)&#8221;<\/li>\n\n\n\n<li>Authenticated Origin Pulls enabled<\/li>\n\n\n\n<li>Cloudflare Origin Certificate created<\/li>\n\n\n\n<li>WAF Cloudflare Managed Ruleset enabled<\/li>\n\n\n\n<li>WAF Cloudflare OWASP Core Ruleset enabled<\/li>\n\n\n\n<li>Security Level: &#8220;I&#8217;m under attack&#8221; &#8211; Always Use HTTPS enabled<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Konfiguration des Origin-Servers des Opfers<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cloudflare Origin Certificate installed (SSL\/TLS enabled)<\/li>\n\n\n\n<li>Authenticated Origin Pulls CA installed (SSLVerifyClient enabled)<\/li>\n\n\n\n<li>iptables only allows ingress traffic from Cloudflare IPs on port 443<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Konfiguration des Cloudflare-Kontos des Angreifers<\/h3>\n\n\n\n<p>Domain: <em>attacker.test<\/em><br>DNS A record points to: <em>203.0.113.42<\/em><br>Cloudflare settings:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SL\/TLS encryption mode: &#8220;Full&#8221;<\/li>\n\n\n\n<li>Authenticated Origin Pulls enabled<\/li>\n\n\n\n<li>WAF Cloudflare Managed Ruleset disabled<\/li>\n\n\n\n<li>WAF Cloudflare OWASP Core Ruleset disabled<\/li>\n\n\n\n<li>Security Level: &#8220;Essentially off&#8221;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Exploit Demonstration<\/h3>\n\n\n\n<p>Die Cloudflare WAF sch\u00fctzt den Origin-Server des Opfers vor potenziellem Schadcode.<br>&gt; GET https:\/\/victim.test\/?test=cat%20\/etc\/passwd HTTP\/2<br>&lt; HTTP\/2 403 Denied<br><br>Cloudflare leitet den potenziellen Schadcode an den Origin-Server des Opfers weiter und umgeht dabei die WAF-Konfiguration des Opfers.<br>&gt; GET https:\/\/attacker.test\/?test=cat%20\/etc\/passwd HTTP\/2<br>&lt; HTTP\/2 200 OK<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Empfehlung f\u00fcr Cloudflare-Kunden<\/h2>\n\n\n\n<p>Der Mechanismus &#8220;Allowlist Cloudflare IP addresses&#8221; sollte als Defence in depth betrachtet werden und nicht als einziger Mechanismus zum Schutz von Origin-Servern. Der Mechanismus &#8220;Authenticated Origin Pulls&#8221; sollte mit benutzerdefinierten Zertifikaten und nicht mit dem Cloudflare-Zertifikat konfiguriert werden. Andere Mechanismen zur Authentifizierung des Cloudflare-Mandanten (anstelle von Cloudflare selbst), die in der Dokumentation [2] beschrieben werden, sollten beim Schutz von Origin-Servern in Betracht gezogen werden, vor allem in Hinsicht auf ihre technologischen Anforderungen (z.B. das Ausf\u00fchren von Drittanbieter-Code auf sensiblen Webservern).<\/p>\n\n\n\n<p>Wir w\u00fcrden Cloudflare empfehlen Schutzmechanismen gegen derartige Angriffe zu implementieren und Kunden mit schwachen Konfigurationen zu warnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">UPDATE 04.10.2023<\/h2>\n\n\n\n<p>Am 4. Oktober hat Cloudflare den Schweregrad unseres Schwachstellenberichts von \u201eInformativ\u201c auf \u201eHoch\u201c (7,5) ge\u00e4ndert und angek\u00fcndigt, dass sie Schritte unternehmen werden, um die Dokumentation zu verbessern und das Dashboard zu aktualisieren, um die Verwendung von Per-Hostname und Per-Zone Authenticated Origin Pulls zu f\u00f6rdern, um Origin-Server zu sch\u00fctzen und um Benutzer zu ermutigen, ihre Origin-Server zu sch\u00fctzen, indem sie eine Host-Header-Validierung implementieren und die Vertraulichkeit ihrer Origin-Server-IP-Adresse sch\u00fctzen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Disclosure Timeline<\/h2>\n\n\n\n<p class=\"has-text-align-left\">2023-03-16\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Problematik an Cloudflare via HackerOne gemeldet (Bericht 1909867)<br>2023-03-16\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Problematik von Cloudflare best\u00e4tigt und als \u201eInformativ\u201c geschlossen<br>2023-09-13\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ver\u00f6ffentlichung (>180 Tage)<br>2023-10-04\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Cloudflare \u00e4ndert Schweregrad von &#8220;Informativ&#8221; auf &#8220;High&#8221; (7,5)<br>2023-10-04\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Cloudflare k\u00fcndigt Verbesserungen von Dokumentation und Dashboard an<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p>[1] <a href=\"https:\/\/www.cloudflare.com\/application-services\/products\/\">https:\/\/www.cloudflare.com\/application-services\/products\/<\/a><br>[2] <a href=\"https:\/\/developers.cloudflare.com\/fundamentals\/get-started\/task-guides\/origin-health\/enterprise\/\">https:\/\/developers.cloudflare.com\/fundamentals\/get-started\/task-guides\/origin-health\/enterprise\/<\/a><br>[3] <a href=\"https:\/\/developers.cloudflare.com\/ssl\/origin-configuration\/authenticated-origin-pull\/explanation\/\">https:\/\/developers.cloudflare.com\/ssl\/origin-configuration\/authenticated-origin-pull\/explanation\/<\/a><br>[4] <a href=\"https:\/\/developers.cloudflare.com\/ssl\/origin-configuration\/authenticated-origin-pull\/set-up\/zone-level\/\">https:\/\/developers.cloudflare.com\/ssl\/origin-configuration\/authenticated-origin-pull\/set-up\/zone-level\/<\/a><br>[5] <a href=\"https:\/\/developers.cloudflare.com\/ssl\/static\/authenticated_origin_pull_ca.pem\">https:\/\/developers.cloudflare.com\/ssl\/static\/authenticated_origin_pull_ca.pem<\/a><br>[6] <a href=\"https:\/\/developers.cloudflare.com\/fundamentals\/get-started\/setup\/allow-cloudflare-ip-addresses\/\">https:\/\/developers.cloudflare.com\/fundamentals\/get-started\/setup\/allow-cloudflare-ip-addresses\/<\/a><br>[7] <a href=\"https:\/\/blog.cloudflare.com\/cloudflare-aegis\/\">https:\/\/blog.cloudflare.com\/cloudflare-aegis\/<\/a><\/p>\n\n\n\n<p>Diese Schwachstelle wurde von Florian Schweitzer und Stefan Proksch identifiziert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Von Cloudflare-Kunden konfigurierte Schutzmechanismen (z. B. Firewall, DDoS-Schutz) f\u00fcr Webseiten k\u00f6nnen aufgrund von L\u00fccken in den mandanten\u00fcbergreifenden Schutzma\u00dfnahmen umgangen werden, wodurch Kunden potenziell Angriffen ausgesetzt sind, welche von Cloudflare verhindert werden sollten.&nbsp; Angreifer k\u00f6nnen ihre eigenen Cloudflare-Konten verwenden, um die Vertrauensbeziehung zwischen Cloudflare und den Webseiten ihrer Kunden zu missbrauchen, wodurch die Schutzmechanismen unwirksam werden. [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":2293,"comment_status":"closed","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":"[]"},"categories":[34,78,63],"tags":[368,370],"class_list":["post-2286","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-expert","category-schwachstellen-research","category-technische-analyse","tag-cloud","tag-cloudflare"],"_links":{"self":[{"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/posts\/2286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/comments?post=2286"}],"version-history":[{"count":13,"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/posts\/2286\/revisions"}],"predecessor-version":[{"id":2338,"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/posts\/2286\/revisions\/2338"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/media\/2293"}],"wp:attachment":[{"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/media?parent=2286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/categories?post=2286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/certitude.consulting\/blog\/wp-json\/wp\/v2\/tags?post=2286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}