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つの異なるブラウザ(FirefoxとFirefox Private)からに下記にアクセスして。
2.両方のブラウザでトライアルアカウントを作成して。
3.リンクを確認してダッシュボードに移動して。
4.被害者のアカウント(defendingera)から下記へアクセスすると。
https://example.com/defendingera/account/account
攻撃者のエンタープライズ(試用)アカウント(pentesterworld)を。
キャンセルするオプションを見つけて。
https://example.com/pentesterworld/account/account
5.Cansel Trialボタンをクリックして。
Burp Suiteを使用してリクエストをキャプチャすると。
下記のパラメータ値を削除したことがわかって。
googleAnalyticsId=&mktToken=
6.ユーザ名をpentesterworld ⇨ defendingeraに変更して。
GETリクエストのURLとリファラーヘッダでCSRF PoCを作成することに。
7.CSRF PoCを生成して、htmlとして保存して。
8.私はそれを実行し、defendingeraアカウントでページをリロードすると。
アカウントが削除されて。
ちなみに、実際のターゲットアカウントの電子メールIDは。
sovovem334@yektara.com(Temp Mail)で。
脆弱性をよりよく理解するために。
2つの異なるブラウザ(FirefoxとFirefox Private)で開いている。
両方のアカウント(account1とaccount2)のリクエストを比較することに。
注:
pentesterworldが攻撃者のアカウント、defendingeraが被害者のアカウントで。
緩和 :
適切なCSRFトークンをリクエストに追加して。
サーバ側だけでなくクライアント側でも検証する必要があって。
Best regards, (^^ゞ