Broken Authentication

Broken Authentication in Laravel CVE-2017-9303 [CVE-2017-9303]

[Fixed month year] Updated CVE-2017-9303

Overview

CVE-2017-9303 is a Broken Authentication issue that affected Laravel 5.4.x before 5.4.22. It allowed remote attackers to influence the host portion of a password-reset URL, making phishing easier by presenting a malicious domain to users who click the reset link in email. This class of vulnerability underscores how the password reset flow can be manipulated when the host in the reset URL is not strictly constrained. The underlying weakness maps to CWE-20 (Improper Input Validation) in the sense that the URL being constructed could be steered toward attacker-controlled hosts, enabling deceptive pages and credential theft under the guise of legitimate password recovery.

Affected Versions

5.4.x before 5.4.22

Code Fix Example

Laravel API Security Remediation
/* Vulnerable */
<?php
$token = Str::random(60);
$email = $user->email;
$resetUrlVuln = url('/password/reset/'.$token.'?email='.urlencode($email));
// The $resetUrlVuln is embedded into the password reset email
?>

/* Fixed */
<?php
$token = Str::random(60);
$email = $user->email;
// Use an absolute URL tied to the application's canonical host to prevent host tampering
$resetUrlFixed = route('password.reset', ['token' => $token, 'email' => $email], true);
?>

CVE References

Choose which optional cookies to allow. You can change this any time.