Skip to main content

Reverse::Proxy CVE-2026-75922

| EUVDEUVD-2026-64662 MEDIUM
HTTP Request/Response Smuggling (CWE-444)
2026-08-23 CPANSec GHSA-5xq5-hx4g-f5v6
5.3
CVSS 3.1 · Vendor: CPANSec
View

Attack ChainAIDerived

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

  1. Access
    Send crafted URL with %0d%0a in path
  2. Delivery
    PSGI server percent-decodes PATH_INFO before proxy sees it
  3. Exploit
    Proxy writes raw CRLF into upstream request line
  4. Execution
    Upstream parser treats CRLF as request-line terminator
  5. Persist
    Attacker-controlled headers sent as second request on pooled connection
  6. Impact
    Upstream serves restricted path bypassing proxy routing

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service HTTP request consistency
Exploitation Conditions

Exploitation requires that the target deploy Reverse::Proxy (Perl CPAN) in version 0.03 or earlier within a PSGI-compliant application stack - any conforming PSGI server (Plack/PSGI, Starman, Twiggy) will percent-decode PATH_INFO as the specification requires, satisfying the precondition. No non-default configuration, authentication, or special feature flag is needed; the decoding behaviour is mandatory per the PSGI spec and cannot be disabled. The PR:N/AC:L CVSS metrics confirm unauthenticated, low-complexity exploitation over the network. The cross-client session poisoning variant additionally requires that the proxy reuse upstream keep-alive connections across client requests, which is standard behaviour for the buffered code path. Exploitation is limited in breadth by the niche deployment footprint of this module and by the fact that the injected request's impact is bounded by what the upstream server exposes on its internal interface; if the upstream requires its own authentication for sensitive paths, attacker impact is reduced to information disclosure via observable response timing or error messages.

Impact

The NVD CVSS 5.3 score (Medium, AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) understates real-world impact: it scores scope as unchanged and integrity as none, yet the described attack reaches upstream paths outside the proxy's routing boundary - a scope change - and can POST attacker-chosen payloads to those paths - an integrity impact. My independent assessment (see assessed_cvss_vector) revises those metrics accordingly. EPSS sits at 0.26% (18th percentile), reflecting very low current exploitation probability, consistent with the SSVC exploitation status of none. However, SSVC also flags this as automatable, meaning a scanner could probe at scale without manual per-host effort. The technical impact is rated partial by SSVC: access is limited to what the upstream exposes on its internal interface, which may include admin endpoints or other restricted paths never intended to be externally reachable, making the realistic severity deployment-dependent. There is no KEV listing and no circulating public POC, so risk is currently theoretical. The narrow deployment footprint of a niche Perl CPAN module substantially limits breadth. The primary concern is organisations that use Reverse::Proxy to gate access to privileged upstream APIs, where a smuggled request bypassing the proxy's ACL layer could reach high-value endpoints.

Exploit ScenarioDerived

An attacker sends a GET request to the proxy with a URL such as /legitimate%2fpath%0d%0aGET%20/admin%20HTTP/1.1%0d%0aHost:%20upstream-internal%0d%0a%0d%0a. The PSGI server decodes this to a raw PATH_INFO containing a CRLF sequence before the proxy processes it. The proxy appends the decoded bytes to the upstream request line verbatim, causing the upstream to parse the CRLF as the line terminator and treat the injected GET /admin HTTP/1.1 as a second, standalone request arriving on the same pooled keep-alive connection - a connection the upstream trusts as belonging to the proxy. No public POC exists, but the oss-security advisory and metacpan source references provide enough technical detail for a skilled attacker to reproduce the issue.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 25, 2026

HTTP request smuggling in the Perl CPAN module Reverse::Proxy (versions before 0.04) allows unauthenticated remote attackers to inject arbitrary HTTP requests to upstream servers by embedding CRLF sequences in percent-encoded URL paths. The PSGI specification requires servers to percent-decode PATH_INFO before handing it to the application, meaning %0d%0a has already become a literal carriage return and line feed by the time the proxy appends it to the upstream request line - terminating that line early and promoting everything that follows to a second, attacker-controlled request. The injected request is attributed to the proxy by the upstream and can reach internal paths the proxy's own routing never exposes; on pooled keep-alive connections it may be delivered in the context of another client's session. No public exploit code and no CISA KEV listing exist at time of analysis.

RemediationAI

Upgrade to Reverse::Proxy version 0.04, which re-encodes PATH_INFO before writing it into the upstream request line; the corrected code is visible at https://metacpan.org/release/LNATION/Reverse-Proxy-0.04/source/Proxy.xs#L400-426 and the changelog confirming the fix is at https://metacpan.org/release/LNATION/Reverse-Proxy-0.04/changes. Install via CPAN or cpanm with 'cpanm Reverse::Proxy'. If an immediate upgrade is blocked, two partial mitigations are available: first, deploy a WAF or HTTP normalisation layer in front of the proxy that rejects or re-encodes percent-encoded CRLF sequences (%0d, %0a, %0d%0a) in path components - this adds latency and may break legitimate double-encoded paths; second, disable keep-alive connection pooling to the upstream if the proxy configuration exposes such a setting, which eliminates the cross-client session poisoning variant at the cost of increased connection overhead. The oss-security disclosure is at https://seclists.org/oss-sec/2026/q3/551.

Affected ProductsAI

Reverse::Proxy for Perl, all releases prior to version 0.04, published on CPAN by author LNATION. The vulnerable logic is present in the C extension file Proxy.xs at lines 386-399 (request-line construction) and 654-666 (buffered keep-alive path) in the 0.03 release, accessible at https://metacpan.org/release/LNATION/Reverse-Proxy-0.03/source/Proxy.xs. Any PSGI-compliant deployment stack (Plack, Starman, Twiggy, etc.) is affected, because PATH_INFO decoding is a PSGI specification requirement, not a configuration choice. No CPE identifier was included in the provided data.

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

Reverse::Proxy is a CPAN-distributed Perl extension (XS/C) that acts as a reverse-proxy layer within a PSGI application stack. PSGI (Perl Web Server Gateway Interface) mandates that compliant servers - Plack, Starman, and others - deliver PATH_INFO to the application already percent-decoded, a design that mirrors CGI. The vulnerable code in Proxy.xs (lines 386-399 and 654-666 in the 0.03 release) takes this already-decoded byte string and concatenates it directly onto the upstream base URL when serialising the outgoing request line, performing no re-encoding step. For Upgrade-tunnel requests the proxy serialises the request line itself, compounding the omission. CWE-444 (Inconsistent Interpretation of HTTP Requests - HTTP Request Smuggling) is the canonical root-cause class: two components along the chain (the PSGI server, which decodes, and the upstream, which receives raw bytes) apply different normalisation rules to the same request, allowing the proxy's output to be structurally ambiguous from the upstream's perspective. A %0d%0a in the original client URL becomes a literal CRLF mid-request-line, which HTTP/1.1 parsers treat as the line terminator; a decoded space, '?', or '#' achieves the same truncation by different means. No CPE string was supplied in the input data.

Know when the next one hits your stack

  • 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 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 7.2 HIGH

Scope changed because injected requests reach upstream servers beyond the proxy's security boundary; low confidentiality and integrity impact on those upstream systems; no availability impact described.

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

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
None
Availability
None

Lifecycle Timeline

2
CVSS changed
Aug 25, 2026 - 20:22 NVD
5.3 (None) 5.3 (MEDIUM)
CVE Published
Aug 23, 2026 - 18:16 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

Reverse::Proxy versions before 0.04 for Perl allow HTTP request smuggling via a percent-decoded PATH_INFO written unencoded to the upstream request line.

PSGI hands PATH_INFO to an application percent-decoded, so a %XX sequence in the client URL has become a raw byte by the time the proxy sees it. The proxy appends that byte string to the upstream base URL, and for an Upgrade tunnel writes it into a request line it serializes itself, re-encoding nothing in either path. The HTTP client that sends the resulting URL does not validate the target either. A path containing %0d%0a therefore arrives at the upstream as a CRLF that ends the request line, and a decoded space, '?' or '#' truncates it the same way.

Everything the client writes after the CRLF is read by the upstream as a second request. On the buffered path it arrives on a keep-alive connection the proxy pools and reuses for other clients. Its method, path and headers are all chosen by the client, and the upstream attributes it to the proxy, so it reaches upstream paths that the proxy's own routing does not expose.

Threat Intelligence Overview

EPSS Score
0.3%
Top 82% exploitable
Prevalence
Rare
Niche Perl CPAN reverse-proxy module, minimal enterprise footprint.
Social Media
2
Sightings
Data Quality
5 sources
Confidence: Medium

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.3%
Patch available No
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
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

HTTP request smuggling exploits inconsistencies in how front-end and back-end servers parse HTTP message boundaries.

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

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