安全文件操作MCP服务器
一种模型上下文协议(MCP)服务器,提供安全的文件操作,内置保护措施,防止中描述的漏洞 The Register关于Claude‘s Files API exfiltering攻击的文章.
这解决的问题
Anthropic的Claude产品(Claude Code,Cowork)容易受到即时注入攻击,这些攻击可以将敏感文件泄漏到攻击者的API密钥。攻击链的工作原理如下:
- 用户将Claude连接到包含敏感文件的文件夹
- 攻击者植入了一个带有隐藏提示注入的文档
- 当Claude处理文件时,注入的提示符会触发
- Claude通过文件API将文件上传到攻击者的Anthropic帐户
此MCP服务器提供了Anthropic尚未实现的安全层。
关键安全功能
1.API密钥验证(validate_api_destination)
拦截出站API调用,并验证目标API密钥是否与经过身份验证的用户密钥匹配。 这是关键的遗漏支票 -任何文件上载到不匹配的API密钥都会被阻止并触发安全警报。
2.快速注射检测(scan_for_injection, secure_read_file)
扫描所有文件内容,查找30多种提示注射模式,包括:
- 直接指令操作(“忽略之前的指令”)
- 命令执行模式(curl、wget、exec、eval)
- API凭证模式(API密钥、令牌、授权头)
- 文件泄漏命令(上传、发送、传输)
- 壳体注射模式
- Base64编码命令
- 人类API特定模式
高风险内容会自动隔离并生成安全警报。
3.人在循环审批门
敏感操作需要明确的人工批准:
- 文件写入敏感路径
- 外部API调用
- 访问新目录
- 文件上传
审批请求具有可配置的超时(默认值:5分钟),如果未经审核,则会自动拒绝。
4.综合审计日志
每个操作都记录了:
- 时间戳和操作类型
- 文件路径和内容哈希
- API端点和密钥前缀
- 批准状态和ID
- 注射检测结果
- 阻塞原因
5.可配置的访问策略
定义允许/阻止的目录、路径模式和文件大小限制。敏感目录(.ssh, .env, .aws等)默认情况下被阻止。
安装
# Clone or download the server
cd secure-file-ops-mcp-server
# Install dependencies
npm install
# Build
npm run build用法
作为stdio MCP服务器(本地)
# Run directly
node dist/index.js
# Or via npm
npm start作为HTTP MCP服务器(远程)
# Set transport to HTTP
TRANSPORT=http PORT=3000 npm startClaude桌面配置
添加到您的Claude桌面配置(~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"secure-file-ops": {
"command": "node",
"args": ["/path/to/secure-file-ops-mcp-server/dist/index.js"]
}
}
}可用工具
文件操作
| 工具 | 说明 |
|---|---|
secure_read_file | 通过注入扫描和策略执行读取文件 |
secure_write_file | 编写带有审批门的文件 |
安全验证
| 工具 | 说明 |
|---|---|
validate_api_destination | 关键的 -验证API调用没有筛选到错误的帐户 |
scan_for_injection | 扫描任何文本以查看提示注射模式 |
循环中的人类
| 工具 | 说明 |
|---|---|
request_approval | 为敏感操作创建审批请求 |
check_approval_status | 检查操作是否已获得批准 |
approve_operation | 批准或拒绝待处理的操作 |
配置和监控
| 工具 | 说明 |
|---|---|
set_access_policy | 配置允许/阻止的目录 |
audit_log | 查询审计跟踪 |
security_alerts | 查看安全警报 |
acknowledge_alert | 确认已审核的警报 |
示例工作流
安全文件读取
User: Read the config file at ./app/config.json
Claude: [calls secure_read_file]
Result:
- File content returned
- Injection scan: Clean
- No sensitive data patterns detected
- Operation logged渗透尝试受阻
[Malicious document contains hidden instruction to upload files]
Claude: [document triggers curl command to attacker's API]
Claude: [calls validate_api_destination]
Result:
❌ API Destination Invalid
Mismatch Detected: Yes - POTENTIAL EXFILTRATION
Reason: Destination API key does not match authenticated user key.
⚠️ Security Alert Generated
🔴 CRITICAL: API key mismatch detected - potential exfiltration attempt已批准的写入操作
User: Write the updated config to ./app/config.json
Claude: [calls secure_write_file with require_approval=true]
Result:
🔒 Approval Required
Approval ID: abc-123-def
User: [calls approve_operation with approve=true]
Claude: [executes the approved write]
Result:
✅ File Written Successfully检测到的注射模式
服务器检测到以下类型的提示注入:
| 类别 | 示例 | |
|---|---|---|
| 指令覆盖 | “忽略以前的指令”,“新指令:” | |
| 命令执行 | curl, wget, exec(), eval(), subprocess | |
| 凭证访问 | “api_key”、“授权:持有者”、“secret_key” | |
| 数据过滤 | “上传”、“发送”、“传输”、“过滤” | |
| 壳体注射 | ;rm, ` | bash,回溯, $()` |
| 编码命令 | base64 -d, atob(), Buffer.from(..., 'base64') | |
| Anthropic API | “API.anthopic.com”,“文件/上传” |
风险等级
| 级别 | 操作 | 描述 |
|---|---|---|
none | 允许 | 未检测到任何模式 |
low | 监视 | 1模式,继续记录 |
medium | 查看 | 2个模式,标记以引起注意 |
high | 块 | 3-4个图案,需要批准 |
critical | 隔离 | 5+模式、阻止和警报 |
默认阻止的目录
默认情况下,这些目录被阻止:
/etc/passwd,/etc/shadow,/etc/ssh~/.ssh,~/.aws,~/.config/root,/var/lognode_modules,.git,.env
建筑
┌─────────────────────────────────────────────────────────────────┐
│ MCP Client │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Secure File Ops MCP Server │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Injection │ │ Access │ │ Approval │ │
│ │ Scanner │ │ Policy │ │ Gates │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Audit Logger │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Security Alerts │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ File System │
└─────────────────────────────────────────────────────────────────┘与现有工作流集成
此服务器设计为 插入安全层.将直接文件系统访问替换为对此MCP服务器的调用:
// Before (vulnerable)
const content = fs.readFileSync(path);
await anthropic.files.upload(content);
// After (secure)
const result = await mcpClient.call('secure_read_file', { path });
if (result.injectionScan?.isClean) {
const validation = await mcpClient.call('validate_api_destination', {
destination_url: 'https://api.anthropic.com/v1/files',
destination_api_key: destinationKey,
source_api_key: authenticatedKey
});
if (validation.isValid) {
await anthropic.files.upload(result.content);
}
}局限性
- 内存存储:审计日志和警报存储在内存中。对于生产,与持久存储集成。
- 单一流程:审批门在单个服务器流程中工作。对于分布式系统,使用共享审批存储。
- 基于模式的检测:注射检测使用模式匹配,这可能会产生假阳性/阴性。定期更新模式。
贡献
欢迎投稿!优先领域:
- 其他注射模式
- 持久存储后端
- 集成测试
- 客户端SDK
许可证
麻省理工学院
致谢
- PromptArmor 的 用于泄露文件API exfiltering漏洞
- 约翰·雷伯格 原始克劳德守则披露
- 西蒙·威利森 用于正在进行的快速注射研究
