Filesystem symlinks leak external file metadata
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- node.js, typescript
Direzione di ricerca
Inizia individuando l’implementazione di list_directory_with_sizes nel server del filesystem e verificando come costruisce i percorsi delle voci e legge i metadati. Controlla i test esistenti per gli elenchi di directory e i link simbolici, quindi riproduci il caso segnalato con una directory consentita che contiene un link a un file esterno. Il lavoro è completato quando l’elenco non espone più i metadati del file di destinazione e un test copre questo comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Which server?
filesystem (@modelcontextprotocol/server-filesystem)
Server version
0.6.3
How did you run the server?
Not applicable (a repository-level report)
Transport
stdio
Protocol era
Not sure
MCP client and version
n/a
Steps to reproduce
- Start the filesystem server with one allowed directory.
- Create a file outside the allowed directory and a symlink to it inside the allowed directory:
tmp="$(mktemp -d)"
mkdir "$tmp/allowed"
printf 'MCP-FILESYSTEM-SYMLINK-METADATA-MARKER\n' > "$tmp/outside-secret.txt"
ln -s "$tmp/outside-secret.txt" "$tmp/allowed/leaks-outside-size"
- Call the MCP tool for the allowed directory:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_directory_with_sizes",
"arguments": {
"path": "/tmp/example/allowed",
"sortBy": "name"
}
}
}
The vulnerable code validates only args.path, then runs fs.readdir(validPath, { withFileTypes: true }), builds entryPath = path.join(validPath, entry.name), and calls fs.stat(entryPath).
Expected behavior
Directory listings that claim to operate only inside allowed directories should not follow symlink entries to targets outside the allowed tree. The tool should use lstat, or resolve each entry and enforce the same containment check before reading target metadata.
Actual behavior
A local reproduction created an allowed directory containing a symlink to an external file. The directory-entry metadata path followed the symlink:
allowed directory=/tmp/manual_mcp_filesystem_symlink_metadata_ldkba6qc/allowed
outside target=/tmp/manual_mcp_filesystem_symlink_metadata_ldkba6qc/outside-secret.txt
symlink entry=/tmp/manual_mcp_filesystem_symlink_metadata_ldkba6qc/allowed/leaks-outside-size
os.lstat symlink size=71
os.stat followed target size=39
outside target actual size=39
formatted listing=[FILE] leaks-outside-size 39 B
The reported listing size matches the outside target file size, not the symlink entry metadata.
Before you submit
- I searched existing issues and this is not a duplicate.
- This is not a security vulnerability report (those go through the private advisory form).
- Lingua principale
- TypeScript
- Stelle
- 91.4k
- Fork
- 11.8k
- Merge medio
- 7h 36m
- PR unite (30g)
- 126
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelcontextprotocol/servers
-
filesystem: search_files does not expand non-wildcard excludePatterns like directory_tree doesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
modelcontextprotocol/servers#5216 ·
I maintainer di solito rispondono entro 1 giorno
-
bug v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
modelcontextprotocol/servers#5215 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation server-git server-time v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
modelcontextprotocol/servers#5213 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
documentation v2
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
modelcontextprotocol/servers#5212 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
documentation v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
modelcontextprotocol/servers#5211 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di modelcontextprotocol/servers
Issue simili
-
Add: Pbs KidsApertacheck:passed streams:add
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 2 giorni
-
maintanance
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
inmanta/web-console#7583 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
deltachat/deltachat-desktop#6881 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
[Bug Report][3.13.7] VDataTable with select-strategy="single" shows select-all checkbox in mobile modeForse già presa @lazerg l’ha presa oggi. ApertaS: triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
phivk/rubiks-lab#33 ·
I maintainer di solito rispondono entro 1 giorno