・Web APIのCSRF脆弱性
4g-022 : CSRF脆弱なメールアドレス変更【ブラウザ】

【サーバ： 4g/4g-022.ｈｔｍｌ 】【サーバ： 4g/4g-020.php 】【サーバ： 4g/4g-021.php 】

【ブラウザ→サーバ： リクエスト 4g/4g-022.html → レスポンス 】

【ブラウザ→サーバ： リクエスト 4g/4g-020.php → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-021.php → レスポンス 】

【ブラウザ→サーバ： リクエスト 4g/4g-020.php → レスポンス 】

4g-022 : CSRF脆弱なメールアドレス変更【ブラウザ】「cracked@example.jp」に変更してしまっています【サーバ： 4g/4g-921.html 】

XMLHttpRequestのWithCredentialsプロパティをtrueに設定して、APIを呼び出しています
API側でクロスオリジンの呼び出しを許可していないので、罠サイトのJavaScriptではHTTPレスポンスを参照できませんが、CSRF攻撃はHTTPリクエストを送るだけで成立します【サーバ： 4g/4g-021.php 】

【ブラウザ→偽サーバ： リクエスト trap.example.com/4g/4g-921.html → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-021.php → レスポンス 】「cracked@example.jp」に変更してしまっています4g-022a : CSRF対策済みのメールアドレス変更 （CSRFトークン）【ブラウザ】

【サーバ： 4g/4g-022a.html 】【サーバ： 4g/4g-020a.php 】

セッション変数にトークンを設定トークンをJSONで返す【サーバ：4g/4g-021a.php 】

HTTPリクエストヘッダ X-CSRF-TOKENのトークンとセッション変数のトークンが、同一であることをチェック

HTTPリクエストヘッダ X-CSRF-TOKENにトークンをセット【ブラウザ→サーバ： リクエスト 4g/4g-022a.html → レスポンス 】

【ブラウザ→サーバ： リクエスト 4g/4g-020a.php → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-021a.php → レスポンス 】

【ブラウザ→サーバ： リクエスト 4g/4g-020a.php → レスポンス 】

4g-921a : CSRF攻撃 （CSRFトークン）【ブラウザ】【サーバ： 4g/4g-921a.html 】

罠サイトではクッキーは分からないので、ALL「０」をセット【サーバ： 4g/4g-021a.php 】

【ブラウザ→偽サーバ： リクエスト trap.example.com/4g/4g-921a.html → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-021a.html → レスポンス 】

4g-022b : CSRF対策済みのメールアドレス変更 （２重送信クッキー）【ブラウザ】

【サーバ： 4g/4g-022b.html 】【サーバ： 4g/4g-020b.php 】【サーバ：4g/4g-021b.php 】

【ブラウザ→サーバ： リクエスト 4g/4g-022b.html → レスポンス 】

【ブラウザ→サーバ： リクエスト js.cookie.js → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-020.php → レスポンス 】

【ブラウザ→サーバ： リクエスト 4g/4g-021b.php → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-020b.php → レスポンス 】

4g-022b : CSRF攻撃 （２重送信クッキー）【ブラウザ】【サーバ： 4g/4g-921ｂ.html 】【サーバ： 4g/4g-021ｂ.php 】

【ブラウザ→偽サーバ： リクエスト trap.example.com/4g/4g-921b.html → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-021b.php → レスポンス 】

4g-022c : CSRF対策済みのメールアドレス変更 （カスタムリクエストヘッダ）【ブラウザ】

【サーバ： 4g/4g-022c.html 】【サーバ： 4g/4g-020.php 】【サーバ： 4g/4g-021c.php 】

【ブラウザ→サーバ： リクエスト 4g/4g-022c.html → レスポンス 】

【ブラウザ→サーバ： リクエスト js/jquery-3.2.1.min.js → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-020.php → レスポンス 】

【ブラウザ→サーバ： リクエスト 4g/4g-021c.php → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-020.php → レスポンス 】

4g-921c : CSRF攻撃 （カスタムリクエストヘッダ）【ブラウザ】【サーバ： 4g/4g-921c.html 】【サーバ： 4g/4g-021c.php 】

【ブラウザ→サーバ： リクエスト 4g/4g-921c.html → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-021c.php → レスポンス 】

4g-921d : CSRF攻撃(2) （カスタムリクエストヘッダ）【ブラウザ】【サーバ： 4g/4g-921d.html 】【サーバ： 4g/4g-021c.php 】

【ブラウザ→偽サーバ： リクエスト trap.example.com/4g/4g-921d.html → レスポンス 】【ブラウザ→サーバ： リクエスト 4g/4g-021c.php → レスポンス 】

・JSONハイジャック
4g-030 : JSONのサンプル【ブラウザ】【サーバ： 4g/4g-030.json 】【ブラウザ→サーバ： リクエスト 4g-030.json → レスポンス 】

4g-930 : JSONをscript要素で読み出そうとする【ブラウザ】

読み出そうとしているが、表示されない【サーバ： 4g/4g-930.html 】【ブラウザ→偽サーバ： リクエスト trap.example.com/4g/4g-030.json → レスポンス 】

読み出そうとしているが、表示されない

4g-931 : JSONハイジャック(古いFirefoxで再現)【ブラウザ】

古いFirefoxではないので、内容は表示されない

古いFirefoxではあれば、内容が表示される（予想イメージ）【サーバ： 4g/4g-931.html 】

【ブラウザ→偽サーバ： リクエスト trap.example.com/4g/4g-931.html → レスポンス 】

・JSONPの不適切な利用
4g-040 : ログイン(api.example.net)【ブラウザ】【サーバ： 4g/4g-040.php 】【ブラウザ→APIサーバ： リクエスト 4g-040.php → レスポンス 】

4g-042 : 個人情報の表示(正常系)【ブラウザ】【サーバ： 4g/4g-042.html 】【サーバ： 4g/4g-041.php 】

【ブラウザ→サーバ： リクエスト 4g/4g-042.html → レスポンス 】【ブラウザ→サーバ： リクエスト js/jquery-3.2.1.min.js → レスポンス 】

【ブラウザ→APIサーバ： リクエスト 4g/4g-041.php → レスポンス 】

4g-042 : 罠サイトから個人情報の表示【ブラウザ】

JSONPには呼び出し元のオリジンに対する制御の機能がない
罠サイトから何の工夫もなく表示できてしまう【サーバ： 4g/4g-042.html 】【サーバ： 4g/4g-041.php 】

【ブラウザ→偽サーバ： リクエスト trap.example.com/4g/4g-042.html → レスポンス 】【ブラウザ→サーバ： リクエスト js/jquery-3.2.1.min.js → レスポンス 】

【ブラウザ→サーバ： リクエスト 4g/4g-041.php → レスポンス 】