When an agent writes a nonexistent child, the original server checked the existing parent and later followed an absolute pathname. A local actor able to exchange that parent for a symlink could redirect the operation outside allowedDirectories. primary evidence also discusses an agent prompt-injection prerequisite in some scenarios; untrusted text alone is…
Inspect the ClaimsCase · DiggingBeagle record
MCP Filesystem directory-race fix remained incomplete on Windows
A directory could change after allowlist validation and before a write; the 2.0.1 repair pinned Unix directory handles but left a Windows junction-swap scenario.
Assessment profile
Assessment method- Setting
- research demonstration
- Exploitation
- demonstrated
- Evidence
- Grade B
- Remediation
- mitigation available
- AI role
- AGAINST AI
Basis and provenance
Proof and patch analysis, but residual Windows exploitability explicitly remains. The impact band remains unknown: available evidence does not establish actual deployed victim outcomes or a comparable measured loss.
Assessed Oct 26, 2026 using diggingbeagle.assessment/1.
Evidence basis: CLM-CP20-MCP-FS-TOCTOU · CLM-CP20-ENRICH-MCP-FS-TOCTOU · MCP Filesystem parent-directory TOCTOU write bypass
At a glance
Release 2.0.1 changes the Unix mechanism by using directory handles, while the advisory says Windows remained partly vulnerable to junction swaps. Do not describe 2.0.1 as a universal fix or a verified mass exploitation event.
Limits and uncertaintyFull account
When an agent writes a nonexistent child, the original server checked the existing parent and later followed an absolute pathname. A local actor able to exchange that parent for a symlink could redirect the operation outside allowedDirectories. primary evidence also discusses an agent prompt-injection prerequisite in some scenarios; untrusted text alone is not the same as a cooperating on-host racer.
Release 2.0.1 changes the Unix mechanism by using directory handles, while the advisory says Windows remained partly vulnerable to junction swaps. Do not describe 2.0.1 as a universal fix or a verified mass exploitation event.
On Windows, keep agent-writable roots isolated from other local writers until handle-relative writes are available. The general repair requires binding checking and effect to the same object, not adding another string comparison.
The missing file triggers ENOENT fallback, so the server checks an existing parent, waits, and later writes through an absolute child pathname. Another local process with rights to exchange the parent can substitute a symlink between those operations. The version 2.0.1 Unix remediation binds writes to a directory handle; the advisory nevertheless documents a remaining Windows junction variant. Treat 2.0.1 as the fix for the listed Unix path, not as proof that a shared Windows directory is safe. Reproduction requires a local racer or equivalent concurrent filesystem control; a prompt alone does not create that capability.
Claims & evidence
CLM-CP20-MCP-FS-TOCTOUThe official filesystem advisory distinguishes a pinned Unix write from a residual Windows path-string write vulnerable to junction replacement between checking a parent and acting on a child.supported
Basis: reported finding
- supportsMCP Filesystem parent-directory TOCTOU write bypassrole not specified
Parent-directory fallback TOCTOU; Windows partly fixed; issue 5260
CLM-CP20-ENRICH-MCP-FS-TOCTOUGHSA-53mr-w429-c597 documents an ENOENT parent-validation race and distinguishes a handle-based Unix improvement in 2.0.1 from a remaining Windows junction-swap exposure.supported
Basis: reported finding
- supportsMCP Filesystem parent-directory TOCTOU write bypassrole not specified
TOCTOU advisory; parent fallback and Windows partly-fixed notes
Unknowns and contradictions
- Release 2.0.1 changes the Unix mechanism by using directory handles, while the advisory says Windows remained partly vulnerable to junction swaps. Do not describe 2.0.1 as a universal fix or a verified mass exploitation event.
Sources and citation
Material revision history
- Oct 26, 2026 · Canonical change recorded · new in release · revision 193