{"id":"GHSA-j99q-93c9-h869","title":"MCPVault: PathFilter restricted-directory deny-list bypass via case and trailing dot/space equivalence","summary":"MCPVault: PathFilter restricted-directory deny-list bypass via case and trailing dot/space equivalence","severity":"medium","cwe":["CWE-41","CWE-178"],"vendor":"bitbonsai","product":"@bitbonsai/mcpvault","affected":["@bitbonsai/mcpvault < 0.11.4"],"patched":["@bitbonsai/mcpvault 0.11.4"],"published":"2026-06-18","updated":"2026-06-18","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-j99q-93c9-h869","references":[{"url":"https://github.com/bitbonsai/mcpvault/security/advisories/GHSA-j99q-93c9-h869"},{"url":"https://github.com/advisories/GHSA-j99q-93c9-h869"}],"tags":["ghsa","npm"],"ingestedAt":"2026-06-19T03:39:00.820Z","ecosystem":"npm","slug":"GHSA-j99q-93c9-h869","body":"## Overview\n\nOn case-insensitive filesystems (macOS, Windows), PathFilter compiled its deny-list patterns case-sensitively and matched the path verbatim, so names like `.Git/config`, `.GIT/config`, or `.oBsIdIaN/secrets.md` slipped past the `.git`/`.obsidian`/`node_modules` restriction while the OS opened the real file. On Windows, trailing dots/spaces (`.git./config`, `.git /config`) bypassed it the same way. Affects both `isAllowed` (read/write/move/search) and `isAllowedForListing`. Vault-root `..` containment is NOT affected. Fixed in 0.11.4 by case-insensitive matching plus per-segment canonicalization before the deny-list check. Reported privately by novice-22.\n\n## Affected packages\n\n- `@bitbonsai/mcpvault < 0.11.4`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `@bitbonsai/mcpvault 0.11.4`","depth":"sunlit","depthScore":28,"depthScoreParts":{"impact":27.5,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}