GHSA-rr55-jp92-8wp2: claude-faf-mcp has an arbitrary local file read/write via unconfined `path` argument in FAF tools
`claude-faf-mcp`, an npm MCP server that gives Claude `.faf` project context, does not confine the `path` argument of its tools. Through it, a client or a prompt-injected model can read secrets and write files outside the project. Versions 5.7.1 and earlier are affected; 5.7.2 fixes it.
Published Aug 19, 2026 · Analysis Oct 25, 2026
What an attacker can do
Tool calls in claude-faf-mcp hand a caller-chosen path to the filesystem after ~ expansion and path.resolve(). The getProjectPath() helper behind the .faf tools, and the faf_read and faf_write tools, relied on a denylist. A full path to a home-directory file still went through.
Because this server is built to sit next to Claude, the likely attacker is text the model reads, not a person at a keyboard: a web page, README, ticket or .faf file that tells the agent to call faf_read on ~/.aws/credentials and repeat the output. faf_write gives the same attacker a way to drop or overwrite files outside the project, within what the user account may write. The server uses stdio, so no port is exposed, but any content the agent ingests can trigger the call.
The maintainers found it while auditing their other servers after the report on grok-faf-mcp (GHSA-cc2g-gq8c-r332). The same fix landed in faf-mcp (GHSA-j4r7-8ph4-43g3).
Who is affected
npm package claude-faf-mcp, versions <= 5.7.1. This includes copies installed through the one-click .mcpb bundle. Check a global install with:
npm ls -g claude-faf-mcpFor an .mcpb install, read the version in your MCP client's extension list.
claude-faf-mcp
- Ecosystem
- npm
- Affected
- <= 5.7.1
- Fixed in
- 5.7.2
- Check
npm ls claude-faf-mcp
How to fix it
Upgrade to 5.7.2, or reinstall the .mcpb bundle:
npm install -g [email protected]Version 5.7.2 adds safe-path.ts. It limits reads to .faf and .fafm files, keeps faf_read and faf_write inside the working directory and system temp, resolves symlinks, rejects absolute paths and ../, and adds a PATH-DENIED check in callTool().
Before you upgrade, use the server only on projects you trust. After you upgrade, FAF_ALLOWED_ROOTS can narrow access to a single directory.
How to tell if you were hit
In Claude or other client transcripts, search for faf_read, faf_write and .faf tool calls whose path points outside the project: ~, absolute paths, .., .ssh, .aws, .env. Check for unexpected recent writes to dotfiles in the home directory. On 5.7.2 and later, rejected attempts show a PATH-DENIED message. Beam records agent MCP tool calls and file access, and can flag reads of credential files.
Original advisory
From the GitHub Advisory Database (CC BY 4.0).
Summary
claude-faf-mcp MCP tools accept a caller-controlled path argument and resolve it (~ expansion + path.resolve()) straight into a filesystem read/write without confining it to a trusted project directory. An absolute path or ../ traversal is resolved and used as-is, so the server process can be made to read — and, via the file tools, write — files outside the intended .faf project context. The only remaining limit is OS file permissions.
Affected tools
The shared getProjectPath() chokepoint (feeding the .faf tools) and the general-purpose faf_read / faf_write file tools resolved a caller path straight into a read/write with no confinement (denylist-only); an absolute path still reached home-directory secrets, and faf_write could write outside the project.
Impact
An MCP client — or an LLM prompt-injected via attacker-controlled content (a web page, README, ticket, or .faf) into issuing a tool call — can read any file the server process can read: SSH keys (~/.ssh/id_rsa), cloud credentials (~/.aws/credentials), .env files, source, /etc/passwd; and faf_write could write outside the project. This is a sensitive-information-disclosure (CWE-200) primitive that far exceeds the declared .faf project-context scope. The server runs over stdio, so the read/write is reached by a crafted tool call (e.g. a prompt-injected agent processing attacker-controlled content).
Patches
Fixed in 5.7.2 by confining every caller-supplied path before any filesystem access (safe-path.ts):
- Reads are restricted to
.faf/.fafmcontext files, so non-context files (secrets) are refused regardless of directory. - General file ops (
faf_read/faf_write) are confined to the project root (cwd + system temp; override withFAF_ALLOWED_ROOTS). - Paths are canonicalized through symlinks (closing the symlink bypass); absolute paths and
../escapes are rejected;callTool()gains a central PATH-DENIED guard.
Upgrade: npm install -g [email protected] (or one-click .mcpb install).
Workarounds
If you cannot upgrade immediately, run the server only against trusted local projects, and set FAF_ALLOWED_ROOTS (patched versions) to a single project directory for a hard directory boundary.
Credits
Identified by the maintainers during a sibling-server audit prompted by the coordinated disclosure of the same class of issue in grok-faf-mcp by Zhihao Zhang (Worcester Polytechnic Institute).
Questions
- Is claude-faf-mcp 5.7.1 vulnerable?
Yes. All releases through 5.7.1 are affected, and 5.7.2 is the first fixed release.
- Can the flaw write files, not just read them?
Yes. The advisory says
faf_writecould write outside the project, limited only by the permissions of the user running the server.- What do I need to be attacked?
Someone must cause a tool call with a crafted path. The usual route is injected text in content the agent reads. The server runs over stdio and listens on no port.
- Are other FAF servers affected?
Yes. The same bug was fixed in
grok-faf-mcp1.5.3 andfaf-mcp2.1.3.
References
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. The analysis is written by an AI model from the sources listed above and checked by automated rules before it is published. Check versions against the vendor's advisory before you act. Methodology
More Other MCP servers and tools vulnerabilities
All Other MCP servers and tools entriesCVE-2026-77361
obsidian-tc : Symlink read-ACL scope bypass via lexical path checks
medium4.7Oct 23, 2026CVE-2026-114126
Storybook dev server vulnerable to code injection from the local network
high8.7Oct 22, 2026CVE-2026-113731
djust: Arbitrary absolute-path file read in the find_handlers_for_template MCP tool
low3.3Oct 21, 2026CVE-2026-114125
Storybook: Missing origin validation in Storybook preview allows code injection from malicious websites
critical9.4Oct 21, 2026CVE-2026-111770
MCP TypeScript server SDK: Shared transport or server instances delivered one HTTP client's messages to another
high7.7Oct 20, 2026GHSA-953h-535j-jg2v
agent-router: MCP session resume does not verify the embedded anti-hijacking subject; default Helm seed makes session IDs forgeable
medium6.8Oct 19, 2026
