Secure Legion Labs
Broken Authentication Lab
This room simulates a reset workflow that builds the reset URL from untrusted request metadata. Your goal is to poison the generated reset link so a privileged account’s reset token is sent to an attacker-controlled host.
Account emailHost value used in link generationMake the reset link point to attacker infrastructureThe reset service uses an untrusted host value directly in the email link. For a sensitive account, that turns the reset email into a token delivery mechanism for the attacker.
resetLink = "https://" + request.host + "/reset?token=" + token
sendMail(user.email, resetLink)
// missing trusted app domain enforcementChoose an email target and influence the host value used in the generated reset email.
POST /api/reset{ "status": "idle" }The preview below shows the reset email the application would send. The problem appears when a privileged account’s reset link points to an attacker-controlled host.
Status: waiting for a reset request.
The flag appears once the privileged reset link is poisoned successfully.
Submit the unlocked flag to complete the password reset poisoning room.
Flag is locked until you poison the privileged reset link.
The attacker triggers a normal password reset flow for a target account.
The application builds the reset URL from untrusted request metadata instead of a fixed trusted domain.
The resulting reset link now points to attacker infrastructure and leaks the token.