Description
Punk versions from 0.48 before 0.55 for Perl route Extended CONNECT requests to any GET route without an Origin check in ps_serve_one.

On HTTP/2 and HTTP/3 a WebSocket handshake arrives as an Extended CONNECT, which is matched as a GET and so reaches every GET route, API operation and mount. The Origin check runs only when a websocket route matches. On this transport the handler's status is the handshake response, and a 2xx accepts it.

A cross-origin page can open a WebSocket to any path and learn from its open or error event whether that path returns 2xx.
Published: 2026-10-06
Score: 5.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Information Disclosure (Blind Route Enumeration)
Action: Immediate Patch
AI Analysis

Impact

The vulnerability allows a cross‑origin WebSocket handshake, which uses the Extended CONNECT method, to be treated as a normal GET request. Because the Punk framework only performs an Origin check when a websocket‑specific route matches, the handshake passes through to any GET route in the application. An attacker can therefore open a WebSocket to an arbitrary path and, by observing the success or failure of the connection, determine whether that path returns a 2xx status. This effectively enables blind enumeration of all GET endpoints and could expose internal APIs or sensitive resources to unintended origins.

Affected Systems

Affected systems include the Punk web framework for Perl, specifically versions 0.48 up to but not including 0.55. Any deployment of these releases that processes HTTP/2 or HTTP/3 requests and accepts WebSocket connections is vulnerable. The issue resides in the ps_serve_one routine, which does not validate the Origin header for Extended CONNECT traffic routed to generic GET handlers.

Risk and Exploitability

The vulnerability has a CVSS score of 5.3, indicating moderate risk, and an EPSS score of less than 1%, pointing to a very low probability of exploitation. It is not listed in the CISA KEV catalog. The attack vector requires the attacker to serve a malicious page that opens a WebSocket connection to a target server using HTTP/2 or HTTP/3. Because the handshake is accepted with a 2xx response only when the target route exists, an adversary can enumerate endpoints without triggering obvious server errors. Although the impact is limited to information disclosure through enumeration, it may assist in subsequent attacks such as credential harvesting or targeted API exploitation. The presence of an Origin check only on WebSocket routes narrows the ability to exploit more directly, but the blind mapping capability remains a significant risk, especially for applications exposing many GET handlers.

Generated by OpenCVE AI on October 7, 2026 at 06:06 UTC.

Remediation

Vendor Solution

Upgrade to Punk 0.55 or later.


OpenCVE Recommended Actions

  • Upgrade Punk to version 0.55 or later.
  • Add be reached via Extended CONNECT, ensuring the handshake is only allowed for legitimate websocket routes.
  • Implement or enforce an origin whitelist for all WebSocket connections to restrict cross‑origin access to approved domains.

Generated by OpenCVE AI on October 7, 2026 at 06:06 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 06 Oct 2026 21:15:00 +0000

Type Values Removed Values Added
First Time appeared Perl
Perl punk
Vendors & Products Perl
Perl punk

Tue, 06 Oct 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 5.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N'}

ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 06 Oct 2026 05:30:00 +0000

Type Values Removed Values Added
References

Tue, 06 Oct 2026 01:30:00 +0000

Type Values Removed Values Added
Description Punk versions from 0.48 before 0.55 for Perl route Extended CONNECT requests to any GET route without an Origin check in ps_serve_one. On HTTP/2 and HTTP/3 a WebSocket handshake arrives as an Extended CONNECT, which is matched as a GET and so reaches every GET route, API operation and mount. The Origin check runs only when a websocket route matches. On this transport the handler's status is the handshake response, and a 2xx accepts it. A cross-origin page can open a WebSocket to any path and learn from its open or error event whether that path returns 2xx.
Title Punk versions from 0.48 before 0.55 for Perl route Extended CONNECT requests to any GET route without an Origin check in ps_serve_one
Weaknesses CWE-1385
References

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-10-06T13:14:39.875Z

Reserved: 2026-10-01T22:29:10.271Z

Link: CVE-2026-104380

cve-icon Vulnrichment

Updated: 2026-10-06T05:07:59.987Z

cve-icon NVD

Status : Deferred

Published: 2026-10-06T02:17:03.910

Modified: 2026-10-06T15:03:59.427

Link: CVE-2026-104380

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-07T06:15:12Z

Weaknesses
  • CWE-1385

    Missing Origin Validation in WebSockets