CVE-2026-15689
CriticalCVSS 9.8Exploitation Probability (EPSS)
Low risk20th percentile - higher than 20% of all known CVEs
Summary
A vulnerability in Dancer2::Plugin::Auth::Extensible (through 0.713) for Perl allows password reset link poisoning via the request Host header in _default_email_password_reset and _default_welcome_send. Default emails emit a link with authority from the Host header or X-Forwarded-Host (under behind_proxy). An unauthenticated POST to /login with submit_reset and a username stores a fresh reset code and emails a link to a host chosen by the attacker. If the recipient follows the link, they hand a working reset code to the attacker's host, enabling account takeover.
Risk Assessment
The risk includes potential account takeover through malicious password reset links. The attack requires no authentication and can be performed remotely, posing a serious threat to account integrity.
Recommendation
Update Dancer2::Plugin::Auth::Extensible to a version newer than 0.713 if available. Also, explicitly configure the uri_base option to avoid relying on the untrusted Host header, and consider validating the Host header.
Original NVD description (English source)
Dancer2::Plugin::Auth::Extensible versions through 0.713 for Perl allow password reset link poisoning via the request Host header in _default_email_password_reset and _default_welcome_send. Both default emails emit a link of the form `$base/login/$code`, whose authority comes from the request Host header, or from X-Forwarded-Host under behind_proxy (obtained from Dancer2's request->base function). A POST to /login carrying submit_reset and a username needs no authentication: it stores a fresh reset code against that account and mails the account holder a link to a host of the sender's choosing. The welcome mail takes the same path when the application calls create_user with email_welcome set. Through 0.711 the handlers read `request->uri_base` and `request->base` directly; Versions 0.712 and later provide an uri_base configuration key that defaults to the untrusted `request->uri_base` when unset. The default configuration with reset_password_handler enabled and the default message text, a recipient who follows the link hands a working reset code to the sender's host, which is enough to take over the account.

