Shikata Ga Nai

Private? There is no such things.

Stealing Chat session ID with CORS and execute CSRF attackを訳してみた

Hello there, ('ω')ノ

 

CORSでチャットセッションIDを盗んでCSRF攻撃の実行を。

 

脆弱性:

 CSRF

 CORSの設定ミス

 

記事:

 https://sunilyedla.medium.com/stealing-chat-session-id-with-cors-and-execute-csrf-attack-f9f7ea229db1

 

今回は、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>

 

f:id:ThisIsOne:20210820140235p:plain

 

結論:

攻撃者は最初に被害者ユーザのチャットセッションIDを盗んで。

次にCSRF攻撃を実行して、被害者ユーザーとしてメッセージを送信して。

 

Best regards, (^^ゞ