browse-mcp has an arbitrary file write via unconfined download and state paths
Impact
browser_download wrote a fetched file to join(save_dir, filename) with no validation of save_dir, and browser_save_state / browser_load_state honored an explicit path unchanged. The MCP caller controls these arguments (a malicious MCP client, or an autonomous agent steered by indirect prompt injection on a visited page), so an attacker could supply an arbitrary save_dir (or state path) together with a URL whose response body became the file contents, writing attacker-controlled bytes to any path the process can reach (for example ~/.bashrc, an autostart entry, or a cron file). That is an arbitrary file write that can lead to host code execution. The force_fetch fallback additionally used a raw fetch() that bypassed the BROWSE_MCP_ALLOWED_ORIGINS origin fence.
Estimated severity: CVSS 3.1 around 7.8 (High) for the local / agent-mediated case.
Patches
Fixed in 0.8.2. save_dir is confined under the download root (~/.browse-mcp/downloads) and the explicit state path under ~/.browse-mcp/state; absolute paths and .. escapes are rejected, and download filenames are reduced to a bare basename. force_fetch now also honors the origin fence. Data roots remain relocatable via BROWSE_MCP_HOME. Upgrade to browse-mcp 0.8.2.
Workarounds
Restrict the exposed tools with BROWSE_MCP_TOOLS to a set that excludes browser_download, browser_save_state, and browser_load_state (for example the hardened recipe in SECURITY.md). Note that the allowlist hides the tools from an agent but does not stop a malicious MCP client from calling them by name, so upgrading is the real fix.
- Reported privately by novice-22.
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| npm package | browse-mcp | < 0.8.2 | 0.8.2 |
References
- https://github.com/That1Drifter/browse-mcp/security/advisories/GHSA-m9mq-7m7q-xc6p
- https://github.com/That1Drifter/browse-mcp/pull/58
- https://github.com/That1Drifter/browse-mcp/commit/5352a4a56f626254b445bfa07e4bb48c5aad15c1
- https://github.com/That1Drifter/browse-mcp
- https://github.com/That1Drifter/browse-mcp/blob/v0.8.2/CHANGELOG.md#082---2026-06-13
- https://github.com/That1Drifter/browse-mcp/releases/tag/v0.8.2
- CVSS vector
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N- Weakness (CWE)
CWE-22- Platform
- npm
- Package
browse-mcp- Disclosed
- 25.08.2026
- Updated
- 11.10.2026 10:22
Sources and licenses
OSV / GitHub Advisory Database - GHSA-m9mq-7m7q-xc6p - CC BY 4.0
Vulnerability history: browse-mcp
All published vulnerabilities of this package (npm package), newest first. Shows whether this is a one-off slip or a package that needs watching.
This is the only known vulnerability of this package.
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.