Shikata Ga Nai

Private? There is no such things.

CSRF with IDOR - A Deadly Comboを訳してみた

Hello there, ('ω')ノ

 

IDORを使用したCSRF-致命的なコンボを。

 

脆弱性:

 CSRF

 IDOR

 

記事:

 https://shahjerry33.medium.com/csrf-with-idor-a-deadly-combo-203e93967702

 

概要 :

今回は、スコープ内に非常に多くのドメインがあったので。

それらのいくつかをテストすることを考えて。

ドメインの1つで。

この脆弱性であるクロスサイトリクエストフォージェリを見つけて。

これを安全でない直接オブジェクト参照と組み合わせると。

誰のアカウントも削除できて。

 

そのドメインでさまざまな脆弱性を検索していましたが。

自分で登録できるアカウントには、2つの異なるタイプがあることがわかって。

    1.オープンソースアカウント

    2.トライアルアカウント

 

トライアルアカウントでは、29日間のトライアルを取得し。

キャンセルすることもできるので、最初にInsecure Direct Object Reference攻撃を。

試すことを考えましたが、うまくいかず。

IDORの助けを借りて、CSRFを進めると成功して。

 

トライアルアカウントで登録した場合、「エンタープライズキャンセル」の。

オプションがありましたが、このオプションをクリックすると。

アカウントが自動的に削除されて。

リクエストには、2つのパラメータがあって。

 googleAnalyticsId=<Value>&mktToken=<Value>

 

プライベートブラウザで別のアカウントのリクエストをキャプチャしたとき。

たとえば値が渡されていないパラメータしかなくて。

googleAnalyticsId=&mktToken=)なので、CSRF攻撃に対して。

脆弱である可能性があると思いましたが。

GETリクエストにはアカウントのユーザ名が含まれていたので。

CSRFリクエストを作成することを考えることに。

 GET /userName1/account/cancelTrial/?&googleAnalyticsId=&mktToken=

 

そこで、ユーザ名を変更してCSRFリクエストを作成することを考えることに。

 GET /userName2/account/cancelTrial/?&googleAnalyticsId=&mktToken=

 

しかし、まだ何かが残っていたので。

リファラであるリファラヘッダをチェックすることに。

 https://example.com/userName1/account/account

 

そこで、referrerヘッダをRefererに変更すると。

CSRF攻撃では、攻撃は成功しました。

 https://example.com/userName2/account/account

 

CSRFとは、クロスサイトリクエストフォージェリで。

攻撃者がユーザに意図しないアクションを実行させることを。

可能にするWebセキュリティの脆弱性で。

これにより、攻撃者は異なるWebサイトが相互に干渉するのを防ぐように。

設計された同一生成元ポリシーを部分的に回避できて。

 

IDORとは、安全でない直接オブジェクト参照で、アプリケーションが。

ユーザ提供の入力を使用してオブジェクトに直接アクセスするときに。

発生するアクセス制御の脆弱性の一種で。

 

この脆弱性をどのように見つけたかというと。

1.2つの異なるブラウザ(通常とプライベート)から。

 https://example.comにアクセスして。


2. 次に、両方のブラウザでトライアルアカウントを作成して。

 

3.リンクを確認してダッシュボードに移動して。

 

4.次に、2番目のアカウント(2番目のブラウザ)から。

 https://example.com/<userName2>/account /

 のアカウントのリンクにアクセスして。

 ここで、エンタープライズ(試用版)アカウントのキャンセルの。

 オプションを見つけて。

 

アカウント1(defendingera:被害者)


アカウント2(pentesterworld:攻撃者)


アカウントの削除

 

5.次に、ボタンをクリックし、Burp Suiteを使用して。

 リクエストをキャプチャして。

 下記が、cancelTrial/Deletionリクエストで。

 ここで、googleAnalyticsId=&mktToken=の。

 パラメータ値を削除したことがわかって。

 

 

6.次に、ユーザ名をGETリクエストURLおよびリファラヘッダで変更して。

  pentesterworld(攻撃者のアカウント)⇨ defendingera(被害者のアカウント)

 

 

7.次に、defendingera(被害者のアカウント)に変更したリクエストで。

 CSRF PoCを生成し、.htmlとして保存して。


PoC-(概念実証)

 

8.それを実行し、最初のブラウザアカウントでページをリロードすると。

 アカウントが削除されて。


PoCの実行


アカウントが削除されて。

 

 

ここで、ターゲットアカウントの電子メールIDは下記で。

 sovovem334@yektara.com(Temp Mail)

 

 

脆弱性をよりよく理解するために。

2つの異なるブラウザ(FirefoxとFirefox Private)で開いて。

両方のアカウント(account1とaccount2)のリクエストを比較して。

Burp Suiteの「Comparer」モジュールを使用してリクエストを比較して。

 

注:ここでは、pentesterworldが攻撃者のアカウントであり。

 defendingeraが被害者のアカウントで。

 

緩和 :

 適切なCSRFトークンをリクエストに追加し、サーバ側だけでなく。

 クライアント側でも検証する必要があって。

 

Best regards, (^^ゞ