Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: clear email change token when token hash is used #1240

Closed
wants to merge 1 commit into from

Conversation

J0
Copy link
Contributor

@J0 J0 commented Sep 4, 2023

What kind of change does this PR introduce?

Currently, it is possible to use the same TokenHash twice during Secure Email Change. This could potentially lead to malicious users requesting an email to a given email and then completing the flow with the token they receive in their email.

This is not too major as it's not possible to do an email change to an existing account which blocks potential account takeover attempts. The main downside we aim to guard against would be devs blocked from signing up because someone is squatting on their name similar to what happens when a signup is made but confirmation is not completed.

@J0 J0 marked this pull request as ready for review September 5, 2023 09:28
@J0 J0 requested a review from a team as a code owner September 5, 2023 09:28
@J0
Copy link
Contributor Author

J0 commented Sep 5, 2023

Let's close this and use #1241

@J0 J0 closed this Sep 5, 2023
J0 added a commit that referenced this pull request Sep 6, 2023
## What kind of change does this PR introduce?

There are two issues the PR aims to resolve:

1. Currently, a Token Hash can be re-used twice in place of using the
token hash send to the new email and a token has in the current mail. A
solve attempt was originally made in #1240 but a test was added in this
branch.

2. Currently, the single confirmation response is slightly misformed and
has an additional null param

<img width="1062" alt="CleanShot 2023-09-04 at 15 47 04@2x"
src="https://github.com/supabase/gotrue/assets/8011761/69da91e5-e646-4970-8e80-1659e2e3fd41">

This stems from the return in the transaction. sendJSON doesn't return
an error. Consequently, he error returned by the transaction will be
nil. This leads to

<img width="755" alt="CleanShot 2023-09-04 at 15 47 41@2x"
src="https://github.com/supabase/gotrue/assets/8011761/af583492-1aac-4cbd-aaad-856282cce808">

`sendJSON(w, http.StatusOK, token)` being run after `sendJSON` is
callled which will write the `token` (`nil` in this case) to the
existing singleConfirmationResponse. This in turn affects returned
response for the first confirmation as the client library is unable to
unpack the returned JSON with extra null leading to an error.


## What is the new behavior?

Returns response
<img width="617" alt="CleanShot 2023-09-04 at 15 50 07@2x"
src="https://github.com/supabase/gotrue/assets/8011761/e27db0ab-0489-4cda-a25f-8a650db5cab1">

## Additional context

TODO
- [x] Need to complete a test for the SecureEmailChange TokenHash to
prevent a regression

---------

Co-authored-by: [email protected] <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant