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

36 KiB

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 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рдЪрд░реНрдЪрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ OAuth 2.0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдЕрдиреБрджрд╛рди рдкреНрд░рдХрд╛рд░ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЦрд╛рддреЗ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдпрд╛ рдЙрд╕ рдкрд░ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд░реНрд╡рд░)ред

рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ https://example.com рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рд╕рднреА рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдкреЛрд╕реНрдЯ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдЬреА рдкреЛрд╕реНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, OAuth 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред https://example.com рдЖрдкрдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧреЗрдЧрд╛ рдЖрдкрдХреЗ рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдкреЛрд╕реНрдЯ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, https://socialmedia.com рдкрд░ рдПрдХ рд╕рд╣рдорддрд┐ рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдФрд░ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ред рдЖрдкрдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рдиреЗ рдкрд░, https://example.com рдХреЛ рдЖрдкрдХреА рдУрд░ рд╕реЗ рдЖрдкрдХреЗ рдкреЛрд╕реНрдЯ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд┐рд▓рддреА рд╣реИред

OAuth 2.0 рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

  • resource owner: рдЖрдк, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рд╕рдВрд╕реНрдерд╛рди, рдЕрдкрдиреА рд╕рдВрд╕рд╛рдзрди, рдЬреИрд╕реЗ рдЖрдкрдХреЗ рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдЦрд╛рддреЗ рдХреЗ рдкреЛрд╕реНрдЯ, рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
  • resource server: рд╕рд░реНрд╡рд░ рдЬреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ access token рдХреЛ resource owner рдХреА рдУрд░ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реЛ, рдЬреИрд╕реЗ рдХрд┐ https://socialmedia.comред
  • client application: рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ resource owner рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ https://example.comред
  • authorization server: рд╕рд░реНрд╡рд░ рдЬреЛ client application рдХреЛ access tokens рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдЬрдм resource owner рдХреА рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ, рдЬреИрд╕реЗ рдХрд┐ 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: рдЯреЛрдХрди рдЬреЛ client application resource owner рдХреА рдУрд░ рд╕реЗ API рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • refresh_token: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд┐рдП рдПрдХ рдирдпрд╛ access_token рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

Flow

рд╡рд╛рд╕реНрддрд╡рд┐рдХ OAuth рдкреНрд░рд╡рд╛рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. рдЖрдк https://example.com рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ тАЬрд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░реЗрдВтАЭ рдмрдЯрди рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
  2. рд╕рд╛рдЗрдЯ рдлрд┐рд░ https://socialmedia.com рдкрд░ рдЖрдкрдХреЗ рдкреЛрд╕реНрдЯ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП https://example.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 рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

Vulnerabilities

Open redirect_uri

redirect_uri OAuth рдФрд░ OpenID рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб, рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдпрд╣ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЦрд╛рддрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╢реЛрд╖рдг рддрдХрдиреАрдХреЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд░реНрд╡рд░ рдХреА рдорд╛рдиреНрдпрддрд╛ рд▓реЙрдЬрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВред рдпреЗ рд╕рдЦреНрдд рдкрде рдорд┐рд▓рд╛рди рд╕реЗ рд▓реЗрдХрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбреЛрдореЗрди рдпрд╛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдХрд┐рд╕реА рднреА URL рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рддрдХ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╢реЛрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ, рдкрде рдпрд╛рддреНрд░рд╛, рдХрдордЬреЛрд░ regex рдХрд╛ рд╢реЛрд╖рдг, рдФрд░ рдЯреЛрдХрди рдЪреЛрд░реА рдХреЗ рд▓рд┐рдП HTML рдЗрдВрдЬреЗрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

redirect_uri рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреНрдп OAuth рдФрд░ OpenID рдкреИрд░рд╛рдореАрдЯрд░ рдЬреИрд╕реЗ client_uri, policy_uri, tos_uri, рдФрд░ initiate_login_uri рднреА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд╣рдорд▓реЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИрдВред рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ рдФрд░ рдЗрдирдХрд╛ рд╕рдорд░реНрдерди рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдЬреЛ рд▓реЛрдЧ OpenID рд╕рд░реНрд╡рд░ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдмрд┐рдВрджреБ (**.well-known/openid-configuration**) рдЕрдХреНрд╕рд░ рдореВрд▓реНрдпрд╡рд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╡рд░рдг рдЬреИрд╕реЗ registration_endpoint, request_uri_parameter_supported, рдФрд░ "require_request_uri_registration" рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдпреЗ рд╡рд┐рд╡рд░рдг рдкрдВрдЬреАрдХрд░рдг рдмрд┐рдВрджреБ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

XSS in redirect implementation

рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ 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 - Improper handling of state parameter

OAuth рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, state parameter рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ Cross-Site Request Forgery (CSRF) рд╣рдорд▓реЛрдВ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ рднреЗрджреНрдпрддрд╛ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм state parameter рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛, рд╕реНрдерд┐рд░ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ CSRF рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕рдХреЛ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдХреЗ рдкреАрдбрд╝рд┐рдд рдХреЗ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЦрд╛рддреЗ рдкрд░ рдХрдмреНрдЬрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрд╣рд╛рдБ OAuth рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рднреЗрджреНрдпрддрд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рднрд┐рдиреНрди CTF рдЪреБрдиреМрддрд┐рдпреЛрдВ рдФрд░ рд╣реИрдХрд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХреГрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдЗрд╕рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдорд╕реНрдпрд╛ Slack, Stripe, рдФрд░ PayPal рдЬреИрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рддрдХ рднреА рдлреИрд▓реА рд╣реБрдИ рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдорд▓рд╛рд╡рд░ рд╕реВрдЪрдирд╛рдУрдВ рдпрд╛ рднреБрдЧрддрд╛рдиреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдЦрд╛рддреЛрдВ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

state parameter рдХрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдмрдВрдзрди рдФрд░ рдорд╛рдиреНрдпрддрд╛ CSRF рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ OAuth рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

Pre Account Takeover

  1. рдЦрд╛рддреЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд┐рдирд╛: рд╣рдорд▓рд╛рд╡рд░ рдкреАрдбрд╝рд┐рдд рдХреЗ рдИрдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдЦрд╛рддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдкреАрдбрд╝рд┐рдд рдмрд╛рдж рдореЗрдВ рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЗрд╕ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЦрд╛рддреЗ рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдЦрд╛рддреЗ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИред
  2. OAuth рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреА рд▓рд╛рдкрд░рд╡рд╛рд╣реА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛: рд╣рдорд▓рд╛рд╡рд░ OAuth рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдИрдореЗрд▓ рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХрд░рдг рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рдЦрд╛рддреЗ рдХреЗ рдИрдореЗрд▓ рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреЗ рдИрдореЗрд▓ рдореЗрдВ рдмрджрд▓рдХрд░ред рдпрд╣ рд╡рд┐рдзрд┐ рднреА рдЕрдирдзрд┐рдХреГрдд рдЦрд╛рддрд╛ рдкрд╣реБрдВрдЪ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддреА рд╣реИ, рдкрд╣рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд╕рдорд╛рди рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╣рдорд▓реЗ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

Disclosure of Secrets

рдЧреБрдкреНрдд OAuth рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЬрдмрдХрд┐ client_id рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, client_secret рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬреЛрдЦрд┐рдо рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ client_secret рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдорд▓рд╛рд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ access_tokens рдФрд░ рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЪреЛрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рднреЗрджреНрдпрддрд╛ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЧрд▓рддреА рд╕реЗ рдЧреНрд░рд╛рд╣рдХ-рдкрдХреНрд╖ рдкрд░ access_token рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд code рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рди рдХрд┐ рд╕рд░реНрд╡рд░-рдкрдХреНрд╖ рдкрд░ред рдпрд╣ рдЧрд▓рддреА client_secret рдХреЗ рдЙрдЬрд╛рдЧрд░ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╣рд╛рдиреЗ access_tokens рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╛рдорд╛рдЬрд┐рдХ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдорд▓рд╛рд╡рд░ OAuth рдЕрдзрд┐рдХреГрдд рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреЛрдк рдЬреЛрдбрд╝рдХрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрдерд┐рддрд┐ рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Client Secret Bruteforce

рдЖрдк рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рддрд╛ рдХреЗ client_secret рдХреЛ bruteforce рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЦрд╛рддреЛрдВ рдХреЛ рдЪреБрд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд╕рдХреЗред
BF рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

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

рдПрдХ рдмрд╛рд░ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдХреЛрдб рдФрд░ рд╕реНрдЯреЗрдЯ рд╣реЛ, рдпрджрд┐ рдпрд╣ 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

Check this post

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 рдкреНрд░рд╡рд╛рд╣ рдЬреЛ token (рдФрд░ рди рдХрд┐ рдХреЛрдб) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдВрдЪрддреЗ рдХрд┐ token рдРрдк рдХрд╛ рд╣реИред

рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ OAuth рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреЗрд╕рдмреБрдХ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВред рдлрд┐рд░, рдЬрдм рдПрдХ рдкреАрдбрд╝рд┐рдд рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдлреЗрд╕рдмреБрдХ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдорд▓рд╛рд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ OAuth token рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреАрдбрд╝рд┐рдд OAuth рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреАрдбрд╝рд┐рдд рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ token рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИред

{% hint style="danger" %} рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд▓рд╛рд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ OAuth рдРрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрди рдРрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдореЗрдВ рдкреАрдбрд╝рд┐рдд рдХреЗ рдЦрд╛рддреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдЧрд╛ рдЬреЛ token рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ token рдЙрдирдХреЗ рдРрдк ID рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред {% endhint %}

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдПрдХ рдкреАрдбрд╝рд┐рдд рдПрдХ рдкреГрд╖реНрда рдЦреЛрд▓реЗ рдЬрд┐рд╕рдореЗрдВ returnUrl рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╣реЛрд╕реНрдЯ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдХреБрдХреА (RU) рдореЗрдВ рд╕реНрдЯреЛрд░ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдмрд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ prompt рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫреЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЙрд╕ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╣реЛрд╕реНрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рдЗрд╕ prompt рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдПрдХ рдЯреИрдм рдЦреЛрд▓рд╛ рдЬрд╛рдП рддрд╛рдХрд┐ Oauth рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдЗрд╕ RU рдХреБрдХреА рдХреЛ returnUrl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, prompt рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯреИрдм рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВ, рдФрд░ рдмрд┐рдирд╛ рдЙрд╕ рдорд╛рди рдХреЗ рдПрдХ рдирдпрд╛ рдЯреИрдм рдЦреЛрд▓реЗрдВред рддрдм, prompt рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╣реЛрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрдХреА рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП token рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╣реЛрд╕реНрдЯ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдореЗрдВред

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 -> рдХреЛрдб рдПрдХ POST рдлреЙрд░реНрдо рдХреЗ рдЕрдВрджрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЗрдирдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ code рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдорд╛рди
  • response_mode=web_message -> рдХреЛрдб рдПрдХ рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ: window.opener.postMessage({"code": "asdasdasd...

SSRFs parameters

рдЗрд╕ рд╢реЛрдз рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдПред

OAuth рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдВрдЬреАрдХрд░рдг рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдо рд╕реНрдкрд╖реНрдЯ рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЕрдиреБрд░реЛрдз рдзреЛрдЦрд╛рдзрдбрд╝реА (SSRF) рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдПрдВрдбрдкреЙрдЗрдВрдЯ OAuth рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдРрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ URLs рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╢реЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЦреНрдп рдмрд┐рдВрджреБ:

  • рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдВрдЬреАрдХрд░рдг рдЕрдХреНрд╕рд░ /register рдкрд░ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ client_name, client_secret, redirect_uris, рдФрд░ рд▓реЛрдЧреЛ рдпрд╛ JSON рд╡реЗрдм рдХреБрдВрдЬреА рд╕реЗрдЯ (JWKs) рдХреЗ рд▓рд┐рдП URLs рдЬреИрд╕реЗ рд╡рд┐рд╡рд░рдг рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
  • рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ RFC7591 рдФрд░ OpenID рдХрдиреЗрдХреНрдЯ рдкрдВрдЬреАрдХрд░рдг 1.0 рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ SSRF рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ SSRF рдХреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреА рд╣реИ:
  • logo_uri: рдХреНрд▓рд╛рдЗрдВрдЯ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓реЛрдЧреЛ рдХреЗ рд▓рд┐рдП рдПрдХ URL рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, SSRF рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ URL рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЧрдпрд╛ рддреЛ XSS рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред
  • jwks_uri: рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ JWK рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ URL, рдЬрд┐рд╕реЗ рдпрджрд┐ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рд╣рдорд▓рд╛рд╡рд░-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдЙрдЯрдмрд╛рдЙрдВрдб рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред
  • sector_identifier_uri: redirect_uris рдХреЗ JSON рдПрд░реЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ SSRF рдХрд╛ рдЕрд╡рд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
  • request_uris: рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдЕрдиреБрд░реЛрдз URIs рдХреА рд╕реВрдЪреА, рдЬрд┐рдиреНрд╣реЗрдВ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдЗрди URIs рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рддреЛ рд╢реЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╢реЛрд╖рдг рд░рдгрдиреАрддрд┐:

  • SSRF рдХреЛ logo_uri, jwks_uri, рдпрд╛ sector_identifier_uri рдЬреИрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг URLs рдХреЗ рд╕рд╛рде рдирдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдХреЗ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЬрдмрдХрд┐ 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 %}