Summary
CVE-2026-15689 is a host header injection vulnerability (CWE-640: Weak Password Recovery Mechanism) in Dancer2::Plugin::Auth::Extensible, a Perl authentication plugin for the Dancer2 web framework. Affected versions build password reset and welcome emails using the untrusted request Host header, allowing an unauthenticated attacker to poison the reset link and take over any user account. The issue carries a CRITICAL CVSS v3.1 score of 9.8.
Technical details
- Root cause: the
_default_email_password_resetand_default_welcome_sendhandlers build the link authority fromrequest->base/request->uri_base, which derive from the client-suppliedHostheader (orX-Forwarded-Hostwhenbehind_proxyis enabled) rather than a trusted, configured application hostname. - Trigger condition: an unauthenticated POST to
/loginwithsubmit_resetand a target username generates a fresh reset code for that account and emails a reset link to a host chosen by the attacker; the same code path is triggered by the welcome email whencreate_useris called withemail_welcomeset. - Attack vector: network, no authentication or user interaction beyond the victim clicking the received (poisoned) link.
- Impact: if the victim follows the link, the working reset code is delivered to the attacker-controlled host, enabling full account takeover, including high confidentiality, integrity, and availability impact.
Affected software
- Dancer2::Plugin::Auth::Extensible versions 0 through 0.713 (through 0.711 the code read
request->uri_base/request->basedirectly with no mitigation; 0.712 introduced auri_baseconfiguration key that defaults to the untrusted value when left unset).
Severity
- CVSS v3.1 Base Score: 9.8 (CRITICAL)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Mitigation and recommended actions
- Immediate: upgrade to Dancer2::Plugin::Auth::Extensible 0.713 or later, and explicitly set the
uri_baseconfiguration key to the application’s own trusted base URL. - If patching is not immediately possible: reject or normalize any request whose
Host(orX-Forwarded-Host) does not match an expected application hostname at the web server or reverse proxy layer before it reaches the application.
How IONIX identifies potentially affected assets
IONIX matches the following signals against data already collected when it crawled the asset; identifying the technology sends no request beyond that crawl.
serverresponse header:Perl Dancer(with version)x-powered-byresponse header:Perl Dancer(with version)

