diff --git a/src/pentesting-web/csrf-cross-site-request-forgery.md b/src/pentesting-web/csrf-cross-site-request-forgery.md
index 067bf91ff..3af6ade6a 100644
--- a/src/pentesting-web/csrf-cross-site-request-forgery.md
+++ b/src/pentesting-web/csrf-cross-site-request-forgery.md
@@ -1,86 +1,114 @@
-# CSRF (クロスサイトリクエストフォージェリ)
+# CSRF (Cross Site Request Forgery)
{{#include ../banners/hacktricks-training.md}}
-## クロスサイトリクエストフォージェリ (CSRF) の説明
+## Cross-Site Request Forgery (CSRF) Explained
-**クロスサイトリクエストフォージェリ (CSRF)** は、ウェブアプリケーションに見られるセキュリティ脆弱性の一種です。これにより、攻撃者は認証されたセッションを悪用して、無防備なユーザーの代わりにアクションを実行できます。攻撃は、被害者のプラットフォームにログインしているユーザーが悪意のあるサイトを訪れたときに実行されます。このサイトは、JavaScriptの実行、フォームの送信、または画像の取得などの方法を通じて、被害者のアカウントへのリクエストをトリガーします。
+**Cross-Site Request Forgery (CSRF)** は、ウェブアプリケーションに見られるセキュリティ脆弱性の一種です。攻撃者は認証済みセッションを悪用して、ユーザーに気付かれないうちにそのユーザーの代わりに操作を行わせることができます。攻撃は、被害者のプラットフォームにログイン中のユーザーが悪意のあるサイトを訪れたときに実行され、そのサイトが JavaScript の実行、フォームの送信、画像の取得などで被害者アカウントへリクエストを送信します。
-### CSRF攻撃の前提条件
+### Prerequisites for a CSRF Attack
-CSRF脆弱性を悪用するには、いくつかの条件を満たす必要があります:
+CSRF 脆弱性を悪用するには、いくつかの条件が満たされている必要があります:
-1. **価値のあるアクションを特定する**: 攻撃者は、ユーザーのパスワード、メールアドレスの変更、または権限の昇格など、悪用する価値のあるアクションを見つける必要があります。
-2. **セッション管理**: ユーザーのセッションは、クッキーまたはHTTP基本認証ヘッダーを通じてのみ管理されるべきです。他のヘッダーはこの目的のために操作できません。
-3. **予測不可能なパラメータの不在**: リクエストには予測不可能なパラメータが含まれていない必要があります。これらは攻撃を妨げる可能性があります。
+1. **Identify a Valuable Action**: 攻撃者は、パスワードやメールの変更、権限昇格など、悪用価値のあるアクションを見つける必要があります。
+2. **Session Management**: ユーザーのセッションが cookies や HTTP Basic Authentication header のみで管理されている必要があります。他のヘッダはこの目的で操作できないためです。
+3. **Absence of Unpredictable Parameters**: リクエストに予測不可能なパラメータが含まれていると、攻撃が阻止される可能性があります。
-### クイックチェック
+### Quick Check
-**Burpでリクエストをキャプチャ**し、CSRF保護を確認することができます。また、ブラウザからテストするには、**Copy as fetch**をクリックしてリクエストを確認できます:
+Burp でリクエストをキャプチャして CSRF 保護を確認できます。ブラウザからテストするには、**Copy as fetch** をクリックしてリクエストを確認してください:
","widgetType":"URL"}]
+```
-攻撃者がこれを悪用する方法は次のとおりです:
+- Bypass by switching to GET (no token):
-1. **自分のアカウントを使用して認証**します。
-2. **グローバルプールから有効なCSRFトークンを取得**します。
-3. **このトークンを使用して**、被害者に対するCSRF攻撃を行います。
+```http
+GET /index.php?module=Home&action=HomeAjax&file=HomeWidgetBlockList&widgetInfoList=[{"widgetId":"https://attacker
","widgetType":"URL"}] HTTP/1.1
+```
-この脆弱性により、攻撃者は被害者の代わりに無許可のリクエストを行うことができ、アプリケーションの**不十分なトークン検証メカニズム**を悪用します。
+Notes:
+- このパターンは、レスポンスが application/json ではなく誤って text/html として返される reflected XSS と一緒に現れることが多いです。
+- これを XSS と組み合わせると、脆弱なコードパスをトリガーしつつ CSRF チェックを完全に回避する単一の GET リンクを配布できるため、悪用のハードルが大幅に下がります。
-### メソッドバイパス
+### Lack of token
-リクエストが「**奇妙な**」**メソッド**を使用している場合、**メソッド**の**オーバーライド機能**が機能しているかを確認してください。たとえば、**PUT**メソッドを使用している場合、**POST**メソッドを使用して**送信**することを試みることができます:_https://example.com/my/dear/api/val/num?**\_method=PUT**_
+アプリケーションは、token が存在する場合にそれを **validate** する仕組みを実装していることがあります。しかし、token が欠落しているときに検証処理を完全にスキップしてしまうと脆弱性が発生します。攻撃者は token の値を変えるだけでなく、token を運んでいる parameter 自体を**削除する**ことでこれを悪用できます。これにより検証を回避し、Cross-Site Request Forgery (CSRF) を効果的に実行できます。
-これは、**POSTリクエスト内に\_methodパラメータを送信する**か、**ヘッダー**を使用することで機能する可能性もあります:
+### CSRF token is not tied to the user session
+
+CSRF tokens を user sessions に紐付けていないアプリケーションは重大な security risk を抱えています。これらのシステムは各トークンを発行元セッションに結び付けるのではなく、global pool に対して検証を行います。
+
+攻撃者がこれを悪用する流れは次の通りです:
+
+1. 自分のアカウントで認証する。
+2. global pool から有効な CSRF token を取得する。
+3. その token を被害者に対する CSRF 攻撃で使用する。
+
+この脆弱性により、攻撃者は被害者になりすまして不正なリクエストを送信でき、アプリケーションの不十分な token validation 機構を悪用できます。
+
+### Method bypass
+
+リクエストが「変わった」method を使用している場合、method override 機能が動作しているか確認してください。例えば PUT を使っている場合、POST を使って以下のように送ることで試せます: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
+
+これは、**\_method parameter を POST リクエスト内に含める**か、次のような headers を使って送ることでも動作する可能性があります:
- _X-HTTP-Method_
- _X-HTTP-Method-Override_
- _X-Method-Override_
-### カスタムヘッダートークンのバイパス
+### Custom header token bypass
-リクエストが**CSRF保護メソッド**として**トークン**を持つ**カスタムヘッダー**を追加している場合:
+リクエストに CSRF protection method として **custom header** に **token** を追加している場合は、次を試してください:
-- **カスタマイズされたトークンとヘッダーなしでリクエストをテスト**します。
-- **同じ長さだが異なるトークンでリクエストをテスト**します。
+- **Customized Token と header の両方を省いた**状態でリクエストをテストする。
+- 同じ長さだが異なる token を使ってリクエストをテストする。
-### CSRFトークンがクッキーによって検証される
+### CSRF token is verified by a cookie
-アプリケーションは、トークンをクッキーとリクエストパラメータの両方に複製することによってCSRF保護を実装するか、CSRFクッキーを設定し、バックエンドで送信されたトークンがクッキーに対応しているかを検証することがあります。アプリケーションは、リクエストパラメータ内のトークンがクッキーの値と一致するかを確認することでリクエストを検証します。
+アプリケーションは、token を cookie とリクエスト parameter の両方に複製するか、CSRF cookie をセットしてバックエンドで送信された token がその cookie に対応しているかを検証することで CSRF 保護を実装することがあります。アプリケーションは、リクエスト parameter の token が cookie の値と一致するかをチェックしてリクエストを検証します。
-しかし、この方法は、攻撃者が被害者のブラウザにCSRFクッキーを設定できる欠陥がある場合、CSRF攻撃に対して脆弱です。攻撃者は、クッキーを設定する欺瞞的な画像を読み込んだ後、CSRF攻撃を開始することでこれを悪用できます。
+しかし、この方法は、攻撃者が被害者のブラウザに CSRF cookie を設定できてしまうような脆弱性(例: CRLF 脆弱性)があると CSRF 攻撃に対して脆弱になります。攻撃者は、まず不正な画像を読み込ませて cookie を設定させ、続けて CSRF 攻撃を開始することでこれを悪用できます。
-以下は、攻撃がどのように構成されるかの例です:
+以下は攻撃の構成例です:
```html
@@ -103,19 +131,19 @@ onerror="document.forms[0].submit();" />
```
> [!TIP]
-> セッションクッキーに**csrfトークンが関連付けられている場合、この攻撃は機能しません**。なぜなら、被害者のセッションを設定する必要があり、そのため自分自身を攻撃することになります。
+> 注意: **csrf token が session cookie に関連している場合、この攻撃は機能しません**。なぜなら被害者の session を設定する必要があり、その結果自分自身を攻撃することになるからです。
### Content-Typeの変更
-[**これ**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)によると、**POST**メソッドを使用して**プレフライト**リクエストを回避するために、許可されているContent-Typeの値は次のとおりです。
+According to [**this**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests), in order to **preflight を回避する** requests using **POST** method these are the allowed Content-Type values:
- **`application/x-www-form-urlencoded`**
- **`multipart/form-data`**
- **`text/plain`**
-ただし、使用される**Content-Type**によって**サーバーのロジックが異なる場合がある**ため、上記の値や**`application/json`**、**`text/xml`**、**`application/xml`**などの他の値も試すべきです。
+However, note that the **サーバのロジックは異なる場合があります** depending on the **Content-Type** used so you should try the values mentioned and others like **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._
-例([こちら](https://brycec.me/posts/corctf_2021_challenges)から)では、JSONデータをtext/plainとして送信しています:
+Example (from [here](https://brycec.me/posts/corctf_2021_challenges)) of sending JSON data as text/plain:
```html