CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-55629

CVE-2026-55629: Arbitrary File Read via Path Traversal in Whistle Proxy Internal Service

Alon Barad
Alon Barad
Software Engineer

Aug 26, 2026·6 min read·4 visits

Executive Summary (TL;DR)

A fail-open validation logic flaw in Whistle's internal service module allows unauthenticated remote attackers to read arbitrary files from the hosting operating system via path traversal.

Whistle prior to version 2.10.3 contains a path traversal vulnerability in its internal service layer. An unauthenticated remote attacker can read arbitrary files on the hosting operating system by issuing a crafted GET request containing relative or absolute file paths to the `/cgi-bin/temp/get` endpoint. This behavior occurs because the application fails open when an input file parameter does not match the temporary file format regex.

Vulnerability Overview

Whistle functions as a multi-protocol web debugging proxy. It is designed to intercept, modify, and inspect HTTP, HTTPS, WebSocket, and HTTP2 traffic. It is widely used by developers to debug API responses, inject scripts, and route local files to remote environments. Because of its administrative and utility capabilities, the utility runs with the permissions of the local system user starting the process.

In versions prior to 2.10.3, a path traversal vulnerability exists in the internal service module. The endpoint /cgi-bin/temp/get within this module exposes an interface intended to fetch temporary debugging files. When an external request queries this endpoint, the application extracts the target file from the filename query parameter.

Due to a failure in validating the filename string, unauthenticated remote attackers can traverse the host directory structure. This enables unauthorized read access to critical operating system files, application source code, and configurations. The vulnerability resides under the CWE-22 weakness class.

Root Cause Analysis

The vulnerability originates in the fail-open implementation of the query handling logic inside lib/service/service.js. Specifically, the routing layer maps incoming GET requests for the /cgi-bin/temp/get resource directly to an internal controller. This controller parses the filename value from the query string and evaluates it against an internal helper utility.

This helper utility is common.isTempFile(filename). It validates whether the string is a temporary file name. The validation relies on a regular expression, TEMP_FILE_RE = /^\^[\\da-f]{64}$/, designed to match 64-character hexadecimal hashes representing session files. If the parameter matches this structure, the logic appends the filename to the target directory root TEMP_FILES_PATH via path.join().

However, the critical security flaw lies in the handling of strings that do not match the regular expression. Instead of returning an error or halting execution when common.isTempFile returns false, the controller bypasses the path.join block entirely. It then proceeds to invoke the file retrieval utility getFile(filename, callback) with the raw, unvalidated string provided by the user. Because Node's underlying filesystem operations resolve relative and absolute paths directly, an attacker can specify any path on the disk, and the engine will fetch the file contents.

Code-Level Patch Analysis

The remediation of CVE-2026-55629 required three distinct adjustments to ensure security. First, the export of the core service module was deactivated in the main entry point file lib/index.js. By omitting loadService from the public interface, the application prevents unauthorized or unintended registrations of internal service components.

Second, the maintainers integrated an authorization check into the routing middleware of lib/service/service.js. Every request directed to the session routing layer must now supply a unique identifier header named _x-whistle-uid_. If the request's header value does not match the active server configuration token config.uid, the controller terminates the request with a 403 Forbidden response.

Third, the validation mechanism was updated to prevent the fail-open scenario. The boolean validation helper common.isTempFile was deleted. In its place, the developers implemented common.getTempFile, which uses an updated regular expression /^(?:\/?temp\/)?([\da-f]{64})(?:\.[\w.-]+)?$/ to perform extraction rather than pure boolean testing. The path concatenation helper now only executes if a valid hash is actively extracted from the user input.

Below is the conceptual structure of the code before and after the application of the patch:

// BEFORE PATCH
var filename = req.query.filename;
if (common.isTempFile(filename)) {
  filename = path.join(TEMP_FILES_PATH, filename);
}
// If isTempFile returned false, the execution continued with the raw query string.
getFile(filename, function(em, data) { ... });
 
// AFTER PATCH
var filename = req.query.filename;
var tempFile = common.getTempFile(filename);
if (tempFile) {
  // The path.join function is now only reached if the format is matched.
  filename = path.join(TEMP_FILES_PATH, tempFile);
  getFile(filename, function(em, data) { ... });
} else {
  // If the format does not match, the application does not load raw file paths.
}

The change guarantees that an invalid temporary file parameter is never treated as a valid local system path, preventing arbitrary reads.

Exploitation & Attack Methodology

Exploitation of CVE-2026-55629 requires network connectivity to the active Whistle proxy port. The default port utilized is 8899. An attacker does not require any credentials, pre-existing sessions, or specific application configurations to execute this attack against unpatched versions.

To retrieve local system files, the attacker targets the exposed /cgi-bin/temp/get endpoint. They must formulate a query string containing the target file path. On Linux environments, the payload seeks files such as /etc/passwd. On Windows targets, standard system files such as C:/windows/win.ini or active project configuration files are used.

Upon receiving the payload, the backend fails to match the path string against the 64-character hexadecimal pattern. The application then falls through the routing logic and passes the relative or absolute path payload straight to the local filesystem API. The response returns the file's raw byte array to the client.

Impact & Risk Assessment

The impact of CVE-2026-55629 represents a severe risk to host confidentiality. Since Whistle is frequently executed by developers, engineers, and testing pipelines, the process holds the permission level of the host shell. Any files readable by the developer running the proxy are accessible to an attacker.

This access allows for the retrieval of configuration files, private SSH keys, cloud provider metadata tokens, and environment configurations. This disclosure can provide the lateral movement coordinates needed to access databases or production systems. Furthermore, in containerized or shared environments, the flaw can leak critical orchestration secrets.

The CVSS v4.0 base score is rated at 8.7. The vector reflects network availability, low complexity, and high confidentiality impact. Although the exploit status does not currently indicate active wild usage, the existence of trivial reproduction vectors makes rapid exploitation highly likely once an instance is discovered on the open internet.

Remediation & Defensive Control

The primary remediation for CVE-2026-55629 is updating the Whistle installation to version 2.10.3 or greater. The package is updated globally via the node package manager (npm). This update applies the logic changes, removes the deprecated services exports, and requires the unique header credential for endpoint interactions.

When immediate upgrades are impossible, network-level mitigations must be implemented. Administrators must verify that the Whistle proxy does not listen on wildcard addresses such as 0.0.0.0. Restricting the binding configuration to the local loopback address 127.0.0.1 blocks external connections.

# Command to bind Whistle to localhost exclusively
w2 start -p 8899 -h 127.0.0.1

Additionally, corporate networks must enforce firewall rules blocking ingress connections to port 8899 from external IP subnets. Any network monitoring infrastructure should flag HTTP query paths containing /cgi-bin/temp/get paired with suspicious query structures like double-dot paths or absolute system folders.

Official Patches

avwoMain commit patching the path-traversal vulnerabilities and introducing token based interface restrictions.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.7/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
EPSS Probability
0.67%
Top 51% most exploited

Affected Systems

Whistle Node.js Proxy

Affected Versions Detail

Product
Affected Versions
Fixed Version
whistle
avwo
< 2.10.32.10.3
AttributeDetail
CWE IDCWE-22
Attack VectorNetwork (Unauthenticated)
CVSS 4.0 Score8.7 (High)
EPSS Score0.00669 (Percentile: 49.20%)
ImpactArbitrary File Disclosure (Read-Only)
Exploit StatusPoC Available
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1005Data from Local System
Collection
CWE-22
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

The application uses external input to construct a pathname that is intended to identify a file or directory that is located under a restricted directory, but the software does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.

Known Exploits & Detection

GitHub Security AdvisoryInformation on reproduction paths and technical disclosure in vulnerable instances.

Vulnerability Timeline

Security patches committed to address the service exposure, authentication gap, and path parsing logic.
2026-06-14
GitHub Security Advisory GHSA-3vfr-4gwf-qxfp and CVE-2026-55629 are published.
2026-07-16

References & Sources

  • [1]GHSA-3vfr-4gwf-qxfp: Path Traversal in Whistle
  • [2]Whistle Release v2.10.3
  • [3]CVE-2026-55629 Record
  • [4]NVD - CVE-2026-55629 Detail

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•25 minutes ago•CVE-2026-55619
5.3

CVE-2026-55619: Parser Denial of Service via Deeply Nested Parentheses in E-mail Headers

A denial of service vulnerability in GOVCERT-LU eml_parser before version 3.0.2 allows unauthenticated remote attackers to trigger an unhandled RecursionError exception. The issue arises during the parsing of structured email headers containing excessively nested parentheses representing Comments and Folding White Space (CFWS). Because the parser fails to catch this recursion-limit exception from Python's standard library, processing of the entire mail immediately aborts, which can disrupt automated security triage pipelines and email ingestion components.

Alon Barad
Alon Barad
1 views•6 min read
•about 1 hour ago•CVE-2026-55620
7.5

CVE-2026-55620: Algorithmic Complexity Denial of Service in GOVCERT-LU eml_parser

Prior to version 3.0.2, GOVCERT-LU's eml_parser library is vulnerable to an algorithmic complexity Denial of Service (DoS) vulnerability via the comment-stripping routine noparenthesis() in routing.py. An unauthenticated attacker can submit a crafted EML file containing nested parenthesized comments to cause complete CPU saturation. This happens due to a quadratic time complexity bottleneck in regex replacement of nested structures.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 3 hours ago•CVE-2026-55609
7.1

CVE-2026-55609: Arbitrary File Read and Write via Model Context Protocol (MCP) Tools in sublinear-time-solver and consciousness-explorer

An arbitrary file read and write vulnerability exists in the Model Context Protocol (MCP) server endpoints of sublinear-time-solver and consciousness-explorer. By providing unvalidated file paths to the export_state, import_state, saveVectorToFile, and loadVectorFromFile tools, local attackers can read or overwrite sensitive host files.

Alon Barad
Alon Barad
3 views•5 min read
•about 4 hours ago•CVE-2026-55604
8.6

CVE-2026-55604: Authorization Bypass via Global Session Singleton in @arikusi/deepseek-mcp-server

An Authorization Bypass Through User-Controlled Key (CWE-639 / Insecure Direct Object Reference) vulnerability exists in @arikusi/deepseek-mcp-server starting in version 1.4.2 and fixed in 1.7.0. In Streamable HTTP transport mode, a process-global SessionStore singleton allows any remote client to retrieve or modify active conversation contexts belonging to other clients.

Alon Barad
Alon Barad
8 views•7 min read
•about 5 hours ago•CVE-2026-45018
9.8

CVE-2026-45018: Unauthenticated Remote Code Execution via MCP stdio Transport in Chainlit

CVE-2026-45018 is a critical command injection vulnerability in Chainlit's Model Context Protocol (MCP) stdio transport backend. By submitting a crafted JSON payload containing dangerous argument options to an unauthenticated HTTP endpoint, a remote attacker can bypass executable validation rules and run arbitrary shell commands with the privileges of the active Python process.

Alon Barad
Alon Barad
6 views•10 min read
•about 6 hours ago•CVE-2026-45019
7.2

CVE-2026-45019: Server-Side Request Forgery (SSRF) in Chainlit MCP Endpoint

An unauthenticated server-side request forgery (SSRF) vulnerability exists in Chainlit versions >= 2.4.0rc0 and < 2.12.0 when the Model Context Protocol (MCP) features are enabled. This vulnerability allows remote, unauthenticated attackers to force the backend application server to initiate arbitrary HTTP/HTTPS connections to internal subnets, localhost endpoints, or cloud metadata infrastructure.

Amit Schendel
Amit Schendel
6 views•6 min read