Skip to main content

Dancer2 EUVDEUVD-2026-84257

| CVE-2026-93711 MEDIUM
HTTP Response Splitting (CWE-113)
2026-09-22 CPANSec GHSA-vp8p-vxw7-c877
6.5
CVSS 3.1 · Vendor: CPANSec
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify endpoint reflecting request data into a header name
  2. Delivery
    Craft request data containing CRLF plus injected headers
  3. Exploit
    headers_to_array fails to strip CR/LF from name
  4. Execution
    Non-validating PSGI server writes bytes to wire
  5. Impact
    Response split delivers attacker-controlled headers

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization HTTP response header sanitization
Exploitation Conditions

Exploitation requires two concrete conditions from the description, not raw network reachability: (1) the Dancer2 application must construct a response header NAME from request-controlled data (reflecting attacker input into the header key, not just the value), and (2) the underlying PSGI server must not validate/reject header keys, so the CRLF-bearing name is written verbatim to the wire. Affected versions are Dancer2 before 2.2.0. Because Dancer2 strips CR/LF from header values but not names, apps that only reflect data into header values are NOT affected. There is no user-interaction or authentication requirement (PR:N/UI:N), but the app-specific header-name-derivation pattern is the real limiting factor and makes default deployments generally not vulnerable.

Impact

All signals converge on LOW real-world priority despite the MEDIUM 6.5 CVSS. The vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N indicates remote, unauthenticated, low-complexity access, but every corroborating exploitation signal is cold: EPSS is 0.19% (9th percentile), there is no CISA KEV listing, no public exploit code is referenced, and CISA SSVC scores Exploitation=none, Automatable=no, Technical Impact=partial. The most important limiter is not in the CVSS base score at all: the flaw is only reachable when the application derives a response HEADER NAME (not merely a value) from attacker-controlled request data AND the underlying PSGI server does not validate header keys - an uncommon coding pattern. So although the base metrics read 'unauthenticated network', the true attack surface is narrow and application-specific. This is a legitimate correctness bug (CR/LF stripped from header values but not names in Dancer2::Core::Response::headers_to_array) worth patching in the normal cycle, not an emergency. No conflicting data: the CVSS, EPSS, SSVC, and absence of KEV/POC all agree this is low-urgency.

Exploit ScenarioDerived

A Dancer2 (<2.2.0) application reflects a piece of user-supplied request data into a response header NAME. An unauthenticated attacker supplies that data with an embedded CRLF sequence followed by attacker-chosen header lines; because headers_to_array strips CR/LF only from values, the name reaches a non-validating PSGI server intact and the injected bytes are written to the wire as separate header lines, splitting the response. No public exploit code is referenced and exploitation still depends on the app-specific header-name reflection pattern.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 22, 2026

HTTP response splitting in the Dancer2 Perl web framework before version 2.2.0 allows an attacker to inject arbitrary response headers and split an HTTP response when an application derives a response header NAME from request-controlled data: Dancer2's headers_to_array routine strips CR and LF from header values but not from names, so a crafted name reaches the PSGI server intact and, if that server does not validate header keys, the bytes following the CRLF are written to the wire as their own header line. The issue is unauthenticated and requires no user interaction (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N, 6.5 Medium), but exploitation is gated by two concrete application-specific preconditions - the app must reflect attacker input into a header key rather than a value, and the underlying PSGI server must fail to reject malformed keys - so default deployments are generally not vulnerable. No CISA KEV entry exists and no public exploit code was identified at time of analysis; EPSS is 0.19% (9th percentile) and CISA SSVC records exploitation as none and automatable exploitation as no, so all signals converge on low real-world priority despite the Medium CVSS.

RemediationAI

Vendor-released patch: upgrade Dancer2 to 2.2.0 or later (CPAN release CROMEDOME/Dancer2-2.2.0), which is the version that sanitizes header names in Dancer2::Core::Response::headers_to_array by folding linear whitespace and removing CR/LF from the header key; the change is visible in commit ff89ac12af7b8899812a79e9924dfea7a5d9833b.patch and the release notes at https://metacpan.org/release/CROMEDOME/Dancer2-2.2.0/changes, with the vendor advisory at https://seclists.org/oss-sec/2026/q3/858. Debian users on the 4 tracked releases should apply the distribution's updated Dancer2 package rather than installing the CPAN release over a system-managed module. If upgrading immediately is not possible, the most effective compensating control is application-side: never construct a response header name from request data, and if a name must be derived from input, whitelist it against a fixed set of allowed header names (rejecting anything else) or strip CR and LF from the name before passing it to the framework. Note the trade-off: aggressive stripping silently mutates names and can produce duplicate or unexpected headers, whereas a strict whitelist will reject legitimate dynamic header usage - prefer the whitelist where header names are known in advance. A second layer is to place a validating PSGI server or middleware in front of the application that rejects any response header key containing CR or LF, which neutralizes the framework bug regardless of application code; the trade-off is that this converts a silent injection into a failed response (HTTP 500) for affected code paths, so it should be paired with logging to identify applications still reflecting input into header names. Because exploitation requires the PSGI server to lack header-key validation, confirming and, if necessary, correcting that server-side behavior removes the second precondition entirely. No vendor-released patch was identified for downstream distributions at time of analysis beyond the upstream 2.2.0 release, and no public exploit code was identified, so remediation can proceed on a normal patch cadence rather than emergency footing.

Affected ProductsAI

Dancer2 for Perl, all versions before 2.2.0, as distributed on CPAN (the fixing release is CROMEDOME/Dancer2-2.2.0, documented at https://metacpan.org/release/CROMEDOME/Dancer2-2.2.0/changes). Debian tracks the package across 4 releases, meaning downstream Debian users should follow their distribution's security update rather than only the CPAN release. The problem is specific to applications that build a response header name from request data; applications that only reflect untrusted data into header values are not affected even on vulnerable versions. No CPE strings were included in the supplied intelligence, so exact package/version identifiers should be confirmed against the vendor advisory. Cross-references for this issue include the upstream GitHub issue https://github.com/PerlDancer/Dancer2/issues/1822, the fixing commit https://github.com/PerlDancer/Dancer2/commit/ff89ac12af7b8899812a79e9924dfea7a5d9833b.patch, the oss-security advisory https://seclists.org/oss-sec/2026/q3/858 (mirrored at http://www.openwall.com/lists/oss-security/2026/09/22/3), EUVD entry EUVD-2026-84257, and the NVD record https://nvd.nist.gov/vuln/detail/CVE-2026-93711. The issue was reported by CPANSec and is tagged as Information Disclosure.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability is CWE-113, improper neutralization of CRLF sequences in HTTP headers (HTTP response splitting), in Dancer2's PSGI response serialization layer. Dancer2::Core::Response::headers_to_array converts response headers into the flat PSGI array form ([name, value, name, value, ...]); the pre-2.2.0 code applied a CR/LF-stripping filter to each header value but never to the corresponding header key. When an application populates a header name from request data, the attacker-controlled CRLF survives into the PSGI triplet, and any PSGI/HTTP server that does not itself validate header keys will emit the injected bytes as a new header line - enabling header injection and, depending on the server, response splitting. The upstream fix in commit ff89ac12af7b8899812a79e9924dfea7a5d9833b adds two substitutions on the key ($k): folding linear whitespace (CR/LF followed by space or tab) into a single space, and then removing any remaining CR and LF, mirroring the treatment already applied to values. The same commit also resets is_encoded(0) when content is assigned, addressing a separate content-encoding state issue, and adds t/unit/core/response.t covering encoding, Content-Length and PSGI array conversion. No CPE identifiers were supplied with this record; affected-version information is drawn from the vendor description and the Dancer2 2.2.0 change log, with EUVD-2026-84257 and a Debian tracking record (4 releases) providing additional cross-references.

Know when Perl gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (CPANSec) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
vuln.today AI 6.5 MEDIUM

Remote unauthenticated CRLF/response-splitting via reflected header name; low-complexity for the vulnerable app pattern, with limited confidentiality and integrity impact (header injection) and no availability effect.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
SUSE MEDIUM

Primary rating from Vendor (CPANSec).

CVSS VectorVendor: CPANSec

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

2
CVSS changed
Sep 22, 2026 - 20:37 NVD
6.5 (None) 6.5 (MEDIUM)
CVE Published
Sep 22, 2026 - 00:52 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

Dancer2 versions before 2.2.0 for Perl do not strip CR and LF from response header names in headers_to_array.

The routine removes CR and LF from each header value but not from the name. A name carrying them therefore reaches the PSGI server intact. A server that does not validate keys writes it to the wire, so the bytes after the CRLF arrive as their own header line.

The application has to derive the header name from request data, not just the value.

An attacker who controls that data adds their own headers and splits the response.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Low
Dancer2 is a niche Perl web framework, limited production footprint
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Related Vulnerabilities in Dancer2 Perl Framework Multiple Vulnerabilities

View all 4

More in Perl

View all
CVE-2012-6329 HIGH POC
7.5 Jan 04

The _compile function in Maketext.pm in the Locale::Maketext implementation in Perl before 5.17.7 does not properly hand

CVE-2017-12814 CRITICAL POC
9.8 Sep 28

Stack-based buffer overflow in the CPerlHost::Add method in win32/perlhost.h in Perl before 5.24.3-RC1 and 5.26.x before

CVE-2015-8608 CRITICAL POC
9.8 Feb 07

The VDir::MapPathA and VDir::MapPathW functions in Perl 5.22 allow remote attackers to cause a denial of service (out-of

CVE-2018-18314 CRITICAL POC
9.8 Dec 07

Perl before 5.26.3 has a buffer overflow via a crafted regular expression that triggers invalid write operations. Rated

CVE-2018-18312 CRITICAL POC
9.8 Dec 05

Perl before 5.26.3 and 5.28.0 before 5.28.1 has a buffer overflow via a crafted regular expression that triggers invalid

CVE-2018-18313 CRITICAL POC
9.1 Dec 07

Perl before 5.26.3 has a buffer over-read via a crafted regular expression that triggers disclosure of sensitive informa

CVE-2016-2381 HIGH
7.5 Apr 08

Perl might allow context-dependent attackers to bypass the taint protection mechanism in a child process via duplicate e

CVE-2023-31484 HIGH POC
8.1 Apr 29

CPAN.pm before 2.35 does not verify TLS certificates when downloading distributions over HTTPS. Rated high severity (CVS

CVE-2016-6185 HIGH POC
7.8 Aug 02

The XSLoader::load method in XSLoader in Perl does not properly locate .so files when called in a string eval, which mig

CVE-2018-12015 HIGH POC
7.5 Jun 07

In Perl through 5.26.2, the Archive::Tar module allows remote attackers to bypass a directory-traversal protection mecha

CVE-2020-10543 HIGH
8.2 Jun 05

Perl before 5.30.3 on 32-bit platforms allows a heap-based buffer overflow because nested regular expression quantifiers

CVE-2015-8853 HIGH
7.5 May 25

The (1) S_reghop3, (2) S_reghop4, and (3) S_reghopmaybe3 functions in regexec.c in Perl before 5.24.0 allow context-depe

Vendor StatusVendor

Debian

libdancer2-perl
Release Status Fixed Version Urgency
bookworm vulnerable 0.400001+dfsg-1 -
trixie vulnerable 1.1.2+dfsg-1 -
forky, sid vulnerable 2.1.0-1 -
(unstable) fixed (unfixed) -

SUSE

Severity: Moderate

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy