The filesystem MCP server checked that a requested path resolved inside an approved directory. It then opened the pathname again. That gap let a local actor replace an intermediate directory with a symlink after validation but before the read, making the server open a file outside its configured root. The advisory reports an isolated two-user Linux…
Inspect the ClaimsCase · DiggingBeagle record
MCP filesystem read validation was vulnerable to a timed symlink swap
The filesystem MCP server checked that a requested path resolved inside an approved directory. It then opened the pathname again. That gap let a local actor replace an intermediate directory with a symlink after validation but before the read, making the server open a file outside its configured root.
Public disclosure: Nov 11, 2026
Cooperating local filesystem manipulator and a privileged MCP process; no general unauthenticated arbitrary read.
Assessment profile
Assessment method- Setting
- research demonstration
- Exploitation
- demonstrated
- Evidence
- Grade B
- Remediation
- patch available
- AI role
- AGAINST AI
Basis and provenance
The upstream advisory includes a two-user Linux test retrieving a file inaccessible to the attacker. It requires a local path swapper and server identity with read access. An impact band is not assigned because the available Claims do not establish a comparable verified severity or quantified harm.
Assessed Nov 12, 2026 using diggingbeagle.assessment/1.
Evidence basis: CLM-R239-030-CORE · MCP filesystem read_text_file TOCTOU race leaks forbidden files across different Linux users
At a glance
The observed effect is limited to the study or disclosed setting; deployment and independent impact remain unestablished.
Read the implicationsSuccess frequency under mixed workloads and platform-specific guarantees after the 2.3.0 fix remain uncertain.
Limits and uncertaintyFull account
The filesystem MCP server checked that a requested path resolved inside an approved directory. It then opened the pathname again. That gap let a local actor replace an intermediate directory with a symlink after validation but before the read, making the server open a file outside its configured root.
The advisory reports an isolated two-user Linux reproduction: the attacker could not directly read the protected file, but the MCP process could, and a timed swap returned matching contents. It requires an attacker-writable parent, a reachable target and sufficient server permissions. Package 2.3.0 is listed as fixed. This was a demonstrated test, not a disclosed remote mass breach.
This is a confused-deputy effect, not a claim that the attacker already had permission to open the outside secret. The two-user reproduction establishes a concrete privilege separation failure under tight race conditions. It is distinct from the companion move_file bug because the demonstrated operation does not relocate the protected file.
Mechanism and trust boundary
- 01
The privileged filesystem MCP server approves a realpath inside its allowed directory.
- 02
A local actor replaces a writable parent with a symlink before a fresh open.
- 03
The server can read an otherwise inaccessible outside file under the server's own identity.
Claims & evidence
CLM-R239-030-COREGHSA-p9cv-8g75-4xcg documents a read_text_file time-of-check/time-of-use path swap that retrieved a file outside allowedDirectories in a two-user Linux test.supported
Basis: reported finding
- supportsMCP filesystem read_text_file TOCTOU race leaks forbidden files across different Linux usersprimary disclosure
Security advisory, two-user race reproduction, affected versions and fix
Implications
The observed effect is limited to the study or disclosed setting; deployment and independent impact remain unestablished.
Controls and mitigations
- Use descriptor-anchored opens beneath approved directories, pin paths through their use, separate service identities and upgrade the filesystem server.
Unknowns and contradictions
- Success frequency under mixed workloads and platform-specific guarantees after the 2.3.0 fix remain uncertain.
Sources and citation
Material revision history
- Nov 12, 2026 · Published version · first publication · revision 241