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

 

概要 :

HackerOneのプライベートプログラムのスコープ内に多くのドメインがあって。

ドメインの1つで、CSRFの脆弱性を発見して。

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

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

また、自分で登録できるアカウントには下記の2つの異なるタイプがあって。

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

 トライアルアカウント

 

トライアルアカウントでは、29日間のトライアルがあって。

キャンセルすることもできるので、安全でない直接オブジェクト参照攻撃を。

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

 

トライアルアカウントで登録したところ。

「エンタープライズキャンセル」のオプションがあって。

このオプションをクリックするとアカウントが自動的に削除されて。

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

 googleAnalyticsId=<Value>&mktToken=<Value>

 

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

パラメータ値がなくて。

 googleAnalyticsId=&mktToken=

 

なので、CSRF攻撃に対して脆弱である可能性があると思たものの。

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

下記のように変更して、CSRFリクエストを作成することに。

 

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

 ⇩

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

 

他にもリファラーヘッダも変更することに。

 

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

 ⇩

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

 

CSRFとは?

 クロスサイトリクエストフォージェリは。

 攻撃者がユーザに意図しないアクションを実行させることを可能にする脆弱性で。

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

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

 

IDORとは?

 安全でない直接オブジェクト参照(IDOR)は。

 アプリケーションがユーザ指定の入力を使用して。

 オブジェクトに直接アクセスするときに発生するアクセス制御の脆弱性の一種で。

 

脆弱性を発見した手順:

 1.2つの異なるブラウザ(FirefoxFirefox Private)からに下記にアクセスして。

  https://example.com
   

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

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

 4.被害者のアカウントdefendingera)から下記へアクセスすると。

   https://example.com/defendingera/account/account

 

f:id:ThisIsOne:20210903160051p:plain

 

  攻撃者のエンタープライズ(試用)アカウントpentesterworld)を。

  キャンセルするオプションを見つけて。

   https://example.com/pentesterworld/account/account

 

f:id:ThisIsOne:20210903160111p:plain

 

f:id:ThisIsOne:20210903160149p:plain

 

5.Cansel Trialボタンをクリックして。

 Burp Suiteを使用してリクエストをキャプチャすると。

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

  googleAnalyticsId=&mktToken=

 

f:id:ThisIsOne:20210903160215p:plain

 

 6.ユーザ名をpentesterworld defendingeraに変更して。

  GETリクエストのURLとリファラーヘッダでCSRF PoCを作成することに。

 

f:id:ThisIsOne:20210903160242p:plain

 

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

 

f:id:ThisIsOne:20210903160744p:plain

 

f:id:ThisIsOne:20210903160716p:plain

 

 8.私はそれを実行し、defendingeraアカウントでページをリロードすると。

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

 

f:id:ThisIsOne:20210903160624p:plain

 

ちなみに、実際のターゲットアカウントの電子メールIDは。

sovovem334@yektara.com(Temp Mail)で。

 

f:id:ThisIsOne:20210903160447p:plain

 

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

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

両方のアカウント(account1account2)のリクエストを比較することに。

 

f:id:ThisIsOne:20210903160358p:plain

 

注:

 pentesterworldが攻撃者のアカウント、defendingeraが被害者のアカウントで。

 

緩和 :

 適切なCSRFトークンをリクエストに追加して。

 サーバ側だけでなくクライアント側でも検証する必要があって。

 

Best regards, (^^ゞ