Content Security Policy (CSP) Bypass
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために、HackenProof Discordサーバーに参加してください!
ハッキングの洞察 ハッキングのスリルと課題に深く掘り下げたコンテンツに参加する
リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、急速に進化するハッキングの世界を把握する
最新の発表 新しいバグバウンティの開始や重要なプラットフォームの更新について情報を得る
Discordに参加して、今日からトップハッカーとコラボレーションを始めましょう!
CSPとは
コンテンツセキュリティポリシー (CSP) は、主にクロスサイトスクリプティング (XSS)などの攻撃から保護することを目的としたブラウザ技術として認識されています。これは、ブラウザがリソースを安全に読み込むことができるパスとソースを定義し、詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScriptなどのさまざまな要素が含まれます。たとえば、ポリシーは、同じドメイン(自己)からのリソースの読み込みと実行を許可することがあり、インラインリソースやeval
、setTimeout
、setInterval
などの関数を通じて文字列コードの実行を含むことがあります。
CSPの実装は、レスポンスヘッダーを介して行われるか、HTMLページにメタ要素を組み込むことによって行われます。このポリシーに従い、ブラウザはこれらの規定を積極的に施行し、検出された違反を即座にブロックします。
レスポンスヘッダーを介して実装:
メタタグを介して実装された:
ヘッダー
CSPはこれらのヘッダーを使用して強制または監視できます:
Content-Security-Policy
: CSPを強制します; ブラウザは違反をブロックします。Content-Security-Policy-Report-Only
: 監視用に使用されます; 違反を報告しますが、ブロックはしません。プレプロダクション環境でのテストに最適です。
リソースの定義
CSPは、アクティブおよびパッシブコンテンツの読み込み元を制限し、インラインJavaScriptの実行やeval()
の使用などの側面を制御します。例のポリシーは:
ディレクティブ
script-src: JavaScriptの特定のソースを許可します。これには、URL、インラインスクリプト、イベントハンドラやXSLTスタイルシートによってトリガーされるスクリプトが含まれます。
default-src: 特定のフェッチディレクティブが存在しない場合にリソースを取得するためのデフォルトポリシーを設定します。
child-src: ウェブワーカーや埋め込まれたフレームコンテンツのために許可されたリソースを指定します。
connect-src: fetch、WebSocket、XMLHttpRequestなどのインターフェースを使用して読み込むことができるURLを制限します。
frame-src: フレームのためのURLを制限します。
frame-ancestors: 現在のページを埋め込むことができるソースを指定します。これは、
<frame>
、<iframe>
、<object>
、<embed>
、および<applet>
のような要素に適用されます。img-src: 画像のために許可されたソースを定義します。
font-src:
@font-face
を使用して読み込まれるフォントのための有効なソースを指定します。manifest-src: アプリケーションマニフェストファイルのために許可されたソースを定義します。
media-src: メディアオブジェクトを読み込むために許可されたソースを定義します。
object-src:
<object>
、<embed>
、および<applet>
要素のために許可されたソースを定義します。base-uri:
<base>
要素を使用して読み込むための許可されたURLを指定します。form-action: フォーム送信のための有効なエンドポイントをリストします。
plugin-types: ページが呼び出すことができるmimeタイプを制限します。
upgrade-insecure-requests: ブラウザにHTTP URLをHTTPSに書き換えるよう指示します。
sandbox:
<iframe>
のsandbox属性に似た制限を適用します。report-to: ポリシーが違反された場合に報告が送信されるグループを指定します。
worker-src: Worker、SharedWorker、またはServiceWorkerスクリプトのための有効なソースを指定します。
prefetch-src: フェッチまたはプリフェッチされるリソースのための有効なソースを指定します。
navigate-to: ドキュメントがあらゆる手段(a、form、window.location、window.openなど)でナビゲートできるURLを制限します。
ソース
*
:data:
,blob:
,filesystem:
スキームを除くすべてのURLを許可します。'self'
: 同じドメインからの読み込みを許可します。'data'
: データスキーム(例:Base64エンコードされた画像)を介してリソースを読み込むことを許可します。'none'
: どのソースからの読み込みもブロックします。'unsafe-eval'
:eval()
や類似のメソッドの使用を許可しますが、セキュリティ上の理由から推奨されません。'unsafe-hashes'
: 特定のインラインイベントハンドラを有効にします。'unsafe-inline'
: インライン<script>
や<style>
のようなインラインリソースの使用を許可しますが、セキュリティ上の理由から推奨されません。'nonce'
: 暗号的なnonce(1回使用される番号)を使用する特定のインラインスクリプトのホワイトリストです。JSの実行が制限されている場合、
doc.defaultView.top.document.querySelector("[nonce]")
を使用してページ内の使用済みnonceを取得し、それを再利用して悪意のあるスクリプトを読み込むことが可能です(strict-dynamicが使用されている場合、許可されたソースは新しいソースを読み込むことができるため、これは必要ありません)。以下のように:
'sha256-<hash>'
: 特定のsha256ハッシュを持つスクリプトをホワイトリストに追加します。'strict-dynamic'
: ノンスまたはハッシュによってホワイトリストに追加された場合、任意のソースからスクリプトを読み込むことを許可します。'host'
:example.com
のような特定のホストを指定します。https:
: HTTPSを使用するURLに制限します。blob:
: Blob URL(例:JavaScriptを介して作成されたBlob URL)からリソースを読み込むことを許可します。filesystem:
: ファイルシステムからリソースを読み込むことを許可します。'report-sample'
: 違反報告に違反コードのサンプルを含めます(デバッグに便利です)。'strict-origin'
: 'self'に似ていますが、ソースのプロトコルセキュリティレベルがドキュメントと一致することを保証します(安全なオリジンのみが安全なオリジンからリソースを読み込むことができます)。'strict-origin-when-cross-origin'
: 同一オリジンリクエストを行う際に完全なURLを送信しますが、リクエストがクロスオリジンの場合はオリジンのみを送信します。'unsafe-allow-redirects'
: すぐに別のリソースにリダイレクトされるリソースを読み込むことを許可します。セキュリティを弱めるため推奨されません。
安全でないCSPルール
'unsafe-inline'
Working payload: "/><script>alert(1);</script>
self + 'unsafe-inline' via Iframes
CSP bypass: self + 'unsafe-inline' with Iframes'unsafe-eval'
これは機能していません。詳細についてはこちらを確認してください。
作業ペイロード:
strict-dynamic
もしあなたが何らかの方法で許可されたJSコードがあなたのJSコードで新しいスクリプトタグをDOMに作成することができれば、許可されたスクリプトがそれを作成しているため、新しいスクリプトタグは実行を許可される。
Wildcard (*)
作業ペイロード:
object-srcとdefault-srcの欠如
これはもはや機能していないようです
作動するペイロード:
ファイルアップロード + 'self'
もしJSファイルをアップロードできれば、このCSPをバイパスできます:
Working payload:
しかし、サーバーがアップロードされたファイルを検証している可能性が高く、特定のタイプのファイルのみをアップロードすることを許可するでしょう。
さらに、サーバーが受け入れる拡張子を持つファイルにJSコードを含めてアップロードできたとしても(例えば:script.png)、これは十分ではありません。なぜなら、apacheサーバーのような一部のサーバーは拡張子に基づいてファイルのMIMEタイプを選択し、Chromeのようなブラウザは画像であるべきものの中のJavascriptコードを実行することを拒否します。「幸運にも」、間違いがあります。例えば、CTFから学んだことですが、Apacheは_.wave_拡張子を知らないため、*audio/のようなMIMEタイプで提供しません。
ここから、XSSとファイルアップロードを見つけ、誤解された拡張子を見つけた場合、その拡張子を持つファイルとスクリプトの内容をアップロードしようとすることができます。また、サーバーがアップロードされたファイルの正しい形式をチェックしている場合は、ポリグロットを作成することができます(ここにいくつかのポリグロットの例があります)。
Form-action
JSを注入することが不可能な場合でも、例えば資格情報をフォームアクションを注入することで流出させることを試みることができます(そして、パスワードマネージャーが自動的にパスワードを入力することを期待するかもしれません)。このレポートに例がありますも確認してください。また、default-src
はフォームアクションをカバーしていないことに注意してください。
第三者エンドポイント + ('unsafe-eval')
以下のペイロードのいくつかに対して**unsafe-eval
は必要ない**場合もあります。
脆弱なバージョンのangularをロードし、任意のJSを実行します:
Angularを使用したペイロード + window
オブジェクトを返す関数を持つライブラリ (この投稿をチェックしてください):
window
オブジェクトを返す関数を持つライブラリ (この投稿をチェックしてください):この投稿では、cdn.cloudflare.com
(または他の許可されたJSライブラリリポジトリ)からすべてのライブラリをロードし、各ライブラリから追加されたすべての関数を実行し、どのライブラリのどの関数がwindow
オブジェクトを返すかを確認できることが示されています。
Angular XSSはクラス名から:
Google reCAPTCHA JSコードの悪用
このCTFの解説によると、CSP内でhttps://www.google.com/recaptcha/を悪用して、CSPをバイパスし任意のJSコードを実行することができます:
More この文書からのペイロード:
www.google.comを悪用したオープンリダイレクト
次のURLはexample.comにリダイレクトします(こちらから):
*.google.com/script.google.comの悪用
script.google.com内のページで情報を受け取るためにGoogle Apps Scriptを悪用することが可能です。これはこのレポートで行われています。
サードパーティエンドポイント + JSONP
このようなシナリオでは、script-src
がself
および特定のホワイトリストに登録されたドメインに設定されている場合、JSONPを使用してバイパスできます。JSONPエンドポイントは、安全でないコールバックメソッドを許可し、攻撃者がXSSを実行できるようにします。動作するペイロード:
JSONBee は、さまざまなウェブサイトのCSPバイパス用に使用可能なJSONPエンドポイントを含んでいます。
信頼されたエンドポイントにオープンリダイレクトが含まれている場合、同じ脆弱性が発生します。なぜなら、初期のエンドポイントが信頼されている場合、リダイレクトも信頼されるからです。
サードパーティの悪用
以下の投稿で説明されているように、CSPのどこかで許可されている可能性のある多くのサードパーティドメインがあり、これらはデータを抽出したり、JavaScriptコードを実行したりするために悪用される可能性があります。これらのサードパーティの一部は次のとおりです:
エンティティ | 許可されたドメイン | 機能 |
---|---|---|
www.facebook.com, *.facebook.com | Exfil | |
Hotjar | *.hotjar.com, ask.hotjar.io | Exfil |
Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Exec |
Amazon CloudFront | *.cloudfront.net | Exfil, Exec |
Amazon AWS | *.amazonaws.com | Exfil, Exec |
Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Exfil, Exec |
Salesforce Heroku | *.herokuapp.com | Exfil, Exec |
Google Firebase | *.firebaseapp.com | Exfil, Exec |
ターゲットのCSPに許可されたドメインが見つかった場合、サードパーティサービスに登録することでCSPをバイパスし、そのサービスにデータを抽出したり、コードを実行したりできる可能性があります。
例えば、次のCSPが見つかった場合:
or
あなたはデータを抽出できるはずです。これは、Google Analytics/Google Tag Managerで常に行われてきたのと同様です。この場合、次の一般的な手順に従います。
ここでFacebook Developerアカウントを作成します。
新しい「Facebook Login」アプリを作成し、「Website」を選択します。
「Settings -> Basic」に移動し、「App ID」を取得します。
データを抽出したいターゲットサイトで、Facebook SDKガジェット「fbq」を「customEvent」とデータペイロードを通じて直接使用することでデータを抽出できます。
あなたのアプリの「Event Manager」に移動し、作成したアプリケーションを選択します(イベントマネージャーは、次のようなURLで見つけることができます: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events)。
「Test Events」タブを選択して、「あなた」のウェブサイトから送信されるイベントを確認します。
次に、被害者側で、攻撃者のFacebook Developerアカウントのapp-idを指すようにFacebookトラッキングピクセルを初期化し、次のようなカスタムイベントを発行するために以下のコードを実行します。
他の7つのサードパーティドメインについては、悪用する方法が他にもたくさんあります。その他のサードパーティの悪用についての追加説明は、以前のブログ投稿を参照してください。
RPO(相対パス上書き)によるバイパス
前述のパス制限を回避するためのリダイレクトに加えて、いくつかのサーバーで使用できる相対パス上書き(RPO)という別の技術があります。
例えば、CSPがパス https://example.com/scripts/react/
を許可している場合、次のようにバイパスできます:
ブラウザは最終的に https://example.com/scripts/angular/angular.js
を読み込みます。
これは、ブラウザにとって https://example.com/scripts/react/
の下にある ..%2fangular%2fangular.js
という名前のファイルを読み込んでいるため、CSPに準拠しています。
∑、彼らはそれをデコードし、実際には https://example.com/scripts/react/../angular/angular.js
を要求します。これは https://example.com/scripts/angular/angular.js
と同等です。
ブラウザとサーバー間のURL解釈の不一致を利用することで、パスルールをバイパスできます。
解決策は、サーバー側で %2f
を /
として扱わないようにし、ブラウザとサーバー間で一貫した解釈を確保してこの問題を回避することです。
オンライン例: https://jsbin.com/werevijewa/edit?html,output
Iframes JS 実行
Iframes in XSS, CSP and SOPbase-uri が欠落している場合
base-uri ディレクティブが欠落している場合、ダングリングマークアップインジェクションを実行するために悪用できます。
さらに、相対パスを使用してスクリプトを読み込んでいるページ(例えば <script src="/js/app.js">
)が Nonce を使用している場合、base タグ を悪用して 自分のサーバーからスクリプトを読み込ませ、XSSを達成することができます。
脆弱なページが httpS で読み込まれている場合、baseにhttpS URLを使用してください。
AngularJSイベント
特定のポリシーであるContent Security Policy (CSP)はJavaScriptイベントを制限する場合があります。それにもかかわらず、AngularJSは代替としてカスタムイベントを導入します。イベント内で、AngularJSはネイティブブラウザイベントオブジェクトを参照するユニークなオブジェクト$event
を提供します。この$event
オブジェクトはCSPを回避するために悪用される可能性があります。特に、Chromeでは、$event/event
オブジェクトはpath
属性を持ち、イベントの実行チェーンに関与するオブジェクトの配列を保持しており、window
オブジェクトは常に最後に位置しています。この構造はサンドボックスエスケープ戦術にとって重要です。
この配列をorderBy
フィルターに向けることで、反復処理が可能になり、端末要素(window
オブジェクト)を利用してalert()
のようなグローバル関数をトリガーできます。以下のコードスニペットはこのプロセスを明示しています:
このスニペットは、ng-focus
ディレクティブを使用してイベントをトリガーし、$event.path|orderBy
を使用して path
配列を操作し、window
オブジェクトを利用して alert()
関数を実行し、document.cookie
を表示する方法を強調しています。
他のAngularバイパスを見つけるには https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
AngularJS とホワイトリストドメイン
Angular JSアプリケーションでスクリプト読み込みのためにドメインをホワイトリストするCSPポリシーは、コールバック関数の呼び出しや特定の脆弱なクラスを通じてバイパスされる可能性があります。この技術に関する詳細情報は、このgitリポジトリで入手できます。
動作するペイロード:
他のJSONP任意実行エンドポイントはこちらで見つけることができます(いくつかは削除または修正されました)
リダイレクションによるバイパス
CSPがサーバーサイドのリダイレクションに遭遇した場合、何が起こるのでしょうか?リダイレクションが許可されていない異なるオリジンに向かう場合、依然として失敗します。
しかし、CSP仕様4.2.2.3. パスとリダイレクションの説明によれば、リダイレクションが異なるパスに向かう場合、元の制限をバイパスすることができます。
以下はその例です:
CSPがhttps://www.google.com/a/b/c/d
に設定されている場合、パスが考慮されるため、/test
および/a/test
スクリプトはCSPによってブロックされます。
しかし、最終的なhttp://localhost:5555/301
はサーバー側でhttps://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//
にリダイレクトされます。リダイレクションであるため、パスは考慮されず、スクリプトは読み込まれることができ、したがってパス制限を回避します。
このリダイレクションにより、パスが完全に指定されていても、依然として回避されます。
したがって、最良の解決策は、ウェブサイトにオープンリダイレクトの脆弱性がないことを確認し、CSPルールで悪用できるドメインがないことです。
ダンギングマークアップを使用したCSPのバイパス
'unsafe-inline'; img-src *; via XSS
'unsafe-inline'
は、コード内の任意のスクリプトを実行できることを意味します(XSSはコードを実行できます)し、img-src *
は、ウェブページ上で任意のリソースからの画像を使用できることを意味します。
このCSPをバイパスするには、画像を介してデータを抽出します(この場合、XSSはCSRFを悪用し、ボットがアクセスできるページにSQLiが含まれており、画像を介してフラグを抽出します):
From: https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle
この設定を悪用して、画像内に挿入されたjavascriptコードを読み込むこともできます。例えば、ページがTwitterからの画像の読み込みを許可している場合、特別な画像を作成し、それをTwitterにアップロードして、"unsafe-inline"を悪用して、JSコードを実行することができます(通常のXSSとして)それが画像を読み込み、その中からJSを抽出し、それを実行します: https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/
サービスワーカーを使用して
サービスワーカーの**importScripts
**関数はCSPによって制限されません:
ポリシーインジェクション
研究: https://portswigger.net/research/bypassing-csp-with-policy-injection
Chrome
あなたが送信したパラメータがポリシーの宣言内に貼り付けられている場合、あなたはポリシーを変更して無効にすることができます。これらのバイパスのいずれかを使用して、スクリプト 'unsafe-inline'を許可することができます:
このディレクティブは既存のscript-srcディレクティブを上書きします。 ここに例があります: http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E
Edge
Edgeでははるかに簡単です。CSPにこれだけ追加できれば: ;_
Edgeはポリシー全体を削除します。
例: http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E
img-src *; via XSS (iframe) - タイムアタック
ディレクティブ 'unsafe-inline'
の欠如に注意してください。
今回は、被害者にあなたの制御下にあるページをXSSを介して**で読み込ませることができます。今回は、被害者に情報を抽出したいページにアクセスさせます(CSRF)。ページの内容にはアクセスできませんが、もし何らかの方法でページの読み込みに必要な時間を制御できれば**、必要な情報を抽出できます。
今回は、フラグが抽出されます。SQLiを介して文字が正しく推測されるたびに、レスポンスがスリープ関数のためにより多くの時間を要します。そうすれば、フラグを抽出できるようになります:
Via Bookmarklets
この攻撃は、攻撃者がユーザーにブラウザのブックマークレットの上にリンクをドラッグアンドドロップさせることを納得させるというソーシャルエンジニアリングを含みます。このブックマークレットには、悪意のあるjavascriptコードが含まれており、ドラッグアンドドロップまたはクリックされると、現在のウェブウィンドウのコンテキストで実行され、CSPをバイパスして、クッキーやトークンなどの機密情報を盗むことを可能にします。
詳細については、こちらで元のレポートを確認してください。
CSP bypass by restricting CSP
このCTFの解説では、許可されたiframe内により制限されたCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みが禁止され、その後、プロトタイプ汚染またはDOMクラッタリングを介して、異なるスクリプトを悪用して任意のスクリプトを読み込むことが可能になりました。
**csp
**属性を使用して、IframeのCSPを制限することができます:
このCTFの解説では、HTMLインジェクションを通じてCSPをより制限することが可能であり、その結果、CSTIを防ぐスクリプトが無効化され、脆弱性が悪用可能になりました。 CSPはHTMLメタタグを使用してより制限的にすることができ、インラインスクリプトを無効にすることでエントリを削除し、nonceを許可し、shaを介して特定のインラインスクリプトを有効にすることができます。
JS exfiltration with Content-Security-Policy-Report-Only
もしサーバーが**Content-Security-Policy-Report-Only
ヘッダーをあなたが制御する値で応答するように管理できれば(おそらくCRLFのため)、それをあなたのサーバーに向けることができ、もし<script>
でエクスフィルしたいJSコンテンツをラップすると、CSPによってunsafe-inline
が許可されていない可能性が高いため、これがCSPエラー**を引き起こし、スクリプトの一部(機密情報を含む)がContent-Security-Policy-Report-Only
からサーバーに送信されます。
例としてこのCTFの解説を確認してください。
CSPとIframeを使用した情報漏洩
iframe
が作成され、CSPによって許可されたURL(これをhttps://example.redirect.com
と呼びます)を指します。このURLは、CSPによって許可されていない秘密のURL(例:
https://usersecret.example2.com
)にリダイレクトされます。securitypolicyviolation
イベントをリッスンすることで、blockedURI
プロパティをキャプチャできます。このプロパティは、ブロックされたURIのドメインを明らかにし、最初のURLがリダイレクトされた秘密のドメインを漏洩させます。
ChromeやFirefoxのようなブラウザは、CSPに関してiframeを扱う際に異なる動作をするため、未定義の動作による機密情報の漏洩の可能性があります。
別の技術は、CSP自体を利用して秘密のサブドメインを推測することです。この方法は、バイナリサーチアルゴリズムに依存し、特定のドメインを意図的にブロックするようにCSPを調整します。たとえば、秘密のサブドメインが未知の文字で構成されている場合、CSPディレクティブを変更してこれらのサブドメインをブロックまたは許可することで、異なるサブドメインを反復的にテストできます。以下は、この方法を促進するためにCSPがどのように設定されるかを示すスニペットです:
CSPによってブロックまたは許可されるリクエストを監視することで、秘密のサブドメインに含まれる可能性のある文字を絞り込み、最終的に完全なURLを明らかにすることができます。
両方の方法は、CSPの実装とブラウザでの動作のニュアンスを利用しており、一見安全なポリシーが意図せずに機密情報を漏洩させる可能性があることを示しています。
こちらからのトリック。
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために、HackenProof Discordサーバーに参加してください!
ハッキングの洞察 ハッキングのスリルと課題に深く掘り下げたコンテンツに参加しましょう
リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、急速に変化するハッキングの世界を最新の状態に保ちましょう
最新のお知らせ 新しいバグバウンティの開始や重要なプラットフォームの更新について情報を得ましょう
Discordで私たちに参加し、今日からトップハッカーとコラボレーションを始めましょう!
CSPをバイパスするための危険な技術
パラメータが多すぎるときのPHPエラー
この動画でコメントされた最後の技術によると、パラメータを多く送信すると(1001のGETパラメータ、POSTパラメータや20以上のファイルでも可能)、PHPウェブコードで定義された**header()
は、これが引き起こすエラーのために送信されません**。
PHPレスポンスバッファのオーバーロード
PHPはデフォルトで4096バイトのレスポンスをバッファリングすることで知られています。したがって、PHPが警告を表示している場合、警告内に十分なデータを提供することで、レスポンスはCSPヘッダーの前に送信され、ヘッダーが無視されることになります。 その後、この技術は基本的に警告でレスポンスバッファを埋めることによって、CSPヘッダーが送信されないようにすることです。
この書き込みからのアイデア。
エラーページの書き換え
この書き込みによると、エラーページ(CSPがない可能性がある)を読み込み、その内容を書き換えることでCSP保護をバイパスすることが可能だったようです。
SOME + 'self' + wordpress
SOMEは、ページのエンドポイントでのXSS(または非常に制限されたXSS)を悪用して、同じオリジンの他のエンドポイントを悪用する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後、悪用したい同じオリジンの実際のエンドポイントに攻撃者のページをリフレッシュすることで行われます。この方法により、脆弱なエンドポイントは、ペイロード内の**opener
**オブジェクトを使用して、悪用する実際のエンドポイントのDOMにアクセスできます。詳細については、次を確認してください:
さらに、wordpressには、/wp-json/wp/v2/users/1?_jsonp=data
にJSONPエンドポイントがあり、出力に送信されたデータを反映します(文字、数字、ドットのみの制限があります)。
攻撃者は、そのエンドポイントを悪用して、WordPressに対してSOME攻撃を生成し、<script s
rc=/wp-json/wp/v2/users/1?_jsonp=some_attack></script>
内に埋め込むことができます。このスクリプトは、'self'によって許可されているため、読み込まれます。さらに、WordPressがインストールされているため、攻撃者はCSPをバイパスする脆弱なコールバックエンドポイントを通じてSOME攻撃を悪用し、ユーザーにより多くの権限を与えたり、新しいプラグインをインストールしたりすることができます...
この攻撃を実行する方法の詳細については、https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/を確認してください。
CSP Exfiltration Bypasses
厳格なCSPがあり、外部サーバーと対話することを許可しない場合、情報を抽出するために常にできることがあります。
Location
攻撃者のサーバーに秘密の情報を送信するために、単にロケーションを更新することができます:
Meta tag
メタタグを注入することでリダイレクトできます(これは単なるリダイレクトであり、コンテンツは漏れません)
DNS Prefetch
ページをより速く読み込むために、ブラウザはホスト名をIPアドレスに事前解決し、後で使用するためにキャッシュします。
ブラウザにホスト名を事前解決させるには、次のように指定できます: <link rel="dns-prefetch" href="something.com">
この動作を悪用して、DNSリクエストを介して機密情報を流出させることができます:
別の方法:
この問題を避けるために、サーバーはHTTPヘッダーを送信できます:
どうやら、この技術はヘッドレスブラウザ(ボット)では機能しないようです。
WebRTC
いくつかのページで、WebRTCはCSPのconnect-src
ポリシーをチェックしないと読めます。
実際、_DNSリクエスト_を使用して情報を_漏洩_させることができます。このコードを確認してください:
別のオプション:
CSPポリシーのオンラインチェック
CSPの自動生成
https://csper.io/docs/generating-content-security-policy
参考文献
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために、HackenProof Discordサーバーに参加しましょう!
ハッキングの洞察 ハッキングのスリルと課題に深く掘り下げたコンテンツに参加しましょう
リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、急速に変化するハッキングの世界を把握しましょう
最新のお知らせ 新しいバグバウンティの開始や重要なプラットフォームの更新について情報を得ましょう
私たちに参加して Discordで今日からトップハッカーとコラボレーションを始めましょう!
Last updated