Looks like the recoverEmail path in email-handler.html is passing the action code into the wrong parameter.
handleRecoverEmail is defined as:
function handleRecoverEmail(auth, actionCode, lang) {
But the switch calls it like this:
handleRecoverEmail(actionCode);
Inside the handler, checkActionCode(Auth, actionCode) and applyActionCode(Auth, actionCode) use the second parameter, so actionCode ends up being undefined for recover email links.
How to reproduce:
- Open an email recovery link that uses
/email-handler?mode=recoverEmail&oobCode=<valid code>.
- The handler enters the
recoverEmail branch.
handleRecoverEmail receives only one argument.
- Firebase receives
undefined as the action code, so the email recovery flow fails instead of reverting the email.
Impact is limited, but this does affect account recovery. If a user's email was changed accidentally or maliciously, the recovery link may not work through Monkeytype's handler. I do not think this is account takeover by itself.
A fix would be to either call handleRecoverEmail(Auth, actionCode, lang) or simplify the function signature so the action code is the first argument.
Looks like the
recoverEmailpath inemail-handler.htmlis passing the action code into the wrong parameter.handleRecoverEmailis defined as:But the switch calls it like this:
Inside the handler,
checkActionCode(Auth, actionCode)andapplyActionCode(Auth, actionCode)use the second parameter, soactionCodeends up beingundefinedfor recover email links.How to reproduce:
/email-handler?mode=recoverEmail&oobCode=<valid code>.recoverEmailbranch.handleRecoverEmailreceives only one argument.undefinedas the action code, so the email recovery flow fails instead of reverting the email.Impact is limited, but this does affect account recovery. If a user's email was changed accidentally or maliciously, the recovery link may not work through Monkeytype's handler. I do not think this is account takeover by itself.
A fix would be to either call
handleRecoverEmail(Auth, actionCode, lang)or simplify the function signature so the action code is the first argument.