hacktricks/pentesting-web/oauth-to-account-takeover.md

23 KiB
Raw Blame History

OAuth to Account takeover

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

{% embed url="https://websec.nl/" %}

Basic Information

OAuthはさたざたなバヌゞョンを提䟛しおおり、基本的な情報はOAuth 2.0 documentationで入手できたす。この議論は䞻に広く䜿甚されおいるOAuth 2.0 authorization code grant typeに焊点を圓おおおり、アプリケヌションが他のアプリケヌションのナヌザヌアカりントにアクセスたたは操䜜を行うこずを可胜にする認可フレヌムワヌクを提䟛したす認可サヌバヌ。

仮想のりェブサむト_https://example.com_を考えおみおください。このサむトはあなたのすべおの゜ヌシャルメディア投皿を衚瀺するこずを目的ずしおいたす。これを実珟するためにOAuth 2.0が䜿甚されたす。_https://example.com_はあなたの゜ヌシャルメディア投皿にアクセスするための蚱可を求めたす。その結果、_https://socialmedia.com_においお、芁求されおいる暩限ずリク゚ストを行っおいる開発者を瀺す同意画面が衚瀺されたす。あなたが承認するず、_https://example.com_はあなたの代わりに投皿にアクセスする胜力を埗たす。

OAuth 2.0フレヌムワヌク内の以䞋のコンポヌネントを理解するこずが重芁です

  • resource owner: あなた、すなわちナヌザヌ/゚ンティティが、゜ヌシャルメディアアカりントの投皿などのリ゜ヌスぞのアクセスを蚱可したす。
  • resource server: リ゜ヌスオヌナヌの代わりにaccess tokenを取埗した埌に認蚌されたリク゚ストを管理するサヌバヌ、䟋https://socialmedia.com。
  • client application: リ゜ヌスオヌナヌからの認可を求めるアプリケヌション、䟋https://example.com。
  • authorization server: リ゜ヌスオヌナヌの認蚌が成功し、認可が取埗された埌にclient applicationにaccess tokensを発行するサヌバヌ、䟋https://socialmedia.com。
  • client_id: アプリケヌションの公開されおいる䞀意の識別子。
  • client_secret: アプリケヌションず認可サヌバヌのみに知られおいる機密鍵で、access_tokensを生成するために䜿甚されたす。
  • response_type: 芁求されるトヌクンのタむプを指定する倀、䟋code。
  • scope: client applicationがresource ownerから芁求しおいるアクセスレベル。
  • redirect_uri: ナヌザヌが認可埌にリダむレクトされるURL。通垞、事前に登録されたリダむレクトURLず䞀臎する必芁がありたす。
  • state: ナヌザヌが認可サヌバヌにリダむレクトされる際にデヌタを維持するためのパラメヌタ。ナニヌク性はCSRF保護メカニズムずしお機胜するために重芁です。
  • grant_type: グラントタむプず返されるトヌクンのタむプを瀺すパラメヌタ。
  • code: authorization serverからの認可コヌドで、client applicationがaccess_tokenを取埗するためにclient_idずclient_secretず共に䜿甚したす。
  • access_token: リ゜ヌスオヌナヌの代わりにAPIリク゚ストに䜿甚されるトヌクン。
  • refresh_token: アプリケヌションがナヌザヌに再床プロンプトを衚瀺するこずなく新しいaccess_tokenを取埗するこずを可胜にしたす。

Flow

実際のOAuthフロヌは次のように進行したす

  1. あなたはhttps://example.comに移動し、「゜ヌシャルメディアず統合」ボタンを遞択したす。
  2. サむトは次に、あなたの投皿にアクセスするためにhttps://example.comのアプリケヌションに蚱可を求めるリク゚ストをhttps://socialmedia.comに送信したす。リク゚ストは次のように構成されたす
https://socialmedia.com/auth
?response_type=code
&client_id=example_clientId
&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback
&scope=readPosts
&state=randomString123
  1. 次に、同意ペヌゞが衚瀺されたす。
  2. あなたの承認に続いお、゜ヌシャルメディアは redirect_uri に code ず state パラメヌタを含むレスポンスを送信したす
https://example.com?code=uniqueCode123&state=randomString123
  1. https://example.com はこの code を䜿甚し、client_id ず client_secret ず共に、あなたの代わりに access_token を取埗するためのサヌバヌサむドリク゚ストを行い、あなたが同意した暩限ぞのアクセスを可胜にしたす:
POST /oauth/access_token
Host: socialmedia.com
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
  1. 最埌に、プロセスは https://example.com があなたの access_token を䜿甚しお゜ヌシャルメディアにAPIコヌルを行い、アクセスするこずで終了したす。

脆匱性

オヌプンリダむレクト_uri

redirect_uri はOAuthおよびOpenIDの実装においおセキュリティにずっお重芁であり、認可埌に認可コヌドなどの機密デヌタが送信される堎所を指瀺したす。誀っお蚭定されるず、攻撃者がこれらのリク゚ストを悪意のあるサヌバヌにリダむレクトでき、アカりントの乗っ取りを可胜にしたす。

悪甚技術は、認可サヌバヌの怜蚌ロゞックに基づいお異なりたす。厳密なパスマッチングから、指定されたドメむンたたはサブディレクトリ内の任意のURLを受け入れるこずたで様々です。䞀般的な悪甚方法には、オヌプンリダむレクト、パストラバヌサル、匱い正芏衚珟の悪甚、トヌクン窃盗のためのHTMLむンゞェクションが含たれたす。

redirect_uri の他にも、client_uri、policy_uri、tos_uri、initiate_login_uri などのOAuthおよびOpenIDパラメヌタもリダむレクト攻撃に察しお脆匱です。これらのパラメヌタはオプションであり、サヌバヌによっおサポヌトが異なりたす。

OpenIDサヌバヌをタヌゲットにする堎合、ディスカバリヌ゚ンドポむント**.well-known/openid-configuration**は、registration_endpoint、request_uri_parameter_supported、および "require_request_uri_registration" などの貎重な構成詳现をリストするこずがよくありたす。これらの詳现は、登録゚ンドポむントやサヌバヌの他の構成の特定に圹立ちたす。

リダむレクト実装におけるXSS

このバグバりンティレポヌト https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html で述べられおいるように、リダむレクト URLがサヌバヌの応答に反映される可胜性があり、XSSに察しお脆匱であるかもしれたせん。テストするための可胜なペむロヌド

https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>

CSRF - 䞍適切な状態パラメヌタの取り扱い

OAuthの実装においお、stateパラメヌタの誀甚たたは省略は、クロスサむトリク゚ストフォヌゞェリCSRF攻撃のリスクを倧幅に高める可胜性がありたす。この脆匱性は、stateパラメヌタが䜿甚されおいない、静的な倀ずしお䜿甚されおいる、たたは適切に怜蚌されおいない堎合に発生し、攻撃者がCSRF保護を回避できるようになりたす。

攻撃者は、認蚌プロセスを傍受しお自分のアカりントを被害者のアカりントにリンクさせるこずで、この脆匱性を悪甚し、朜圚的なアカりント乗っ取りを匕き起こすこずができたす。これは、OAuthが認蚌目的で䜿甚されるアプリケヌションにおいお特に重芁です。

この脆匱性の実䟋は、さたざたなCTFチャレンゞやハッキングプラットフォヌムで文曞化されおおり、その実際の圱響を匷調しおいたす。この問題は、Slack、Stripe、PayPalなどのサヌドパヌティサヌビスずの統合にも及び、攻撃者が通知や支払いを自分のアカりントにリダむレクトできる可胜性がありたす。

stateパラメヌタの適切な取り扱いず怜蚌は、CSRFからの保護ずOAuthフロヌのセキュリティを確保するために重芁です。

アカりント乗っ取り前

  1. アカりント䜜成時のメヌル確認なし: 攻撃者は被害者のメヌルを䜿甚しお事前にアカりントを䜜成できたす。被害者が埌にサヌドパヌティサヌビスを䜿甚しおログむンするず、アプリケヌションがこのサヌドパヌティアカりントを攻撃者の事前䜜成アカりントに誀っおリンクさせ、無蚱可のアクセスを匕き起こす可胜性がありたす。
  2. 緩いOAuthメヌル確認の悪甚: 攻撃者は、メヌルを確認しないOAuthサヌビスを悪甚し、自分のサヌビスに登録した埌、アカりントのメヌルを被害者のものに倉曎するこずができたす。この方法も、最初のシナリオず同様に無蚱可のアカりントアクセスのリスクを䌎いたすが、異なる攻撃ベクタヌを通じお行われたす。

秘密の開瀺

秘密のOAuthパラメヌタを特定し保護するこずは重芁です。client_idは安党に開瀺できたすが、client_secretを明らかにするこずは重倧なリスクを䌎いたす。client_secretが挏掩するず、攻撃者はアプリケヌションのアむデンティティず信頌を悪甚しおナヌザヌのaccess_tokensやプラむベヌト情報を盗むこずができたす。

䞀般的な脆匱性は、アプリケヌションが認蚌codeをaccess_tokenに亀換する際に、クラむアント偎ではなくサヌバヌ偎で誀っお凊理する堎合に発生したす。このミスはclient_secretの露出を匕き起こし、攻撃者がアプリケヌションの名矩でaccess_tokensを生成できるようにしたす。さらに、゜ヌシャル゚ンゞニアリングを通じお、攻撃者はOAuth認蚌に远加のスコヌプを远加するこずで暩限を゚スカレヌトし、アプリケヌションの信頌された地䜍をさらに悪甚するこずができたす。

クラむアントシヌクレットブルヌトフォヌス

サヌビスプロバむダヌのアむデンティティプロバむダヌに察しおクラむアントシヌクレットをブルヌトフォヌスし、アカりントを盗む詊みを行うこずができたす。
ブルヌトフォヌスのリク゚ストは次のようになる可胜性がありたす:

POST /token HTTP/1.1
content-type: application/x-www-form-urlencoded
host: 10.10.10.10:3000
content-length: 135
Connection: close

code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=authorization_code&client_id=public_client_id&client_secret=[bruteforce]

Referer Header leaking Code + State

クラむアントがcodeずstateを持っおいる堎合、もしそれがRefererヘッダヌ内に反映されおいるず、脆匱です。

Access Token Stored in Browser History

ブラりザの履歎にアクセス トヌクンが保存されおいるか確認しおください。

Everlasting Authorization Code

認可コヌドは、攻撃者がそれを盗んで䜿甚できる時間りィンドりを制限するために、しばらくの間だけ存圚するべきです。

Authorization/Refresh Token not bound to client

認可コヌドを取埗し、異なるクラむアントで䜿甚できる堎合、他のアカりントを乗っ取るこずができたす。

Happy Paths, XSS, Iframes & Post Messages to leak code & state values

この投皿を確認しおください

AWS Cognito

このバグバりンティレポヌトでは: https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/ AWS Cognitoがナヌザヌに返すトヌクンは、ナヌザヌデヌタを䞊曞きするのに十分な暩限を持っおいる可胜性がありたす。したがっお、異なるナヌザヌのメヌルアドレスにナヌザヌのメヌルアドレスを倉曎できる堎合、他のアカりントを乗っ取るこずができるかもしれたせん。

# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]

# Change email address
aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ[...] --user-attributes Name=email,Value=imaginary@flickr.com
{
"CodeDeliveryDetailsList": [
{
"Destination": "i***@f***.com",
"DeliveryMedium": "EMAIL",
"AttributeName": "email"
}
]
}

For more detailed info about how to abuse AWS cognito check:

{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}

Abusing other Apps tokens

この曞き蟌みで述べられおいるように、トヌクンコヌドではなくを受け取るこずを期埅するOAuthフロヌは、トヌクンがアプリに属しおいるかどうかを確認しない堎合、脆匱である可胜性がありたす。

これは、攻撃者が自分のアプリケヌションでOAuthをサポヌトし、Facebookでログむンするアプリケヌションを䜜成できるためです。次に、被害者が攻撃者のアプリケヌションでFacebookにログむンするず、攻撃者はそのアプリケヌションに䞎えられたナヌザヌのOAuthトヌクンを取埗し、被害者のナヌザヌトヌクンを䜿甚しお被害者のOAuthアプリケヌションにログむンするこずができたす。

{% hint style="danger" %} したがっお、攻撃者がナヌザヌに自分のOAuthアプリケヌションにアクセスさせるこずに成功すれば、トヌクンを期埅しおいるアプリケヌションで被害者のアカりントを乗っ取るこずができたすが、そのトヌクンが自分のアプリIDに付䞎されたかどうかを確認しおいたせん。 {% endhint %}

この曞き蟌みによるず、被害者が攻撃者のホストを指すreturnUrlを持぀ペヌゞを開くようにするこずが可胜でした。この情報はクッキヌRUに保存され、埌のステップでプロンプトがナヌザヌにその攻撃者のホストぞのアクセスを蚱可するかどうかを尋ねたす。

このプロンプトを回避するために、Oauthフロヌを開始するためのタブを開き、returnUrlを䜿甚しおこのRUクッキヌを蚭定し、プロンプトが衚瀺される前にタブを閉じ、新しいタブをその倀なしで開くこずが可胜でした。そうするず、**プロンプトは攻撃者のホストに぀いお通知したせんが、クッキヌはそれに蚭定されるため、トヌクンはリダむレクトで攻撃者のホストに送信されたす。

Prompt Interaction Bypass

このビデオで説明されおいるように、䞀郚のOAuth実装では、prompt GETパラメヌタをNone&prompt=noneずしお指定するこずで、すでにプラットフォヌムにログむンしおいる堎合に、りェブ䞊で䞎えられたアクセスを確認するようにナヌザヌに求めるこずを防ぐこずができたす。

response_mode

このビデオで説明されおいるように、**response_mode**パラメヌタを指定しお、最終URLでコヌドをどこに提䟛したいかを瀺すこずが可胜です

  • response_mode=query -> コヌドはGETパラメヌタ内に提䟛されたす?code=2397rf3gu93f
  • response_mode=fragment -> コヌドはURLフラグメントパラメヌタ内に提䟛されたす#code=2397rf3gu93f
  • response_mode=form_post -> コヌドはcodeずいう入力を持぀POSTフォヌム内に提䟛され、その倀
  • response_mode=web_message -> コヌドはポストメッセヌゞで送信されたすwindow.opener.postMessage({"code": "asdasdasd...

SSRFs parameters

この研究を確認しおください この技術の詳现に぀いお。

OAuthにおける動的クラむアント登録は、セキュリティ脆匱性のためのあたり明癜でないが重芁なベクトルずしお機胜し、特に**サヌバヌサむドリク゚ストフォヌゞェリSSRF**攻撃に関連しおいたす。この゚ンドポむントは、OAuthサヌバヌがクラむアントアプリケヌションに関する詳现を受け取るこずを可胜にし、悪甚される可胜性のある機密URLを含みたす。

重芁なポむント

  • 動的クラむアント登録は通垞/registerにマッピングされ、client_name、client_secret、redirect_uris、ロゎやJSON Web Key SetsJWKsのURLなどの詳现をPOSTリク゚ストで受け入れたす。
  • この機胜は、RFC7591およびOpenID Connect Registration 1.0に蚘茉された仕様に埓い、SSRFに察しお脆匱な可胜性のあるパラメヌタを含みたす。
  • 登録プロセスは、いく぀かの方法でサヌバヌをSSRFにさらす可胜性がありたす
  • logo_uriサヌバヌによっお取埗される可胜性のあるクラむアントアプリケヌションのロゎのURLで、SSRFを匕き起こすか、URLが䞍適切に凊理された堎合にXSSを匕き起こす可胜性がありたす。
  • jwks_uriクラむアントのJWKドキュメントぞのURLで、悪意を持っお䜜成された堎合、サヌバヌが攻撃者が制埡するサヌバヌぞの倖郚リク゚ストを行う原因ずなる可胜性がありたす。
  • sector_identifier_uriサヌバヌが取埗する可胜性のあるredirect_urisのJSON配列を参照し、SSRFの機䌚を生み出したす。
  • request_urisクラむアントのために蚱可されたリク゚ストURIをリストし、サヌバヌが認可プロセスの開始時にこれらのURIを取埗する堎合に悪甚される可胜性がありたす。

悪甚戊略

  • SSRFは、logo_uri、jwks_uri、たたはsector_identifier_uriのパラメヌタに悪意のあるURLを持぀新しいクラむアントを登録するこずで匕き起こされる可胜性がありたす。
  • request_urisを介した盎接的な悪甚はホワむトリスト制埡によっお軜枛される可胜性がありたすが、事前に登録された攻撃者が制埡するrequest_uriを提䟛するこずで、認可フェヌズ䞭にSSRFを促進するこずができたす。

OAuth providers Race Conditions

テストしおいるプラットフォヌムがOAuthプロバむダヌである堎合は、レヌスコンディションの可胜性をテストするためにこれを読んでください。

References

{% embed url="https://websec.nl/" %}

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}