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
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
{% 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 рдкреНрд░рд╡рд╛рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдЖрдк https://example.com рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ тАЬрд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░реЗрдВтАЭ рдмрдЯрди рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
- рд╕рд╛рдЗрдЯ рдлрд┐рд░ 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
- рдлрд┐рд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╣рдорддрд┐ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЖрдкрдХреА рд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдмрд╛рдж, рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛
redirect_uri
рдХреЛcode
рдФрд░state
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ:
https://example.com?code=uniqueCode123&state=randomString123
- 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"}
- рдЕрдВрдд рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 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
- рдЦрд╛рддреЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд┐рдирд╛: рд╣рдорд▓рд╛рд╡рд░ рдкреАрдбрд╝рд┐рдд рдХреЗ рдИрдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдЦрд╛рддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдкреАрдбрд╝рд┐рдд рдмрд╛рдж рдореЗрдВ рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЗрд╕ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЦрд╛рддреЗ рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдЦрд╛рддреЗ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИред
- 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
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 %}
Two links & cookie
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдПрдХ рдкреАрдбрд╝рд┐рдд рдПрдХ рдкреГрд╖реНрда рдЦреЛрд▓реЗ рдЬрд┐рд╕рдореЗрдВ 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
- https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1
- https://portswigger.net/research/hidden-oauth-attack-vectors
{% 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
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.