Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-85665

CVE-2026-85665: Bruno API Client Path Traversal Vulnerability

CVE-2026-85665 is a path traversal vulnerability in Bruno API client versions through 4.1.0 that allows attackers to read arbitrary local files using directory traversal sequences. This post covers technical details, affected versions, impact, and mitigation steps.

Published:

CVE-2026-85665 Overview

CVE-2026-85665 is a path traversal vulnerability [CWE-22] affecting Bruno, an open-source API client, in versions through 4.1.0. The application fails to validate file paths declared in request body definitions. Attackers can craft a request with a body:file path containing ../ traversal sequences that resolve outside the collection directory. When the collection is executed, Bruno reads the referenced file and exfiltrates its contents to an attacker-controlled endpoint. The flaw enables arbitrary local file disclosure from any host that runs a malicious collection.

Critical Impact

An attacker who convinces a user to execute a malicious Bruno collection can read arbitrary files from the victim's filesystem, including credentials, tokens, and source code.

Affected Products

  • Bruno API Client versions through 4.1.0
  • Bruno CLI package (bruno-cli)
  • Collections executed via bru run or the desktop runner

Discovery Timeline

  • 2026-09-04 - CVE-2026-85665 published to NVD
  • 2026-09-05 - Last updated in NVD database

Technical Details for CVE-2026-85665

Vulnerability Analysis

Bruno collections support a body:file directive that references an external file used as the HTTP request body. The request preparation logic in packages/bruno-cli/src/runner/prepare-request.js resolves the referenced path without confining it to the collection root. When a user runs the collection, Bruno loads the file contents and includes them in the outbound HTTP request. Because the destination URL is also attacker-controlled inside the collection, the file contents are sent to an endpoint the attacker operates. The result is arbitrary file read scoped to the privileges of the user executing the collection.

Root Cause

The root cause is missing path canonicalization and containment checks on user-supplied file paths in request body declarations. The application concatenates or resolves the path relative to the collection directory without verifying that the resolved absolute path remains inside that directory. Parent-directory traversal segments such as ../../../etc/passwd therefore escape the intended boundary.

Attack Vector

Exploitation requires user interaction. An attacker distributes a malicious Bruno collection through a shared repository, chat message, or Git clone. The collection declares a request whose body references a sensitive file using ../ sequences and points the request URL to an attacker-controlled host. When the victim runs the collection with bru run or the Bruno GUI runner, the file is read from disk and transmitted in the request body. See the VulnCheck Advisory for Bruno 3.4.2 and GitHub Issue #8230 for reference details.

The vulnerable path handling can be reviewed in the upstream prepare-request.js source.

Detection Methods for CVE-2026-85665

Indicators of Compromise

  • Bruno collection files (.bru) containing body:file directives with ../ or absolute paths outside the collection directory.
  • Outbound HTTP requests from bru, bruno, or Node.js processes to unfamiliar external hosts shortly after a collection is executed.
  • Reads of sensitive files such as ~/.ssh/id_rsa, ~/.aws/credentials, or /etc/passwd performed by the Bruno process.

Detection Strategies

  • Scan Bruno collection repositories for body:file values that contain parent-directory traversal segments or absolute paths.
  • Correlate process telemetry for bruno and bru with file reads outside the collection working directory.
  • Alert on network egress from developer workstations where the Bruno process contacts hosts not present on an approved API allowlist.

Monitoring Recommendations

  • Log command-line invocations of bru run and record the collection path being executed.
  • Monitor endpoint file access events for the Bruno process reading configuration, credential, and key material paths.
  • Inspect proxy logs for POST or PUT requests originating from Bruno with body sizes matching known sensitive files.

How to Mitigate CVE-2026-85665

Immediate Actions Required

  • Upgrade Bruno and bruno-cli to a version later than 4.1.0 once a patched release is published by the maintainers.
  • Do not execute Bruno collections received from untrusted sources or unreviewed pull requests.
  • Review shared collection repositories for body:file directives that reference paths outside the collection directory.

Patch Information

Refer to the Bruno GitHub repository and GitHub Issue #8230 for the current status of a fix. Apply the upstream patch as soon as it is released and rebuild any internal distributions of the CLI.

Workarounds

  • Run Bruno inside a container, sandbox, or dedicated user account with no access to secrets or SSH keys.
  • Enforce code review on all Bruno collection changes and reject any body:file value containing ../ or absolute paths.
  • Restrict outbound network access from developer workstations to an allowlist of approved API hosts.
bash
# Configuration example: grep collections for suspicious body:file references
grep -RnE 'body:file[[:space:]]*[:=][[:space:]]*.*(\.\./|^/)' ./collections

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.