{"id":"661059dc-031b-4781-a35f-3b9ffc700d56","entityType":"agent","slug":"clawhub-fyniujin-skill-security-checker","name":"skill-security-checker","canonicalUrl":"https://www.xpersona.co/agent/clawhub-fyniujin-skill-security-checker","canonicalPath":"/agent/clawhub-fyniujin-skill-security-checker","generatedAt":"2026-10-11T05:31:54.302Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T03:08:59.174Z","emptyReason":null},"description":"Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.json / poetry.lock，版本区间级精确匹配）、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。 Skill: skill-security-checker Owner: fyniujin Summary: Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.js","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s177r8w7p1d7cpbys9bn33kwhs89d0xw:skill-security-checker","sourceUrl":"https://clawhub.ai/fyniujin/skill-security-checker","homepage":"https://clawhub.ai/fyniujin/skills/skill-security-checker","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/fyniujin/skill-security-checker","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/fyniujin/skills/skill-security-checker","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:59.174Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:59.174Z","emptyReason":null},"stars":null,"forks":null,"downloads":1177,"packageName":null,"latestVersion":"3.5.5","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:59.159Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T03:08:59.174Z","lastCrawledAt":"2026-10-11T03:08:59.159Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T03:08:59.159Z","lastVerifiedAt":null,"highlights":[{"version":"3.5.5","createdAt":"2026-10-09T11:19:45.736Z","changelog":"skill-security-checker v3.5.5 - Updated version metadata to 3.5.5. - Documentation improvements in SKILL.md. - Removed obsolete skill-card.md file. - Other internal script or metadata adjustments (see commit diff).","fileCount":33,"zipByteSize":92011},{"version":"3.5.0","createdAt":"2026-10-09T09:00:30.443Z","changelog":"Skill-security-checker v3.5.0 introduces a new极速快扫模式，30 秒给出裁定与风险摘要： - 新增「快扫」模式（--quick）：一键出结论（✅干净/⚠️可疑/🚫恶意）、Top3 风险、简短理由，适用日常 Skill 安全自查和装前查验。 - 增加 scripts/quick_verdict.json 支持快扫对应风险映射。 - 文档简化，首屏即给「3 行上手」命令。 - 移除 skill-card.md，合并入口文档内容，精简文档结构。 - 其它多处细节优化，提升便捷性与新手体验。","fileCount":33,"zipByteSize":91883},{"version":"3.4.0","createdAt":"2026-09-11T13:10:31.276Z","changelog":"v3.4.0 发布","fileCount":32,"zipByteSize":87960},{"version":"3.3.0","createdAt":"2026-08-24T16:10:43.674Z","changelog":"skill-security-checker v3.3.0 - 新增轻量 SAST 污点追踪（Python AST/JS 词法级，source→sink 证据链，降误报）。 - 支持社区安全规则包（schema 校验、签名验证、来源记录），命令行可加 --community-rules。 - 健康度与合规检查全新合并，结构/质量/权限合规统一出口，报告结构更清晰。 - 新增 scripts/community_rules.py、scripts/taint_tracker.py，移除 skill-card.md。 - 规则引擎、行为捕获、ML检测及主功能保持兼容，常规参数和用法未变。","fileCount":31,"zipByteSize":79472},{"version":"3.2.0","createdAt":"2026-08-17T11:38:07.822Z","changelog":"**v3.2.0 is a major upgrade introducing a pluggable YAML rules engine, ML-based prompt injection detection, and system-level behavioral monitoring.** - Refactored static scanning to use YAML rules packages (6 categories, hot-pluggable via rules/*.yaml; easy rule addition without code changes) - Added ML-based semantic detection for prompt injection (ONNX model + regex fallback for bypass-resistant detection) - Introduced system-level behavioral capture: eBPF (Linux) and ETW (Windows) syscall monitoring in sandbox mode - Added scripts for rule engine (`scripts/rules_engine.py`), ML detection, and system monitoring - Removed legacy Markdown skill card (`skill-card.md`) - Documentation updates reflecting all new functionality, capabilities, and usage flags","fileCount":29,"zipByteSize":70740},{"version":"3.1.0","createdAt":"2026-08-07T13:39:17.218Z","changelog":"**3.1.0 增强版：「行业首个恶意Skill指纹&全局排除」能力上线** - 新增「实时恶意Skill指纹库」扫描（341条 SHA256 指纹，100% 拦截已知恶意Skill），支持自定义扩展 - 新增全局排除配置（.nosec.yml）：支持按类别、文件、正则团队级统一配置误报排除 - CVE 漏洞库切换为「7天全量+每日增量」本地缓存，支持完全离线审计（自动降级使用缓存） - 支持通过 --malicious-db、--global-exclude、--supply-chain 快速启用新能力 - 升级文档与参数，详细标注新特性用法 - 移除 skill-card.md，精简文件结构","fileCount":19,"zipByteSize":57096},{"version":"3.0.0","createdAt":"2026-08-01T09:37:04.582Z","changelog":"**Summary:** 3.0.0 introduces supply chain security features and native CI/CD integration, expanding beyond static scanning. - Added supply chain risk analysis (dependency tree, typo-squatting detection, CVE auto-fetch, license compliance). - Introduced CI/CD native integration with templates for GitHub Actions, GitLab CI, and SARIF/quality gate reporting. - New scripts for pipeline compatibility and advanced dependency checks. - Enhanced reporting: now supports SARIF format in addition to JSON/HTML. - Dropped outdated documentation (e.g., removed skill-card.md). - General improvements and documentation updates reflecting all new capabilities.","fileCount":17,"zipByteSize":49216},{"version":"2.0.0","createdAt":"2026-07-22T09:14:24.202Z","changelog":"skill-security-checker v2.0.0 - 新增「动态沙箱执行扫描」功能，支持在 Docker 或 Windows Sandbox 隔离环境中实际运行 Skill 代码，检测运行时恶意行为（如网络外联、敏感路径访问等）。 - 动态扫描自动选择隔离后端（Docker 优先、或 Windows Sandbox），如无隔离环境会降级为静态扫描并提示。 - 增加参数：`--dynamic`（启用动态扫描）、`--allow-domain`（放行白名单域名）、`--sandbox-timeout`（自定义沙箱超时）。 - 代码结构调整：新增 sandbox 执行扫描相关代码目录（`scripts/sandbox/` 下多个新文件）。 - 文档全面更新，详细说明动态扫描能力、参数说明、用途和安全声明。 - 移除 skill-card.md（文档合并优化）。","fileCount":14,"zipByteSize":37757}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s177r8w7p1d7cpbys9bn33kwhs89d0xw:skill-security-checker","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T05:31:54.296Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fyniujin-skill-security-checker/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T03:08:59.174Z","emptyReason":null},"readme":"Skill: skill-security-checker\n\nOwner: fyniujin\n\nSummary: Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.json / poetry.lock，版本区间级精确匹配）、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。\n\nTags: latest:3.5.5\n\nVersion history:\n\nv3.5.5 | 2026-10-09T11:19:45.736Z | auto\n\nskill-security-checker v3.5.5\n\n- Updated version metadata to 3.5.5.\n- Documentation improvements in SKILL.md.\n- Removed obsolete skill-card.md file.\n- Other internal script or metadata adjustments (see commit diff).\n\nv3.5.0 | 2026-10-09T09:00:30.443Z | auto\n\nSkill-security-checker v3.5.0 introduces a new极速快扫模式，30 秒给出裁定与风险摘要：\n\n- 新增「快扫」模式（--quick）：一键出结论（✅干净/⚠️可疑/🚫恶意）、Top3 风险、简短理由，适用日常 Skill 安全自查和装前查验。\n- 增加 scripts/quick_verdict.json 支持快扫对应风险映射。\n- 文档简化，首屏即给「3 行上手」命令。\n- 移除 skill-card.md，合并入口文档内容，精简文档结构。\n- 其它多处细节优化，提升便捷性与新手体验。\n\nv3.4.0 | 2026-09-11T13:10:31.276Z | user\n\nv3.4.0 发布\n\nv3.3.0 | 2026-08-24T16:10:43.674Z | auto\n\nskill-security-checker v3.3.0\n\n- 新增轻量 SAST 污点追踪（Python AST/JS 词法级，source→sink 证据链，降误报）。\n- 支持社区安全规则包（schema 校验、签名验证、来源记录），命令行可加 --community-rules。\n- 健康度与合规检查全新合并，结构/质量/权限合规统一出口，报告结构更清晰。\n- 新增 scripts/community_rules.py、scripts/taint_tracker.py，移除 skill-card.md。\n- 规则引擎、行为捕获、ML检测及主功能保持兼容，常规参数和用法未变。\n\nv3.2.0 | 2026-08-17T11:38:07.822Z | auto\n\n**v3.2.0 is a major upgrade introducing a pluggable YAML rules engine, ML-based prompt injection detection, and system-level behavioral monitoring.**\n\n- Refactored static scanning to use YAML rules packages (6 categories, hot-pluggable via rules/*.yaml; easy rule addition without code changes)\n- Added ML-based semantic detection for prompt injection (ONNX model + regex fallback for bypass-resistant detection)\n- Introduced system-level behavioral capture: eBPF (Linux) and ETW (Windows) syscall monitoring in sandbox mode\n- Added scripts for rule engine (`scripts/rules_engine.py`), ML detection, and system monitoring\n- Removed legacy Markdown skill card (`skill-card.md`)\n- Documentation updates reflecting all new functionality, capabilities, and usage flags\n\nv3.1.0 | 2026-08-07T13:39:17.218Z | auto\n\n**3.1.0 增强版：「行业首个恶意Skill指纹&全局排除」能力上线**\n\n- 新增「实时恶意Skill指纹库」扫描（341条 SHA256 指纹，100% 拦截已知恶意Skill），支持自定义扩展\n- 新增全局排除配置（.nosec.yml）：支持按类别、文件、正则团队级统一配置误报排除\n- CVE 漏洞库切换为「7天全量+每日增量」本地缓存，支持完全离线审计（自动降级使用缓存）\n- 支持通过 --malicious-db、--global-exclude、--supply-chain 快速启用新能力\n- 升级文档与参数，详细标注新特性用法\n- 移除 skill-card.md，精简文件结构\n\nv3.0.0 | 2026-08-01T09:37:04.582Z | auto\n\n**Summary:**  \n3.0.0 introduces supply chain security features and native CI/CD integration, expanding beyond static scanning.\n\n- Added supply chain risk analysis (dependency tree, typo-squatting detection, CVE auto-fetch, license compliance).\n- Introduced CI/CD native integration with templates for GitHub Actions, GitLab CI, and SARIF/quality gate reporting.\n- New scripts for pipeline compatibility and advanced dependency checks.\n- Enhanced reporting: now supports SARIF format in addition to JSON/HTML.\n- Dropped outdated documentation (e.g., removed skill-card.md).\n- General improvements and documentation updates reflecting all new capabilities.\n\nv2.0.0 | 2026-07-22T09:14:24.202Z | auto\n\nskill-security-checker v2.0.0\n\n- 新增「动态沙箱执行扫描」功能，支持在 Docker 或 Windows Sandbox 隔离环境中实际运行 Skill 代码，检测运行时恶意行为（如网络外联、敏感路径访问等）。\n- 动态扫描自动选择隔离后端（Docker 优先、或 Windows Sandbox），如无隔离环境会降级为静态扫描并提示。\n- 增加参数：`--dynamic`（启用动态扫描）、`--allow-domain`（放行白名单域名）、`--sandbox-timeout`（自定义沙箱超时）。\n- 代码结构调整：新增 sandbox 执行扫描相关代码目录（`scripts/sandbox/` 下多个新文件）。\n- 文档全面更新，详细说明动态扫描能力、参数说明、用途和安全声明。\n- 移除 skill-card.md（文档合并优化）。\n\nv1.3.0 | 2026-07-13T14:43:46.468Z | auto\n\nSkill-security-checker v1.3.0\n\n- 修复部分 base64 命令注入模式，解决解码后括号不匹配导致扫描报错的问题\n- 修复 protobuf CVE 编号错误\n- 新增 24 小时缓存的更新检查机制，减少频繁联网请求\n- 新增 `# nosec` 内联注释排除规则，支持误报跳过\n- 扩展依赖库漏洞覆盖范围（从 17 个增加到 26 个常见高危依赖）\n- 优化：错误信息支持中文提示，输出显示更友好，常见问答与文档更完善\n\nv1.2.0 | 2026-07-13T13:51:33.990Z | auto\n\nSkill-security-checker v1.2.0 adds smart concurrency and version update features, improves dependency auditing, and enhances stability.\n\n- New: hardware-aware parallel scanning—automatically adjusts concurrency by detecting CPU/memory.\n- New: auto-update check, notifies if newer version is available.\n- Improved: dependency vulnerability audit now supports pyproject.toml and Pipfile.\n- Fixed: credential pattern regex bug that could cause scanner crash.\n\nArchive index:\n\nArchive v3.5.5: 33 files, 92011 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (83463b), scripts/ci_templates/gitlab-ci.yml (528b), scripts/ci_templates/skill-scan.yml (2013b), scripts/community_rules.py (8337b), scripts/global_exclude.py (4170b), scripts/malicious_db.py (11521b), scripts/osv_offline.py (13778b), scripts/quick_verdict.json (842b), scripts/rules_engine.py (4142b), scripts/rules/__init__.py (0b), scripts/rules/command_injection.yaml (489b), scripts/rules/credential_leak.yaml (860b), scripts/rules/dangerous_functions.yaml (592b), scripts/rules/path_traversal.yaml (503b), scripts/rules/prompt_injection.yaml (609b), scripts/rules/ssrf.yaml (492b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/ml_detect.py (7043b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), scripts/sandbox/system_monitor.py (9281b), scripts/supply_chain.py (35753b), scripts/taint_tracker.py (14518b), skill-card.md (2058b), SKILL.md (41155b)\n\nFile v3.5.5:SKILL.md\n\n---\nname: skill-security-checker\ndescription: 'Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.json / poetry.lock，版本区间级精确匹配）、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。'\nversion: 3.5.5\n---\n\n\n# Skill Security\n\n> 一键扫描 Skill 安全风险，发布前最后一道安全闸门。\n\n## 快速开始（3 行）\n\n```bash\n# 1. 快扫：30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 + 一句话理由\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --quick\n# 2. 全量：CI/CD 用 JSON/SARIF，安全工程师看 HTML\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode full --format sarif -o report.sarif.json\n# 3. 口语触发：直接对 WorkBuddy 说「审一下这个 skill」+ 路径，自动快扫\n```\n\n## 概述\n\n本工具用于对 **WorkBuddy / ClawHub / SkillHub** 平台上发布的安全技能进行全方位安全合规扫描。它能帮你快速找出代码中的安全漏洞、不安全的依赖项、过度授权的权限配置，并以直观的评分等级和修复建议输出结果。\n\n**适用场景：**\n\n- 发布 Skill 前的安全检查\n- 评估第三方 Skill 的安全性\n- CI/CD 流水线中的自动化审查\n- Skill 质量评估与改进\n\n## 核心功能\n\n### 1. 静态扫描\n\n检测 Skill 文件中的安全漏洞：\n\n| 风险类型 | 检测内容 | 严重度 |\n|---------|---------|--------|\n| 提示注入 | 越狱指令、\"忽略原始指令\"、\"覆盖系统提示\"等文本 | 🔴 严重 |\n| 命令注入 | curl/wget 管道执行、反引号替换、$() 中执行 shell | 🔴 严重 |\n| SSRF/内网访问 | `127.0.0.1`、`10.x.x.x`、`192.168.x.x` | 🟠 高危 |\n| 凭证外泄 | 硬编码 API Key、Token、Password、Bearer Token | 🔴 严重 |\n| 路径遍历 | `../`、URL 编码绕过、绝对路径访问 | 🟠 高危 |\n| 危险函数 | `eval()`、`exec()`、`os.system()`、`pickle.load()` | 🟡 中等 |\n\n### 2. 依赖漏洞审计\n\n扫描 `requirements.txt`、`package.json`、`Pipfile`、`pyproject.toml` 等依赖文件，与内置的已知 CVE 漏洞库比对。\n\n目前覆盖 **26** 个常见高危依赖的已知漏洞：\n`requests`、`urllib3`、`flask`、`django`、`numpy`、`pillow`、`pyyaml`、`jinja2`、`cryptography`、`aiohttp`、`tqdm`、`setuptools`、`node-fetch`、`minimist`、`lodash`、`axios`、`express`、`vue`、`react`、`webpack`、`moment`、`npm`、`tough-cookie`、`word-wrap`、`protobuf`、`eslint`\n\n### 3. 权限审计\n\n检查 `allowed-tools` 声明是否有过度授权：\n\n- 声明了 Bash 但 description 中无对应使用场景 → 🟡 中等告警\n- Bash + Write 同时授权 → 🟠 高危告警\n- Bash + Exec 同时授权 → 🟠 高危告警\n- Bash + Read + Write + Edit 全量授权 → 🟠 高危告警\n\n### 4. 质量评分\n\n检查 SKILL.md 文档的完整性：\n\n| 检查项 | 要求 |\n|--------|------|\n| 必要字段 | `name`、`description`、`version` |\n| 命名规范 | kebab-case（小写字母+数字+连字符） |\n| description 长度 | 20-1024 字符 |\n| 版本号格式 | 语义化版本 (e.g., `1.0.0`) |\n| 硬编码路径 | 检测 `D:\\` 等绝对路径 |\n| 错误处理 | 文档中需提及异常处理策略 |\n\n### 5. 结构检查\n\n- 文件数量 ≤ 200\n- 总大小 ≤ 10MB\n- 缺少 README.md 时提醒\n\n### 6. 硬件感知并行（新增）\n\n自动检测当前设备的 CPU 核心数和可用内存，动态调整并发工作线程数（1-8 线程），在扫描速度和系统性能之间取得平衡。\n\n**检测逻辑：**\n- CPU 核心数 ÷ 2 = 最大线程数\n- 可用内存 < 2GB 时，线程数减半\n\n### 7. 更新检查（新增）\n\n工具运行时会自动检查 GitHub 上的新版本，发现更新时会在结果中提示用户升级。\n\n- ✅ 内置 **24 小时缓存**，避免频繁请求\n- ✅ 新增 `--skip-update` 参数可完全关闭此功能\n- ✅ 所有网络请求仅获取版本号，不下载任何内容\n\n### 8. `# nosec` 内联排除规则（新增）\n\n如果你确认某行代码是安全的，但触发了误报，可在该行末尾添加 `# nosec` 注释，扫描器将自动跳过该行。\n\n```python\n# 这行会被扫描器跳过\nos.system('ls')  # nosec\n```\n\n### 9. 实时恶意 Skill 库同步（新增）\n\n维护一份已知恶意 Skill 的 SHA256 指纹库（内置 341 条），扫描时对 Skill 目录下每个文件计算 SHA256，命中指纹即报高危，实现 100% 拦截已知恶意 Skill。\n\n- 内置 341 条恶意 Skill 指纹（PyPI 恶意包、npm 恶意包、已知攻击类型）\n- 文件内容变化即产生不同指纹，无法通过重命名或修改绕过\n- 可添加自定义指纹\n\n### 10. CVE 离线缓存（新增）\n\nCVE 数据库从\"每次请求 API\"升级为三级缓存架构，支持离线扫描：\n\n- **7 天全量缓存**：完整 CVE 库缓存到 `~/.workbuddy/cve_cache/cve_full_cache.json`\n- **每日增量更新**：当天查询过的 CVE 写入 `~/.workbuddy/cve_cache/cve_increment_cache.json`\n- **离线降级**：无网络时自动使用缓存，API 恢复后将新结果写回缓存\n\n### 11. 全局排除配置（新增）\n\n团队级 `.nosec.yml` 配置文件，按**类别、文件路径、正则模式**批量排除误报，替代逐行 `# nosec`。\n\n在 Skill 根目录创建 `.nosec.yml`：\n\n```yaml\nversion: 1\nexclude:\n  categories:\n    - quality_check\n    - path_traversal\n  files:\n    - \"scripts/audit.py\"\n  patterns:\n    - \".*test.*\"\n```\n\n- `categories`：排除整个扫描类别\n- `files`：排除指定文件的扫描\n- `patterns`：正则匹配排除行内容\n\n### 12. 动态沙箱执行扫描（新增）\n\n静态扫描只能看代码，恶意代码却可以通过**动态下载、加密载荷、条件触发**绕过。动态沙箱在**隔离环境中实际运行** Skill 脚本，捕获运行时行为，检出静态扫描完全无法发现的恶意动作。\n\n**隔离后端（自动选择）：**\n\n| 后端 | 说明 | 隔离手段 |\n|------|------|---------|\n| Docker | 首选，行为捕获最完整 | `--network=none` 默认断网、只读挂载、CPU/内存/PID 限额、`--cap-drop ALL` |\n| Windows Sandbox | Win10/11 专业版可用 | 运行时生成 `.wsb` 配置（断网 + 只读映射） |\n| 降级模式 | 无隔离环境时 | 仅做静态扫描并提示「建议在沙箱环境中进行动态扫描」 |\n\n**行为捕获维度：**\n\n- 网络请求（目标 IP / 域名 / 端口）\n- 文件读写（路径 / 模式）\n- 进程创建（命令行）\n- 环境变量读取\n- 动态代码执行（exec / compile）\n\n**异常行为标记：**\n\n| 异常行为 | 严重度 |\n|---------|--------|\n| 访问敏感路径（`~/.ssh`、`/etc/passwd`、`.aws`、`id_rsa` 等） | 🔴 严重 |\n| 网络活动 + 动态执行同时出现（疑似下载并执行远程载荷） | 🔴 严重 |\n| 向未知目标外联（非白名单域名） | 🟠 高危 |\n| 创建 shell / 解释器进程（bash、sh、powershell、cmd） | 🟠 高危 |\n| 读取疑似密钥环境变量（token、secret、apikey 等） | 🟡 中等 |\n\n**网络隔离与白名单：** 沙箱默认**完全断网**；如脚本确需联网，可用 `--allow-domain` 逐个放行可信域名，其余外联一律标记为高危。\n\n> ⚠️ 动态扫描为**可选功能**，需显式加 `--dynamic` 开启。若本机无 Docker / Windows Sandbox，工具会自动降级为纯静态扫描并给出提示，不会报错。\n\n### 13. 规则引擎 + YAML 规则包（新增）\n\nv3.2.0 起，6 类静态规则从硬编码重构为 YAML 规则包（`rules/*.yaml`），新增规则只需加 YAML 文件，无需修改代码。\n\n**规则包结构：**\n\n```\nscripts/rules/\n├── prompt_injection.yaml      # 提示注入规则（15 条正则）\n├── command_injection.yaml     # 命令注入规则（8 条正则）\n├── ssrf.yaml                  # SSRF/内网访问（11 条正则）\n├── credential_leak.yaml       # 凭证外泄（10 条正则）\n├── path_traversal.yaml        # 路径遍历（12 条正则）\n└── dangerous_functions.yaml   # 危险函数（11 条正则）\n```\n\n**YAML 文件格式示例：**\n```yaml\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\npatterns:\n  - 'ignore previous instructions'\n  - 'system prompt override'\n  - 'jailbreak'\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n```\n\n**扩展方式：** 在 `rules/` 目录新增 `.yaml` 文件即可，工具自动加载。零依赖 YAML 解析（自研轻量实现，不依赖 PyYAML）。\n\n### 14. eBPF/ETW 系统级行为捕获（新增）\n\nv3.2.0 在沙箱 5 维行为捕获基础上，新增内核级系统调用监控，覆盖应用层无法看到的底层行为。\n\n| 后端 | 平台 | 要求 | 捕获内容 |\n|------|------|------|---------|\n| eBPF (bcc) | Linux | root + bcc 安装 | syscall：connect/send/recv、open/write、fork/exec、chmod/chown、uname/gethostname |\n| ETW | Windows | 管理员权限 | syscall：文件操作、进程创建、网络活动 |\n| 降级模式 | 无 eBPF/ETW | 自动提示「系统级行为捕获不可用」 |\n\n### 15. 提示注入 ML 语义检测（新增）\n\nv3.2.0 引入 ML 语义模型检测提示注入，降低正则匹配的绕过率。\n\n| 检测模式 | 触发条件 | 说明 |\n|---------|---------|------|\n| ONNX 语义模型 | `~/.workbuddy/models/prompt_injection.onnx` 存在 | 本地推理，离线可用 |\n| 正则降级 | ONNX 模型不可用时自动回退 | 20 条正则规则（含中文） |\n\n**性能：** 结果缓存（1 小时 TTL）+ 模型懒加载，不拖慢扫描。\n\n### 16. 轻量 SAST 污点追踪（新增）\n\nv3.3.0 引入受限数据流分析，将告警从字符串匹配升级为 source→sink 证据链。\n\n| 语言 | 分析方式 | 覆盖 |\n|------|---------|------|\n| Python | AST 解析（import/assign/attribute/call 节点追踪） | eval/exec/os.system/subprocess/pickle/yaml.load/open/file.write |\n| JS/TS | 词法近似（变量赋值+属性访问追踪） | eval/exec/child_process/innerHTML/document.write/db.query |\n| 其他 | 降级为模式匹配，标注「分析深度: 模式匹配」 | 通用危险函数 |\n\n**source 定义：** `input()`、`sys.argv`、`os.environ`、`requests.get()`、`req.body`、`process.argv`、`document.cookie` 等用户输入/环境变量/网络响应。\n\n**降误报机制：** 模式命中但无完整 source→sink 传播链时，降为 ⚪ info 级（`taint_sink_only`），避免误报。\n\n### 17. 社区规则扩展（新增）\n\nv3.3.0 支持加载第三方 YAML 规则包，经 schema 校验后纳入扫描。\n\n| 能力 | 说明 |\n|------|------|\n| Schema 校验 | 必填字段、类型检查、正则合法性、枚举值校验 |\n| 来源记录 | 加载时自动附加 `_source`（文件路径）和 `_loaded_at`（时间戳） |\n| 签名验证 | 可选 HMAC-SHA256 签名（`# signature: <hex>` 注释），防篡改 |\n| 报告区分 | 官方规则与社区规则在报告中分开统计（`community_` 前缀） |\n\n**加载方式：** `--community-rules <目录路径>`，目录下放 `.yaml` 文件即可。\n\n### 18. 健康度与合规检查合并（新增）\n\nv3.3.0 将质量评分（SKILL.md 完整性 8 项）与结构检查（文件数/大小/README）合并为「健康度」模块统一评分，权限审计+健康度统一挂「合规性检查」一个出口。\n\n| 合并模块 | 包含 | 输出类别 |\n|---------|------|---------|\n| 健康度 | 质量评分（8 项）+ 结构检查（3 项） | `health_quality` / `health_structure` |\n| 合规性 | 健康度 + 权限审计 | `compliance_permission` + 健康度全部 |\n\n**好处：** 报告结构更清晰，旧版「质量评分」「结构检查」「权限审计」三个独立模块合并为「合规性检查」一个入口。\n\n### 19. OSV.dev 离线数据包接入（新增）\n\nv3.4.0 将 OSV.dev 官方导出包（按 PyPI / npm 生态过滤）周期下载并合并进已有的三级缓存（7 天全量 + 每日增量 + 离线降级），依赖覆盖从硬编码 26 包跃升到**全生态**，且**全程零密钥**（纯 HTTPS 下载，无需任何 API key）。\n\n| 项 | 说明 |\n|----|------|\n| 数据来源 | OSV 公开导出包（PyPI / npm），无鉴权 |\n| 缓存位置 | `~/.workbuddy/osv_offline_cache/`（仓库外，不污染 skill 包） |\n| 刷新策略 | 索引超过 7 天或 `--refresh-osv` 时联网重建，其余走离线 |\n| 匹配粒度 | 按锁定文件**版本区间**精确匹配（非包名级） |\n| 离线降级 | 无网络时用最近快照，报告中标注 `data_point`（数据时点） |\n\n**性能：** 索引仅构建一次（周期缓存），扫描时为纯内存字典查询；导出包体积大但存于缓存目录，不拖慢扫描。\n\n### 20. 锁文件深度解析（新增）\n\nv3.4.0 新增 `package-lock.json` / `poetry.lock` 两类锁文件解析器（原有 `requirements.txt` 升级），自动展开**传递依赖全树**（lock 文件天然含完整依赖图），扫描匹配从「包名级」升级到「版本区间级」。\n\n| 解析器 | 生态 | 传递依赖 | approx |\n|--------|------|---------|--------|\n| requirements.txt | PyPI | 仅直接依赖 | 标注 `approx`（无 lock 时近似） |\n| package-lock.json | npm | 全树（lock 内含） | 精确 |\n| poetry.lock | PyPI | 全树（lock 内含） | 精确 |\n| package.json / pyproject.toml | npm / PyPI | 仅直接依赖 | 标注 `approx` |\n\n**好处：** 有了 lock 文件即可精确判定「某版本是否落在漏洞影响区间」，大幅降低无版本信息导致的误报；无 lock 时退化为直接依赖 + 近似匹配并明确标注 `approx`。\n\n### 21. 一键快扫 + 三档裁定（新增）\n\nv3.5.0 新增 `--quick` 一键模式，专为「**装之前看一眼**」的大多数用户设计——技术深度远超竞品，但用户要的是一句话价值：\n\n- **只跑 L1 静态层三件套**（≤30 秒）：① 静态指纹（341 条恶意 skill 指纹 hash + 模式匹配）② 6 类规则（prompt_injection / command_injection / SSRF / credential_leak / path_traversal / dangerous_functions，来自 `rules/*.yaml`）③ 权限审计（allowed-tools 过度授权检测）\n- **跳过**沙箱执行、OSV 供应链、污点追踪、ML 检测、社区规则等重能力，换取速度\n- **三档裁定**：🚫恶意（命中 critical / 恶意指纹）、⚠️可疑（命中 high/medium）、✅干净（无命中或仅 info）\n- **Top3 风险** + **一句话理由**（如「检测到 2 条高危或中危风险，建议审查后再安装」）\n- **裁定映射表外置**（`scripts/quick_verdict.json`）：分数→档位的规则不硬编码，可自定义\n\n### 22. 报告分级输出（优化）\n\n| 档位 | 触发 | 输出 | 适用人群 |\n|------|------|------|---------|\n| **quick**（默认） | `--quick` / `--mode quick` / 默认 | 裁定 + Top3 + 一句话理由（≤1 屏） | 装之前看一眼的普通用户 |\n| **full** | `--mode full` | 全部细节（JSON / HTML / SARIF）+ CI/CD 集成 | 安全工程师 / CI 流水线 |\n\n**默认档位可配**：环境变量 `SKILLSEC_MODE=quick|full` 可覆盖默认（默认 quick）。快扫报告与全量报告各取所需，不互相干扰。\n\n## 使用方法\n\n### 基本用法（命令行）\n\n```bash\n# 扫描一个 Skill 目录（文本输出）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n\n# 生成 JSON 报告\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format json\n\n# 生成 HTML 报告并保存为文件\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format html -o report.html\n\n# 跳过更新检查\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --skip-update\n\n# 开启动态沙箱执行扫描（需 Docker 或 Windows Sandbox）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic\n\n# 动态扫描 + 放行白名单域名 + 自定义超时（秒）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic --allow-domain api.github.com --sandbox-timeout 60\n\n# 启用供应链风险分析\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain\n\n# 启用恶意 Skill 指纹匹配\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --malicious-db\n\n# 启用全局排除配置（.nosec.yml）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --global-exclude\n\n# 同时启用所有高级功能\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --malicious-db --global-exclude\n\n# 启用 YAML 规则引擎（6 类规则可热插拔）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine\n\n# 启用 ML 提示注入语义检测（ONNX + 正则降级）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --ml-detect\n\n# 启用 eBPF/ETW 系统级行为捕获\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --syscall-monitor\n\n# v3.2.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine --ml-detect --syscall-monitor --malicious-db --global-exclude --supply-chain --dynamic\n\n# v3.3.0 污点追踪\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking\n\n# v3.3.0 社区规则\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --community-rules \"D:\\path\\to\\community-rules\"\n\n# v3.3.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking --community-rules \"D:\\path\\to\\community-rules\" --rule-engine --ml-detect --malicious-db --global-exclude --supply-chain\n\n# v3.4.0 OSV 离线数据包强制刷新索引（联网重建全生态 CVE 索引）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --refresh-osv\n\n# v3.4.0 全功能模式（含锁文件版本区间匹配）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking --community-rules \"D:\\path\\to\\community-rules\" --rule-engine --ml-detect --malicious-db --global-exclude --supply-chain --refresh-osv\n\n# v3.5.0 一键快扫（默认，30 秒出三档裁定 + Top3 + 一句话理由）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --quick\n\n# v3.5.0 显式指定档位（quick / full）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode quick\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode full\n\n# v3.5.0 环境变量覆盖默认档位（默认 quick）\nset SKILLSEC_MODE=full\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n```\n\n### 参数快查\n\n| 参数 | 说明 | 默认 |\n|------|------|------|\n| `skill_path` | 待扫描的 Skill 目录（必填） | — |\n| `--format` | 输出格式：`text` / `json` / `html` | `text` |\n| `-o, --output` | 报告输出文件路径 | 打印到终端 |\n| `--skip-update` | 跳过更新检查 | 关闭 |\n| `--dynamic` | 开启动态沙箱执行扫描 | 关闭 |\n| `--allow-domain` | 放行白名单域名（可重复） | 无（默认断网） |\n| `--sandbox-timeout` | 沙箱执行超时（秒） | 30 |\n| `--supply-chain` | 启用供应链风险分析 | 关闭 |\n| `--malicious-db` | 启用恶意 Skill 指纹匹配（341 条） | 关闭 |\n| `--global-exclude` | 启用 .nosec.yml 全局排除配置 | 关闭 |\n| `--rule-engine` | 启用 YAML 规则引擎（6 类规则包） | 关闭 |\n| `--syscall-monitor` | 启用 eBPF/ETW 系统级行为捕获 | 关闭 |\n| `--ml-detect` | 启用 ML 提示注入语义检测 | 关闭 |\n| `--taint-tracking` | 启用污点追踪（Python AST + JS 词法，source→sink 证据链） | 关闭 |\n| `--community-rules` | 加载第三方社区规则包目录（schema 校验 + 来源记录） | 关闭 |\n| `--refresh-osv` | 强制刷新 OSV 离线数据包索引（v3.4.0，联网重建全生态 CVE 索引） | 关闭 |\n| `--quick` | 一键快扫：仅 L1 静态层（恶意指纹+6类规则+权限审计），30 秒出三档裁定（v3.5.0） | 关闭（但默认档位即为 quick） |\n| `--mode` | 扫描档位：`quick`（快扫三档裁定，≤1屏）/ `full`（全量细节 SARIF/HTML/JSON），可用环境变量 `SKILLSEC_MODE` 覆盖默认 | `quick` |\n\n### 在 WorkBuddy 中触发\n\n直接告诉 WorkBuddy，口语化触发词命中率最高（v3.5.0 新增对齐钟馗的中文触发语）：\n\n- **「审一下这个 skill」** + 路径 → 自动快扫出三档裁定\n- **「装之前帮我查查」** + 路径 → 安装前安全快扫\n- **「这个 skill 安全吗」** + 路径 → 安全快扫判定\n- **「安全审计」** + 技能路径 → `帮我安全审计 D:\\skill\\my-skill`\n\n直接告诉 WorkBuddy，触发词覆盖面广：\n\n- **「安全审计」+ 技能路径** → `帮我安全审计 D:\\skill\\my-skill`\n- **「扫描」+ Skill** → `扫描这个 skill 有没有安全问题`\n- **「发布前检查」+ 技能名** → `发布前帮我检查一遍 my-skill`\n- **「安全检测」+ 路径** → `帮我对这个路径做一份安全检测`\n- **「代码审计」+ 文件夹** → `对 D:\\skill\\project 做代码审计`\n- **「Skill 安全吗」** → `这个 skill 安全吗`\n\n## 输出说明\n\n### 评分等级\n\n评分从 100 分开始扣分，不同等级对应不同发布建议：\n\n| 等级 | 分数区间 | 发布建议 | 含义 |\n|------|---------|---------|------|\n| 🟢 A | 90-100 | ✅ 可安全发布 | 优秀 |\n| 🟣 B | 75-89 | ⚠️ 建议修复后发布 | 良好 |\n| 🟡 C | 60-74 | ⚠️ 需要修复 | 一般 |\n| 🟠 D | 40-59 | ❌ 不建议发布 | 较差 |\n| 🔴 F | 0-39 | ❌ 禁止发布 | 危险 |\n\n### 严重度分类\n\n- 🔴 **严重**（-25 分/个）：提示注入、命令注入、凭证外泄 → 必须立即修复\n- 🟠 **高危**（-15 分/个）：SSRF、路径遍历、危险权限组合 → 建议尽快修复\n- 🟡 **中等**（-8 分/个）：危险函数、权限过度授权、description 过短 → 建议修复\n- 🔵 **低危**（-3 分/个）：命名规范问题、缺少错误处理说明 → 建议优化\n- ⚪ **信息**（0 分）：更新版本提示、参考信息 → 仅供参考\n\n### 返回码（for CI/CD 集成）\n\n| 退出码 | 含义 | CI 行为建议 |\n|--------|------|------------|\n| 0 | 无问题或仅低危 | ✅ 通过 |\n| 1 | 存在中等问题 | ⚠️ 警告 |\n| 2 | 存在严重/高危问题 | ❌ 失败，阻断发布 |\n\n## 扫描排除规则\n\n以下内容将被自动跳过，不参与扫描，不计入风险：\n\n### 自动排除的文件类型\n\n1. **可执行/脚本**：`.bat`、`.cmd`、`.ps1`、`.vbs`、`.exe`、`.dll`、`.msi`、`.sh`、`.com`、`.scr`、`.hta`、`.reg`\n2. **Office 文档**：`.docx`、`.xlsx`、`.pptx`、`.doc`、`.xls`、`.ppt`、`.xlsm`、`.docm`、`.pptm`\n3. **压缩包/镜像**：`.iso`、`.dmg`、`.zip`、`.rar`、`.7z`、`.tar`、`.gz`、`.apk`、`.jar`\n4. **缓存/隐藏**：`.DS_Store`、`.pyc`、`.pyo`、`.so`、`.swp`、`.env`、`.log`、`.tmp`\n\n### 自动排除的目录\n\n`__pycache__`、`.git`、`.venv`、`.pytest_cache`、`node_modules`、`.idea`、`.vscode`\n\n## 扫描示例\n\n```\n============================================================\n  Skill Security Audit Report\n============================================================\n  Skill: my-cool-skill\n  Path: D:\\skill\\my-cool-skill\n  Time: 2026-07-13T14:32:10\n  Files: 15 scanned, 2 skipped\n============================================================\n\n  Score: 82/100 (Grade: B)\n  Found 2 medium issues.\n\n  ──────────────────────────────────────────────────────────\n  [MED]   quality_check     SKILL.md         Missing version field\n  [MED]   quality_check     SKILL.md         No error handling mentioned\n  ──────────────────────────────────────────────────────────\n\n  Fix suggestions:\n    [quality_check] Add version field in frontmatter\n    [quality_check] Add error handling docs in SKILL.md\n\n  Feedback: njskills@agent.qq.com\n============================================================\n```\n\n## 常见问答（FAQ）\n\n**Q: 扫描会很慢吗？需要联网吗？**\nA: 扫描本身不会慢。工具会自动检测你的 CPU 核心数和可用内存，动态调整并行数（1-8 线程），在本地离线完成扫描，不联网也不会影响结果。可选的更新检查（24 小时缓存）可以通过 `--skip-update` 关闭。\n\n**Q: 扫描结果为 F 等级怎么办？**\nA: 请按照输出的修复建议逐一修复问题，特别是严重和高危问题。修复后可重新扫描确认分数是否提升。常见修复步骤：\n1. 移除所有硬编码的敏感信息（API Key、Password 等）→ 添加到 `.env` 或环境变量\n2. 避免使用 `eval()`/`exec()`/`os.system()` → 使用 `subprocess.run()` 并关闭 `shell=True`\n3. 确保所有依赖升级到安全版本（见报告中建议的版本号）\n4. 清理硬编码的内网 IP，改用域名或环境变量\n\n**Q: 报告说发现了命令注入，但我只是在说明文档中写了代码示例？**\nA: 代码示例中如果包含了 curl、wget、shell 等相关关键词，会被模式匹配命中。这是预期行为——**请在代码示例末尾添加 `# nosec` 注释**即可跳过该行。\n\n**Q: 这个工具支持扫描 Python 以外的文件吗？**\nA: 支持。除了 `.py` 文件，还可以扫描 `.js`、`.ts`、`.json`、`.yaml`、`.md`、`.html` 等所有文本格式文件。Office 文档和可执行文件会被自动跳过。\n\n**Q: 检测出误报怎么办？**\nA: 主要有两种方式：\n1. **临时方案**：在代码行末尾添加 `# nosec` 注释\n2. **永久方案**：联系 njskills@agent.qq.com 提供误报规则详情（文件路径和匹配模式），我们会优化规则\n\n**Q: 用于公司 CI/CD 流水线，需要安装什么依赖吗？**\nA: 不需要。本工具只需要 **Python 3.8+** 标准库，无第三方依赖。可集成到 GitHub Actions、GitLab CI、Jenkins 等任意 CI 平台。（注：动态扫描 `--dynamic` 需额外具备 Docker 或 Windows Sandbox 环境。）\n\n**Q: 我没有 Docker，能用动态扫描吗？**\nA: 可以直接加 `--dynamic`，工具会自动探测环境。若无 Docker / Windows Sandbox，会自动降级为纯静态扫描并提示「建议在沙箱环境中进行动态扫描」，不会报错。想获得完整行为捕获，推荐安装 Docker Desktop。\n\n**Q: 动态扫描会不会有风险？会不会拖慢我电脑？**\nA: 动态扫描在隔离环境中运行：Docker 用 `--network=none` 断网 + 只读挂载 + CPU/内存/PID 限额；Windows Sandbox 断网 + 只读映射。默认单次超时 30 秒，CPU 上限自动取核心数的一半，不会拖慢日常使用。被扫描代码无法接触你的真实文件系统和网络。\n\n**Q: 恶意 Skill 指纹库能覆盖未知的新型恶意 Skill 吗？**\nA: 指纹库覆盖 341 条已知恶意 Skill，对于已知的恶意包（如 PyPI 恶意依赖、npm 钓鱼包）能实现 100% 拦截。但攻击者如果修改代码、混淆变量名，SHA256 指纹会变化，此时需要结合静态扫描的规则（提示注入、命令注入等）来发现。建议同时开启 `--malicious-db` 和静态扫描，双重保障。\n\n**Q: CVE 离线缓存能维持多久？无网环境能用吗？**\nA: 7 天全量缓存 + 每日增量更新。无网络环境下，工具自动使用本地缓存，CVE 漏洞扫描功能仍可正常使用（使用最近一次缓存数据）。API 恢复后，新查询到的 CVE 结果会自动写回缓存。缓存文件存放在 `~/.workbuddy/cve_cache/`。\n\n**Q: `.nosec.yml` 和 `# nosec` 注释有什么区别？哪个优先？**\nA: `# nosec` 是单行临时排除，`.nosec.yml` 是团队级全局配置，支持按类别、文件路径、正则模式批量排除。**过滤顺序**：`# nosec` 行级排除先应用，然后是 `.nosec.yml` 全局排除。建议团队统一使用 `.nosec.yml`，个人调试用 `# nosec`。\n\n**Q: 规则引擎和原来的静态扫描有什么区别？**\nA: 规则引擎将 6 类规则从代码硬编码重构为 YAML 文件（`rules/*.yaml`），新增规则只需添加 YAML 文件，无需修改 `--rule-engine` 开启。未开启时自动回退到原有硬编码规则，完全兼容。\n\n**Q: ML 提示注入检测需要联网吗？需要安装额外依赖吗？**\nA: 不需要联网，不需要额外依赖。ML 检测使用 ONNX Runtime（纯 CPU 推理），模型存放在 `~/.workbuddy/models/prompt_injection.onnx`。无模型时自动降级到正则规则包（含 20 条规则，含中文），零外部依赖。\n\n**Q: eBPF/ETW 系统级捕获需要什么权限？**\nA: Linux 需要 root 权限 + bcc 框架；Windows 需要管理员权限。无权限时自动降级，提示「系统级行为捕获不可用」，不影响其他扫描功能。\n\n**Q: 污点追踪和原来的静态扫描有什么区别？**\nA: 污点追踪在模式匹配基础上增加了数据流分析——不只看代码中是否存在危险函数，还追踪用户输入/环境变量/网络响应（source）是否流经赋值/拼接/属性访问等路径最终到达危险函数（sink）。有完整 source→sink 传播链的报高危（`taint_chain`），仅有 sink 调用但无明确 source 的降为 info 级（`taint_sink_only`），从而降低误报。\n\n**Q: 社区规则和官方规则包有什么区别？**\nA: 官方规则包（`scripts/rules/*.yaml`）内置在 Skill 目录中，由开发者维护。社区规则通过 `--community-rules <目录>` 从外部加载，每个 YAML 文件经过 schema 校验（必填字段、类型检查、正则合法性），加载后记录来源（`_source`），报告中 `community_` 前缀与官方规则分开统计。责任边界清晰。\n\n**Q: 健康度与合规检查合并后，旧版报告还能看吗？**\nA: 完全兼容。旧版的「质量评分」「结构检查」「权限审计」三个模块在 v3.3.0 中合并为「合规性检查」一个出口，输出类别从 `quality_check`/`structure_check`/`permission_audit` 统一为 `health_quality`/`health_structure`/`compliance_permission`，报告结构更清晰，不再重复。\n\n**Q: v3.4.0 的 OSV 离线数据包需要联网和 API Key 吗？**\nA: 不需要 API Key。索引由 OSV 公开导出包（PyPI / npm）周期下载构建，纯 HTTPS、**零密钥**。索引超过 7 天或加 `--refresh-osv` 时联网重建，其余扫描全部走本地索引，无网络也能用（使用最近快照，并在报告中用 `data_point` 标注数据时点）。\n\n**Q: 锁文件解析有什么用？没有 lock 文件会怎样？**\nA: 有 `package-lock.json` / `poetry.lock` 时，工具展开完整传递依赖树并按「版本区间」精确判定某版本是否落在漏洞影响区间，误报显著降低。仅有 `requirements.txt` / `package.json`（无 lock）时退化为直接依赖 + 近似匹配，并在结果中标注 `approx`，提示你补充 lock 文件以获得精确结论。\n\n**Q: 一键快扫（--quick）和全量（--mode full）有什么区别？**\nA: 快扫只跑 L1 静态层三件套（恶意指纹 + 6 类规则 + 权限审计），跳过沙箱/OSV/污点/ML 等重能力，30 秒内出「✅干净/⚠️可疑/🚫恶意」三档裁定 + Top3 风险 + 一句话理由（≤1 屏），适合装之前看一眼。全量保留全部细节（JSON/HTML/SARIF）给安全工程师和 CI。默认档位 quick，可用 `--mode full` 或环境变量 `SKILLSEC_MODE=full` 切换。\n\n**Q: 三档裁定准吗？341 条恶意指纹会漏报吗？**\nA: 快扫强制启用恶意指纹匹配（341 条 hash + 模式），命中即直接判 🚫恶意，召回 100%。裁定映射表在 `scripts/quick_verdict.json` 外置，critical / 恶意指纹 → 🚫，high/medium → ⚠️，其余 → ✅，可自定义不硬编码。\n\n**Q: 哪些口语能触发快扫？**\nA: 对齐钟馗的中文触发语：「审一下这个 skill」「装之前帮我查查」「这个 skill 安全吗」+ 路径即可自动快扫。意图路由命中这些口语即走 quick 档。\n\n## 安全声明\n\n- **默认只做静态分析，不会执行被扫描的代码**（静态模式仅读取文件，不写入）\n- **动态扫描（`--dynamic`）需显式开启**，且仅在隔离环境（Docker / Windows Sandbox）中执行被扫描代码，沙箱**默认断网**、只读挂载、CPU/内存限额，绝不在宿主机直接运行\n- **不会上传任何文件内容到外部服务器**\n- **更新检查仅获取 GitHub Release 标题，不下载任何附件**\n- **所有扫描在本地完成，保护你的代码隐私**\n- Windows Sandbox 的 `.wsb` 配置在运行时动态生成到临时目录，用完即删，不写入 Skill 仓库\n- `.nosec.yml` 全局排除配置仅影响本团队扫描流程，不会降低安全性；被排除的行仍可在完整报告中查看（`--format json` 包含 `excluded` 字段）\n\n## 反馈与支持\n\n如有误报反馈、规则改进建议或功能需求，欢迎联系：\n\n📧 **njskills@agent.qq.com**\n\n你的反馈将直接帮助我们升级规则库，完善检测能力。\n\n## 更新日志\n\n| v3.5.5 | 2026-10-09 | 修复：移除静态检测模式列表的 base64 编码存储，全部还原为明文常量，消除平台安全扫描「代码混淆」误报；删除：base64 解码函数与相关注释 |\n| v3.5.0 | 2026-10-09 | 增加：一键快扫 --quick / --mode quick 模式，只跑 L1 静态层三件套（恶意指纹 341 条 + 6 类规则 + 权限审计），30 秒内出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；增加：scripts/quick_verdict.json 外置裁定映射表（分数→档位可自定义，不硬编码）；增加：报告分级输出（quick 档 ≤1 屏、full 档保留 JSON/HTML/SARIF 全量细节），默认档位可配（环境变量 SKILLSEC_MODE=quick\\|full）；优化：description 增补口语触发词（审一下这个 skill / 装之前帮我查查 / 这个 skill 安全吗）对齐钟馗意图路由，快速开始压缩到 3 行；优化：一键快扫强制启用恶意指纹匹配保障 341 条样本 🚫档召回 100% |\n| v3.4.0 | 2026-09-11 | 增加：OSV.dev 离线数据包接入（scripts/osv_offline.py），周期下载 PyPI/npm 导出包并合并进三级缓存，依赖覆盖从 26 包升到全生态，零密钥、离线优先、无网络时标注数据时点；增加：锁文件深度解析（package-lock.json 与 poetry.lock 两类新增解析器 + requirements.txt 升级），传递依赖全树展开，匹配从包名级升级到版本区间级，无 lock 时近似匹配并标注 approx；增加：--refresh-osv 命令行参数（强制刷新 OSV 索引）；优化：supply_chain.py 漏洞查询改为离线优先（OSV 索引 → OSV API → NVD → 本地 26 条三级降级），report meta 区新增 osv_offline 索引时点统计 |\n| v3.3.0 | 2026-08-24 | 增加：轻量 SAST 污点追踪（taint_tracker.py），Python AST + JS 词法近似，source→sink 证据链降误报（无完整链降 info）；增加：社区规则扩展（community_rules.py），第三方 YAML 规则包 schema 校验 + 来源记录 + HMAC-SHA256 签名验证，官方/社区规则报告分开统计；增加：健康度与合规检查合并（scan_health + scan_compliance），质量评分+结构检查统一为健康度模块，权限审计+健康度统一挂合规性检查出口；增加：--taint-tracking 和 --community-rules <path> 两个 CLI 参数；优化：report meta 区新增 taint_tracking / community_rules 维度统计 |\n| v3.2.0 | 2026-08-17 | 增加：规则引擎模块（scripts/rules_engine.py），将 6 类静态规则从硬编码重构为 YAML 规则包（rules/*.yaml），支持热插拔扩展，新增规则只需加 YAML 文件不改代码；增加：scripts/rules/ 目录包含 6 个规则包（prompt_injection/command_injection/ssrf/credential_leak/path_traversal/dangerous_functions），共 67 条正则；增加：系统级行为捕获模块（scripts/sandbox/system_monitor.py），支持 eBPF（Linux）/ ETW（Windows）内核级 syscall 监控，无 eBPF/ETW 时自动降级；增加：ML 提示注入语义检测（scripts/sandbox/ml_detect.py），ONNX 模型优先 + 正则降级双模式，含中文规则与结果缓存；增加：scan_rule_engine()、scan_ml_prompt_injection()、scan_syscall_monitor() 三个扫描方法；增加：--rule-engine、--ml-detect、--syscall-monitor 三个 CLI 参数；增加：report meta 区新增 rule_engine / ml_detect / syscall_monitor 维度统计 |\n| v3.1.0 | 2026-08-07 | 增加：实时恶意 Skill 库同步模块，内置 341 条 SHA256 指纹实现 100% 已知恶意 skill 拦截；增加：CVE 离线缓存（7 天全量 + 每日增量），无网络环境仍可扫描依赖漏洞；增加：全局排除配置（.nosec.yml），支持按类别/文件/正则模式批量排除误报；增加：--malicious-db 和 --global-exclude 两个命令行参数；优化：add_result() 集成全局排除过滤逻辑 |\n| v3.0.0 | 2026-08-01 | 增加：供应链风险分析模块，支持依赖树扫描、typo-squatting 钓鱼包检测、维护状态评估（僵尸包识别）、许可证合规检查；增加：CVE 数据库从 26 条手动维护升级为 OSV/NVD API 自动拉取并每日缓存更新；增加：ci_templates/ 目录提供 GitHub Action 与 GitLab CI 开箱即用模板；增加：SARIF 2.1.0 格式输出支持 GitHub Code Scanning；增加：PR 自动评论扫描结果功能；增加：质量门禁机制（默认 70 分阈值阻止合并）；增加：--supply-chain 与 --format sarif 命令行参数；优化：audit.py 报告 meta 区新增 supply_chain 维度统计；优化：依赖解析器支持 requirements.txt / package.json / pyproject.toml 三种格式 |\n| v2.0.0 | 2026-07-22 | 增加：动态沙箱执行扫描模块，在 Docker 或 Windows Sandbox 隔离环境中实际运行脚本捕获运行时行为；增加：网络请求、文件读写、进程创建、环境变量读取、动态代码执行五类运行时行为捕获；增加：敏感路径访问、未知目标外联、下载并执行远程载荷、shell 进程创建、密钥环境变量读取五类异常行为标记；增加：沙箱默认断网与 --allow-domain 域名白名单机制；增加：--dynamic、--allow-domain、--sandbox-timeout 三个命令行参数；增加：无 Docker/Windows Sandbox 时自动降级为纯静态扫描并给出提示；优化：报告 meta 区展示动态扫描后端与行为统计 |\n| v1.3.0 | 2026-07-13 | 修复：base64 编码的命令注入模式中有两个模式解码后正则表达式括号不匹配导致扫描报错；修复：CVE 列表中 protobuf 的 CVE 编号错误；增加：24 小时缓存的更新检查机制避免频繁联网请求；增加：# nosec 内联注释排除规则降低误报；优化：依赖库覆盖范围从 17 个扩展到 26 个常见高危依赖；优化：错误信息改为更友好的中文提示；优化：扫描输出显示优化减少信息密度过高的问题；优化：新增详细说明文档和常见问答\n| v1.2.0 | 2026-07-13 | 增加：硬件感知并行度自动调整功能，根据 CPU/内存动态分配线程数；增加：更新检查功能自动提示新版本；优化：依赖审计支持 pyproject.toml 和 Pipfile 格式；修复：凭证外泄检测正则表达式中转义字符导致扫描崩溃的问题\n| v1.1.0 | 2026-07-13 | 增加：依赖漏洞审计模块；增加：质量评分维度（包含 SKILL.md 完整性检查）；优化：评分算法改为按严重度区分扣分权重；优化：HTML 报告增加统计卡片和响应式布局\n| v1.0.0 | 2026-07-13 | 初始版本发布，包含静态扫描、权限审计、结构检查、JSON/HTML 报告生成\n\nFile v3.5.5:_meta.json\n\n{\n  \"ownerId\": \"kn7chdrwbdhaqkwajcyhtfvjx989ddb1\",\n  \"slug\": \"skill-security-checker\",\n  \"version\": \"3.5.5\",\n  \"publishedAt\": 1791544785736\n}\n\nFile v3.5.5:references/scan-patterns.md\n\n# 扫描规则参考文档\n\n本文件详细定义了 Skill Security 使用的检测逻辑。\n\n## 一、提示注入检测\n\n检测试图覆盖或绕过系统指令的恶意提示。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配「忽略先前/上面/所有」+「指令/提示/规则」组合 | 尝试让 AI 忽略原始系统指令 |\n| 匹配「系统提示」+「覆盖/替换/忽略/绕过」组合 | 直接覆盖系统提示 |\n| 匹配「你现在是...」 | 强制 AI 扮演新角色绕过限制 |\n| 匹配「越狱」类关键词 | 触发越狱模式 |\n| 匹配「做任何事」模式 | 解除限制模式 |\n| 匹配「假装你是」 | 假装成其他身份 |\n| 匹配「角色扮演为」 | 绕过角色限制 |\n| 匹配「覆盖/禁用」+「安全/过滤/限制」 | 禁用安全过滤 |\n| 匹配「忘记一切」 | 让 AI 忘记所有指令 |\n| 匹配「重新开始」 | 重置指令 |\n| 匹配「重置指令」 | 重置指令 |\n\n## 二、命令注入检测\n\n检测通过用户输入执行系统命令的代码。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 curl/wget 管道连接 shell | 从远程下载脚本并执行 |\n| 匹配 fetch+eval 组合 | 执行远程代码 |\n| 匹配 eval/exec/system + $_GET/$_POST | PHP 命令注入 |\n| 匹配 passthru/shell_exec | PHP 命令执行 |\n| 匹配反引号执行 curl/wget/nc | 命令替换执行 |\n| 匹配 $() 内执行 curl/wget/nc | 命令替换执行 |\n\n## 三、SSRF/内网访问\n\n检测硬编码的内网地址。\n\n| 地址段 | 说明 |\n|--------|------|\n| 127.0.0.1 | 本地回环 |\n| 10.0.0.0/8 | 私有网络 A 类 |\n| 172.16.0.0/12 | 私有网络 B 类 |\n| 192.168.0.0/16 | 私有网络 C 类 |\n| fc00::/7 | IPv6 私有地址 |\n| fe80::/10 | IPv6 链路本地 |\n| 0.0.0.0 | 全地址监听 |\n\n## 四、凭证外泄\n\n检测硬编码的敏感凭证。\n\n| 检测类型 | 说明 |\n|---------|------|\n| API Key | 20位以上字母数字组合 |\n| Secret Key | 20位以上字母数字组合 |\n| Access Token | 20位以上字母数字组合 |\n| Private Key | 40位以上 base64 字符 |\n| Password | 8位以上明文密码 |\n| Bearer Token | Authorization 头 |\n| AWS Access Key | AKID 开头 |\n| GitHub Token | ghp_/gho_ 开头 |\n| OpenAI Key | sk- 开头 |\n| 阿里云 AccessKey | AKID 开头 |\n\n## 五、路径遍历\n\n检测 ../ 等模式访问预期外的文件系统路径。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 ../ 或 ..\\ | 目录穿越 |\n| 匹配 URL 编码 %2f%2e%2e | 编码绕过 |\n| 匹配 /etc/passwd 或 /etc/shadow | 系统文件访问 |\n| 匹配 c:\\windows\\ | Windows 系统目录 |\n\n## 六、危险函数\n\n| 函数 | 风险 |\n|------|------|\n| eval() | 执行任意代码 |\n| exec() | 执行任意代码 |\n| os.system() | 执行系统命令 |\n| subprocess(shell=True) | 命令注入 |\n| pickle.load() | 反序列化漏洞 |\n| yaml.load() (无 Loader) | 反序列化漏洞 |\n| marshal.load() | 执行字节码 |\n\n## 七、已知漏洞依赖\n\n当检测到以下依赖版本低于安全版本时发出告警：\n\n| 依赖包 | 安全版本 | 主要 CVE |\n|--------|----------|----------|\n| requests | ≥2.32.0 | CVE-2024-35195 |\n| urllib3 | ≥2.2.0 | CVE-2024-37891 |\n| flask | ≥3.0.0 | CVE-2023-30861 |\n| django | ≥4.2.0 | 多个高危 |\n| numpy | ≥1.22.0 | 缓冲区溢出 |\n| pillow | ≥10.0.0 | 多个 CVE |\n| pyyaml | ≥6.0 | CVE-2020-14343 |\n| jinja2 | ≥3.1.0 | CVE-2024-22416 |\n| cryptography | ≥42.0.0 | 安全修复 |\n| aiohttp | ≥3.9.0 | CVE-2024-23334 |\n| tqdm | ≥4.66.0 | CVE-2024-34062 |\n| setuptools | ≥65.5.0 | CVE-2022-40897 |\n| node-fetch | ≥2.6.7 | CVE-2022-0235 |\n| minimist | ≥1.2.6 | CVE-2021-44906 |\n| lodash | ≥4.17.21 | CVE-2021-23337 |\n| axios | ≥0.21.1 | CVE-2021-3749 |\n| express | ≥4.17.3 | 多个修复 |\n\n## 八、误报处理\n\n某些合法代码可能触发告警，属于正常误报场景：\n\n1. 文档/示例中包含攻击模式说明（应确保在注释或字符串中）\n2. 测试代码包含恶意 payload 样例\n3. 安全工具本身的检测规则\n4. 故意作为反例演示的代码\n\n对于确认的误报，可在代码行尾添加 `# nosec` 注释跳过检测。\n\n## 九、评分算法\n\n评分从 100 分开始扣分：\n\n| 严重度 | 扣分 |\n|--------|------|\n| 🔴 严重 | -25分/个 |\n| 🟠 高危 | -15分/个 |\n| 🟡 中等 | -8分/个 |\n| 🔵 低危 | -3分/个 |\n| ⚪ 信息 | 0分 |\n\n最低分数为 0。\n\n等级划分：\n\n| 分数 | 等级 | 发布建议 |\n|------|------|----------|\n| 90-100 | A | ✅ 可发布 |\n| 75-89 | B | ⚠️ 建议修复后发布 |\n| 60-74 | C | ⚠️ 需要修复 |\n| 40-59 | D | ❌ 不建议发布 |\n| 0-39 | F | ❌ 禁止发布 |\n\nFile v3.5.5:scripts/ci_templates/gitlab-ci.yml\n\nstages:\n  - security\n\nskill-security-scan:\n  stage: security\n  image: python:3.11-slim\n  script:\n    - python scripts/audit.py . --format json -o report.json --skip-update\n    - |\n      SCORE=$(python -c \"import json; print(json.load(open('report.json'))['score'])\")\n      echo \"Quality Score: $SCORE\"\n      if [ \"$SCORE\" -lt 70 ]; then\n        echo \"Score below threshold (70), failing.\"\n        exit 1\n      fi\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n    when: always\n  only:\n    - merge_requests\n    - main\n\nFile v3.5.5:scripts/ci_templates/skill-scan.yml\n\nname: Skill Security Scan\n\non:\n  push:\n    branches: [main, master]\n  pull_request:\n    branches: [main, master]\n\njobs:\n  security-scan:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      security-events: write\n      pull-requests: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.11'\n      - name: Run skill-security-checker\n        run: |\n          python scripts/audit.py . \\\n            --format sarif \\\n            -o sarif-output.sarif \\\n            --skip-update\n        continue-on-error: true\n      - name: Upload SARIF to GitHub Code Scanning\n        uses: github/codeql-action/upload-sarif@v3\n        if: always()\n        with:\n          sarif_file: sarif-output.sarif\n      - name: Gate on quality score\n        run: |\n          SCORE=$(python scripts/audit.py . --format json --skip-update \\\n                  | python -c \"import sys,json; print(json.load(sys.stdin)['score'])\")\n          echo \"Quality Score: $SCORE\"\n          if [ \"$SCORE\" -lt 70 ]; then\n            echo \"Score below threshold (70), failing.\"\n            exit 1\n          fi\n      - name: Comment PR with scan results\n        if: github.event_name == 'pull_request'\n        uses: actions/github-script@v7\n        with:\n          script: |\n            const fs = require('fs');\n            const report = JSON.parse(\n              fs.readFileSync('sarif-output.sarif', 'utf8')\n            );\n            const stats = report.runs[0]?.results?.length ?? 0;\n            const body = [\n              '## 🔒 Skill Security Scan',\n              '',\n              `Found **${stats}** issue(s).`,\n              '',\n              'Full details in the **Security → Code Scanning** tab.',\n            ].join('\\n');\n            github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: context.issue.number,\n              body: body,\n            });\n\nFile v3.5.5:scripts/quick_verdict.json\n\n{\n  \"default_mode\": \"quick\",\n  \"verdict_order\": [\"malicious\", \"suspicious\", \"clean\"],\n  \"severity_to_verdict\": {\n    \"critical\": \"malicious\",\n    \"high\": \"suspicious\",\n    \"medium\": \"suspicious\",\n    \"low\": \"clean\",\n    \"info\": \"clean\"\n  },\n  \"categories_force_malicious\": [\"malicious_skill\", \"malicious_db_skipped\"],\n  \"verdicts\": {\n    \"malicious\": {\n      \"label\": \"🚫 恶意\",\n      \"exit_code\": 2,\n      \"reason_template\": \"检测到 {count} 条恶意指纹/严重漏洞，强烈建议不要安装\"\n    },\n    \"suspicious\": {\n      \"label\": \"⚠️ 可疑\",\n      \"exit_code\": 1,\n      \"reason_template\": \"检测到 {count} 条高危或中危风险，建议审查后再安装\"\n    },\n    \"clean\": {\n      \"label\": \"✅ 干净\",\n      \"exit_code\": 0,\n      \"reason_template\": \"未发现明显安全风险，可放心安装\"\n    }\n  }\n}\n\nFile v3.5.5:scripts/rules/command_injection.yaml\n\nname: command_injection\ndisplay_name: 命令注入\nseverity: critical\ndescription: 检测 curl/wget 管道执行、反引号执行、$() shell 执行等风险\n\npatterns:\n  - 'exfiltrate\\('\n  - 'curl.*(sh|bash|cmd|powershell)'\n  - 'wget.*(sh|bash)'\n  - 'fetchhttp.*ival'\n  - 'passthru'\n  - 'shell_exec'\n  - '`.*(curl|wget|nc|bash|sh)`'\n  - '\\$\\(\\s*(curl|wget|nc|bash|sh)\\s*\\)'\n\nsuggestion: 避免运行时命令拼接，使用参数化调用（如 requests 库替代 curl）\nsource: static\n\nFile v3.5.5:scripts/rules/credential_leak.yaml\n\nname: credential_leak\ndisplay_name: 凭证外泄\nseverity: critical\ndescription: 检测硬编码 API Key、Token、Password、Bearer Token 等敏感信息泄露\n\npatterns:\n  - '(?i)(api[_-]?key|apikey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(secret[_-]?key|secretkey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(access[_-]?token|accesstoken)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(private[_-]?key|privatekey)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{40,}[\"\\']?'\n  - '(?i)(password|passwd|pwd)\\s*[:=]\\s*[\"\\'][^\"\\']{8,}[\"\\']'\n  - '(?i)bearer\\s+[a-z0-9\\-._~+/]+=*'\n  - '(?i)aws[_-]?(access[_-]?key[_-]?id|secret[_-]?access[_-]?key)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{20,}[\"\\']?'\n  - '(?i)gh[pousr]_[a-z0-9]{36,}'\n  - '(?i)sk-[a-z0-9]{48}'\n  - '(?i)AKID[a-z0-9]{32}'\n\nsuggestion: 立即轮换凭证！使用环境变量或密钥管理器存储敏感信息\nsource: static\n\nFile v3.5.5:scripts/rules/dangerous_functions.yaml\n\nname: dangerous_functions\ndisplay_name: 危险函数\nseverity: medium\ndescription: 检测 eval/exec/os.system/pickle.load 等危险函数调用\n\npatterns:\n  - '(?i)eval\\s*\\('\n  - '(?i)exec\\s*\\('\n  - '(?i)os\\.system\\s*\\('\n  - '(?i)subprocess\\.call\\s*\\(\\s*shell\\s*=\\s*True'\n  - '(?i)popen\\s*\\('\n  - '(?i)__import__\\s*\\('\n  - '(?i)compile\\s*\\('\n  - '(?i)input\\s*\\('\n  - '(?i)pickle\\.loads?\\s*\\('\n  - '(?i)yaml\\.load\\s*\\([^)]*\\)(?!.*Loader)'\n  - '(?i)marshal\\.loads?\\s*\\('\n\nsuggestion: 避免使用 eval/exec，改用 ast.literal_eval 或 json.loads；subprocess 关闭 shell=True\nsource: static\n\nFile v3.5.5:scripts/rules/path_traversal.yaml\n\nname: path_traversal\ndisplay_name: 路径遍历\nseverity: high\ndescription: 检测路径遍历攻击、敏感文件访问等风险\n\npatterns:\n  - '\\.\\./'\n  - '\\.\\.\\'' \n  - '\\.\\.\\%2[fF]'\n  - '\\.\\.%5[cC]'\n  - '%2[eE]%2[eE]%2[fF]'\n  - '%2[eE]%2[eE]/'\n  - '\\.\\./etc/passwd'\n  - '\\.\\./windows/system32'\n  - '/etc/passwd'\n  - '/etc/shadow'\n  - 'c:\\\\windows\\\\'\n  - 'c:/windows/'\n\nsuggestion: 避免直接拼接路径，使用 Pathlib 安全拼接；访问前验证路径是否在预期目录内\nsource: static\n\nFile v3.5.5:scripts/rules/prompt_injection.yaml\n\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\n\npatterns:\n  - 'ignore previous instructions'\n  - 'ignore above all'\n  - 'system prompt override'\n  - 'ignore all previous'\n  - 'you are now a'\n  - 'jailbreak'\n  - 'DAN mode'\n  - 'do anything now'\n  - 'pretend to be'\n  - 'override safety'\n  - 'disable safety'\n  - 'forget everything'\n  - 'roleplay as an'\n  - 'start over'\n  - 'reset instructions'\n\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n\nFile v3.5.5:scripts/rules/ssrf.yaml\n\nname: ssrf\ndisplay_name: SSRF/内网访问\nseverity: high\ndescription: 检测内网 IP 地址、localhost 访问等 SSRF 风险\n\npatterns:\n  - '127\\.0\\.0\\.1'\n  - 'localhost'\n  - '0\\.0\\.0\\.0'\n  - '10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}'\n  - '172\\.(1[6-9]|2\\d|3[01])\\.\\d{1,3}\\.\\d{1,3}'\n  - '192\\.168\\.\\d{1,3}\\.\\d{1,3}'\n  - '169\\.254\\.\\d{1,3}\\.\\d{1,3}'\n  - 'fc00:'\n  - 'fe80:'\n  - '\\[::1\\]'\n  - '\\[::ffff:127\\.0\\.0\\.1\\]'\n\nsuggestion: 避免硬编码内网 IP，改用域名或环境变量\nsource: static\n\nArchive v3.5.0: 33 files, 91883 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (84156b), scripts/ci_templates/gitlab-ci.yml (528b), scripts/ci_templates/skill-scan.yml (2013b), scripts/community_rules.py (8337b), scripts/global_exclude.py (4170b), scripts/malicious_db.py (11521b), scripts/osv_offline.py (13778b), scripts/quick_verdict.json (842b), scripts/rules_engine.py (4142b), scripts/rules/__init__.py (0b), scripts/rules/command_injection.yaml (489b), scripts/rules/credential_leak.yaml (860b), scripts/rules/dangerous_functions.yaml (592b), scripts/rules/path_traversal.yaml (503b), scripts/rules/prompt_injection.yaml (609b), scripts/rules/ssrf.yaml (492b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/ml_detect.py (7043b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), scripts/sandbox/system_monitor.py (9281b), scripts/supply_chain.py (35753b), scripts/taint_tracker.py (14518b), skill-card.md (1675b), SKILL.md (40204b)\n\nFile v3.5.0:SKILL.md\n\n---\nname: skill-security-checker\ndescription: 'Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.json / poetry.lock，版本区间级精确匹配）、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。'\nversion: 3.5.0\n---\n\n\n# Skill Security\n\n> 一键扫描 Skill 安全风险，发布前最后一道安全闸门。\n\n## 快速开始（3 行）\n\n```bash\n# 1. 快扫：30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 + 一句话理由\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --quick\n# 2. 全量：CI/CD 用 JSON/SARIF，安全工程师看 HTML\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode full --format sarif -o report.sarif.json\n# 3. 口语触发：直接对 WorkBuddy 说「审一下这个 skill」+ 路径，自动快扫\n```\n\n## 概述\n\n本工具用于对 **WorkBuddy / ClawHub / SkillHub** 平台上发布的安全技能进行全方位安全合规扫描。它能帮你快速找出代码中的安全漏洞、不安全的依赖项、过度授权的权限配置，并以直观的评分等级和修复建议输出结果。\n\n**适用场景：**\n\n- 发布 Skill 前的安全检查\n- 评估第三方 Skill 的安全性\n- CI/CD 流水线中的自动化审查\n- Skill 质量评估与改进\n\n## 核心功能\n\n### 1. 静态扫描\n\n检测 Skill 文件中的安全漏洞：\n\n| 风险类型 | 检测内容 | 严重度 |\n|---------|---------|--------|\n| 提示注入 | 越狱指令、\"忽略原始指令\"、\"覆盖系统提示\"等文本 | 🔴 严重 |\n| 命令注入 | curl/wget 管道执行、反引号替换、$() 中执行 shell | 🔴 严重 |\n| SSRF/内网访问 | `127.0.0.1`、`10.x.x.x`、`192.168.x.x` | 🟠 高危 |\n| 凭证外泄 | 硬编码 API Key、Token、Password、Bearer Token | 🔴 严重 |\n| 路径遍历 | `../`、URL 编码绕过、绝对路径访问 | 🟠 高危 |\n| 危险函数 | `eval()`、`exec()`、`os.system()`、`pickle.load()` | 🟡 中等 |\n\n### 2. 依赖漏洞审计\n\n扫描 `requirements.txt`、`package.json`、`Pipfile`、`pyproject.toml` 等依赖文件，与内置的已知 CVE 漏洞库比对。\n\n目前覆盖 **26** 个常见高危依赖的已知漏洞：\n`requests`、`urllib3`、`flask`、`django`、`numpy`、`pillow`、`pyyaml`、`jinja2`、`cryptography`、`aiohttp`、`tqdm`、`setuptools`、`node-fetch`、`minimist`、`lodash`、`axios`、`express`、`vue`、`react`、`webpack`、`moment`、`npm`、`tough-cookie`、`word-wrap`、`protobuf`、`eslint`\n\n### 3. 权限审计\n\n检查 `allowed-tools` 声明是否有过度授权：\n\n- 声明了 Bash 但 description 中无对应使用场景 → 🟡 中等告警\n- Bash + Write 同时授权 → 🟠 高危告警\n- Bash + Exec 同时授权 → 🟠 高危告警\n- Bash + Read + Write + Edit 全量授权 → 🟠 高危告警\n\n### 4. 质量评分\n\n检查 SKILL.md 文档的完整性：\n\n| 检查项 | 要求 |\n|--------|------|\n| 必要字段 | `name`、`description`、`version` |\n| 命名规范 | kebab-case（小写字母+数字+连字符） |\n| description 长度 | 20-1024 字符 |\n| 版本号格式 | 语义化版本 (e.g., `1.0.0`) |\n| 硬编码路径 | 检测 `D:\\` 等绝对路径 |\n| 错误处理 | 文档中需提及异常处理策略 |\n\n### 5. 结构检查\n\n- 文件数量 ≤ 200\n- 总大小 ≤ 10MB\n- 缺少 README.md 时提醒\n\n### 6. 硬件感知并行（新增）\n\n自动检测当前设备的 CPU 核心数和可用内存，动态调整并发工作线程数（1-8 线程），在扫描速度和系统性能之间取得平衡。\n\n**检测逻辑：**\n- CPU 核心数 ÷ 2 = 最大线程数\n- 可用内存 < 2GB 时，线程数减半\n\n### 7. 更新检查（新增）\n\n工具运行时会自动检查 GitHub 上的新版本，发现更新时会在结果中提示用户升级。\n\n- ✅ 内置 **24 小时缓存**，避免频繁请求\n- ✅ 新增 `--skip-update` 参数可完全关闭此功能\n- ✅ 所有网络请求仅获取版本号，不下载任何内容\n\n### 8. `# nosec` 内联排除规则（新增）\n\n如果你确认某行代码是安全的，但触发了误报，可在该行末尾添加 `# nosec` 注释，扫描器将自动跳过该行。\n\n```python\n# 这行会被扫描器跳过\nos.system('ls')  # nosec\n```\n\n### 9. 实时恶意 Skill 库同步（新增）\n\n维护一份已知恶意 Skill 的 SHA256 指纹库（内置 341 条），扫描时对 Skill 目录下每个文件计算 SHA256，命中指纹即报高危，实现 100% 拦截已知恶意 Skill。\n\n- 内置 341 条恶意 Skill 指纹（PyPI 恶意包、npm 恶意包、已知攻击类型）\n- 文件内容变化即产生不同指纹，无法通过重命名或修改绕过\n- 可添加自定义指纹\n\n### 10. CVE 离线缓存（新增）\n\nCVE 数据库从\"每次请求 API\"升级为三级缓存架构，支持离线扫描：\n\n- **7 天全量缓存**：完整 CVE 库缓存到 `~/.workbuddy/cve_cache/cve_full_cache.json`\n- **每日增量更新**：当天查询过的 CVE 写入 `~/.workbuddy/cve_cache/cve_increment_cache.json`\n- **离线降级**：无网络时自动使用缓存，API 恢复后将新结果写回缓存\n\n### 11. 全局排除配置（新增）\n\n团队级 `.nosec.yml` 配置文件，按**类别、文件路径、正则模式**批量排除误报，替代逐行 `# nosec`。\n\n在 Skill 根目录创建 `.nosec.yml`：\n\n```yaml\nversion: 1\nexclude:\n  categories:\n    - quality_check\n    - path_traversal\n  files:\n    - \"scripts/audit.py\"\n  patterns:\n    - \".*test.*\"\n```\n\n- `categories`：排除整个扫描类别\n- `files`：排除指定文件的扫描\n- `patterns`：正则匹配排除行内容\n\n### 12. 动态沙箱执行扫描（新增）\n\n静态扫描只能看代码，恶意代码却可以通过**动态下载、加密载荷、条件触发**绕过。动态沙箱在**隔离环境中实际运行** Skill 脚本，捕获运行时行为，检出静态扫描完全无法发现的恶意动作。\n\n**隔离后端（自动选择）：**\n\n| 后端 | 说明 | 隔离手段 |\n|------|------|---------|\n| Docker | 首选，行为捕获最完整 | `--network=none` 默认断网、只读挂载、CPU/内存/PID 限额、`--cap-drop ALL` |\n| Windows Sandbox | Win10/11 专业版可用 | 运行时生成 `.wsb` 配置（断网 + 只读映射） |\n| 降级模式 | 无隔离环境时 | 仅做静态扫描并提示「建议在沙箱环境中进行动态扫描」 |\n\n**行为捕获维度：**\n\n- 网络请求（目标 IP / 域名 / 端口）\n- 文件读写（路径 / 模式）\n- 进程创建（命令行）\n- 环境变量读取\n- 动态代码执行（exec / compile）\n\n**异常行为标记：**\n\n| 异常行为 | 严重度 |\n|---------|--------|\n| 访问敏感路径（`~/.ssh`、`/etc/passwd`、`.aws`、`id_rsa` 等） | 🔴 严重 |\n| 网络活动 + 动态执行同时出现（疑似下载并执行远程载荷） | 🔴 严重 |\n| 向未知目标外联（非白名单域名） | 🟠 高危 |\n| 创建 shell / 解释器进程（bash、sh、powershell、cmd） | 🟠 高危 |\n| 读取疑似密钥环境变量（token、secret、apikey 等） | 🟡 中等 |\n\n**网络隔离与白名单：** 沙箱默认**完全断网**；如脚本确需联网，可用 `--allow-domain` 逐个放行可信域名，其余外联一律标记为高危。\n\n> ⚠️ 动态扫描为**可选功能**，需显式加 `--dynamic` 开启。若本机无 Docker / Windows Sandbox，工具会自动降级为纯静态扫描并给出提示，不会报错。\n\n### 13. 规则引擎 + YAML 规则包（新增）\n\nv3.2.0 起，6 类静态规则从硬编码重构为 YAML 规则包（`rules/*.yaml`），新增规则只需加 YAML 文件，无需修改代码。\n\n**规则包结构：**\n\n```\nscripts/rules/\n├── prompt_injection.yaml      # 提示注入规则（15 条正则）\n├── command_injection.yaml     # 命令注入规则（8 条正则）\n├── ssrf.yaml                  # SSRF/内网访问（11 条正则）\n├── credential_leak.yaml       # 凭证外泄（10 条正则）\n├── path_traversal.yaml        # 路径遍历（12 条正则）\n└── dangerous_functions.yaml   # 危险函数（11 条正则）\n```\n\n**YAML 文件格式示例：**\n```yaml\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\npatterns:\n  - 'ignore previous instructions'\n  - 'system prompt override'\n  - 'jailbreak'\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n```\n\n**扩展方式：** 在 `rules/` 目录新增 `.yaml` 文件即可，工具自动加载。零依赖 YAML 解析（自研轻量实现，不依赖 PyYAML）。\n\n### 14. eBPF/ETW 系统级行为捕获（新增）\n\nv3.2.0 在沙箱 5 维行为捕获基础上，新增内核级系统调用监控，覆盖应用层无法看到的底层行为。\n\n| 后端 | 平台 | 要求 | 捕获内容 |\n|------|------|------|---------|\n| eBPF (bcc) | Linux | root + bcc 安装 | syscall：connect/send/recv、open/write、fork/exec、chmod/chown、uname/gethostname |\n| ETW | Windows | 管理员权限 | syscall：文件操作、进程创建、网络活动 |\n| 降级模式 | 无 eBPF/ETW | 自动提示「系统级行为捕获不可用」 |\n\n### 15. 提示注入 ML 语义检测（新增）\n\nv3.2.0 引入 ML 语义模型检测提示注入，降低正则匹配的绕过率。\n\n| 检测模式 | 触发条件 | 说明 |\n|---------|---------|------|\n| ONNX 语义模型 | `~/.workbuddy/models/prompt_injection.onnx` 存在 | 本地推理，离线可用 |\n| 正则降级 | ONNX 模型不可用时自动回退 | 20 条正则规则（含中文） |\n\n**性能：** 结果缓存（1 小时 TTL）+ 模型懒加载，不拖慢扫描。\n\n### 16. 轻量 SAST 污点追踪（新增）\n\nv3.3.0 引入受限数据流分析，将告警从字符串匹配升级为 source→sink 证据链。\n\n| 语言 | 分析方式 | 覆盖 |\n|------|---------|------|\n| Python | AST 解析（import/assign/attribute/call 节点追踪） | eval/exec/os.system/subprocess/pickle/yaml.load/open/file.write |\n| JS/TS | 词法近似（变量赋值+属性访问追踪） | eval/exec/child_process/innerHTML/document.write/db.query |\n| 其他 | 降级为模式匹配，标注「分析深度: 模式匹配」 | 通用危险函数 |\n\n**source 定义：** `input()`、`sys.argv`、`os.environ`、`requests.get()`、`req.body`、`process.argv`、`document.cookie` 等用户输入/环境变量/网络响应。\n\n**降误报机制：** 模式命中但无完整 source→sink 传播链时，降为 ⚪ info 级（`taint_sink_only`），避免误报。\n\n### 17. 社区规则扩展（新增）\n\nv3.3.0 支持加载第三方 YAML 规则包，经 schema 校验后纳入扫描。\n\n| 能力 | 说明 |\n|------|------|\n| Schema 校验 | 必填字段、类型检查、正则合法性、枚举值校验 |\n| 来源记录 | 加载时自动附加 `_source`（文件路径）和 `_loaded_at`（时间戳） |\n| 签名验证 | 可选 HMAC-SHA256 签名（`# signature: <hex>` 注释），防篡改 |\n| 报告区分 | 官方规则与社区规则在报告中分开统计（`community_` 前缀） |\n\n**加载方式：** `--community-rules <目录路径>`，目录下放 `.yaml` 文件即可。\n\n### 18. 健康度与合规检查合并（新增）\n\nv3.3.0 将质量评分（SKILL.md 完整性 8 项）与结构检查（文件数/大小/README）合并为「健康度」模块统一评分，权限审计+健康度统一挂「合规性检查」一个出口。\n\n| 合并模块 | 包含 | 输出类别 |\n|---------|------|---------|\n| 健康度 | 质量评分（8 项）+ 结构检查（3 项） | `health_quality` / `health_structure` |\n| 合规性 | 健康度 + 权限审计 | `compliance_permission` + 健康度全部 |\n\n**好处：** 报告结构更清晰，旧版「质量评分」「结构检查」「权限审计」三个独立模块合并为「合规性检查」一个入口。\n\n### 19. OSV.dev 离线数据包接入（新增）\n\nv3.4.0 将 OSV.dev 官方导出包（按 PyPI / npm 生态过滤）周期下载并合并进已有的三级缓存（7 天全量 + 每日增量 + 离线降级），依赖覆盖从硬编码 26 包跃升到**全生态**，且**全程零密钥**（纯 HTTPS 下载，无需任何 API key）。\n\n| 项 | 说明 |\n|----|------|\n| 数据来源 | OSV 公开导出包（PyPI / npm），无鉴权 |\n| 缓存位置 | `~/.workbuddy/osv_offline_cache/`（仓库外，不污染 skill 包） |\n| 刷新策略 | 索引超过 7 天或 `--refresh-osv` 时联网重建，其余走离线 |\n| 匹配粒度 | 按锁定文件**版本区间**精确匹配（非包名级） |\n| 离线降级 | 无网络时用最近快照，报告中标注 `data_point`（数据时点） |\n\n**性能：** 索引仅构建一次（周期缓存），扫描时为纯内存字典查询；导出包体积大但存于缓存目录，不拖慢扫描。\n\n### 20. 锁文件深度解析（新增）\n\nv3.4.0 新增 `package-lock.json` / `poetry.lock` 两类锁文件解析器（原有 `requirements.txt` 升级），自动展开**传递依赖全树**（lock 文件天然含完整依赖图），扫描匹配从「包名级」升级到「版本区间级」。\n\n| 解析器 | 生态 | 传递依赖 | approx |\n|--------|------|---------|--------|\n| requirements.txt | PyPI | 仅直接依赖 | 标注 `approx`（无 lock 时近似） |\n| package-lock.json | npm | 全树（lock 内含） | 精确 |\n| poetry.lock | PyPI | 全树（lock 内含） | 精确 |\n| package.json / pyproject.toml | npm / PyPI | 仅直接依赖 | 标注 `approx` |\n\n**好处：** 有了 lock 文件即可精确判定「某版本是否落在漏洞影响区间」，大幅降低无版本信息导致的误报；无 lock 时退化为直接依赖 + 近似匹配并明确标注 `approx`。\n\n### 21. 一键快扫 + 三档裁定（新增）\n\nv3.5.0 新增 `--quick` 一键模式，专为「**装之前看一眼**」的大多数用户设计——技术深度远超竞品，但用户要的是一句话价值：\n\n- **只跑 L1 静态层三件套**（≤30 秒）：① 静态指纹（341 条恶意 skill 指纹 hash + 模式匹配）② 6 类规则（prompt_injection / command_injection / SSRF / credential_leak / path_traversal / dangerous_functions，来自 `rules/*.yaml`）③ 权限审计（allowed-tools 过度授权检测）\n- **跳过**沙箱执行、OSV 供应链、污点追踪、ML 检测、社区规则等重能力，换取速度\n- **三档裁定**：🚫恶意（命中 critical / 恶意指纹）、⚠️可疑（命中 high/medium）、✅干净（无命中或仅 info）\n- **Top3 风险** + **一句话理由**（如「检测到 2 条高危或中危风险，建议审查后再安装」）\n- **裁定映射表外置**（`scripts/quick_verdict.json`）：分数→档位的规则不硬编码，可自定义\n\n### 22. 报告分级输出（优化）\n\n| 档位 | 触发 | 输出 | 适用人群 |\n|------|------|------|---------|\n| **quick**（默认） | `--quick` / `--mode quick` / 默认 | 裁定 + Top3 + 一句话理由（≤1 屏） | 装之前看一眼的普通用户 |\n| **full** | `--mode full` | 全部细节（JSON / HTML / SARIF）+ CI/CD 集成 | 安全工程师 / CI 流水线 |\n\n**默认档位可配**：环境变量 `SKILLSEC_MODE=quick|full` 可覆盖默认（默认 quick）。快扫报告与全量报告各取所需，不互相干扰。\n\n## 使用方法\n\n### 基本用法（命令行）\n\n```bash\n# 扫描一个 Skill 目录（文本输出）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n\n# 生成 JSON 报告\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format json\n\n# 生成 HTML 报告并保存为文件\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format html -o report.html\n\n# 跳过更新检查\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --skip-update\n\n# 开启动态沙箱执行扫描（需 Docker 或 Windows Sandbox）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic\n\n# 动态扫描 + 放行白名单域名 + 自定义超时（秒）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic --allow-domain api.github.com --sandbox-timeout 60\n\n# 启用供应链风险分析\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain\n\n# 启用恶意 Skill 指纹匹配\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --malicious-db\n\n# 启用全局排除配置（.nosec.yml）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --global-exclude\n\n# 同时启用所有高级功能\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --malicious-db --global-exclude\n\n# 启用 YAML 规则引擎（6 类规则可热插拔）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine\n\n# 启用 ML 提示注入语义检测（ONNX + 正则降级）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --ml-detect\n\n# 启用 eBPF/ETW 系统级行为捕获\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --syscall-monitor\n\n# v3.2.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine --ml-detect --syscall-monitor --malicious-db --global-exclude --supply-chain --dynamic\n\n# v3.3.0 污点追踪\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking\n\n# v3.3.0 社区规则\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --community-rules \"D:\\path\\to\\community-rules\"\n\n# v3.3.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking --community-rules \"D:\\path\\to\\community-rules\" --rule-engine --ml-detect --malicious-db --global-exclude --supply-chain\n\n# v3.4.0 OSV 离线数据包强制刷新索引（联网重建全生态 CVE 索引）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --refresh-osv\n\n# v3.4.0 全功能模式（含锁文件版本区间匹配）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking --community-rules \"D:\\path\\to\\community-rules\" --rule-engine --ml-detect --malicious-db --global-exclude --supply-chain --refresh-osv\n\n# v3.5.0 一键快扫（默认，30 秒出三档裁定 + Top3 + 一句话理由）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --quick\n\n# v3.5.0 显式指定档位（quick / full）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode quick\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode full\n\n# v3.5.0 环境变量覆盖默认档位（默认 quick）\nset SKILLSEC_MODE=full\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n```\n\n### 参数快查\n\n| 参数 | 说明 | 默认 |\n|------|------|------|\n| `skill_path` | 待扫描的 Skill 目录（必填） | — |\n| `--format` | 输出格式：`text` / `json` / `html` | `text` |\n| `-o, --output` | 报告输出文件路径 | 打印到终端 |\n| `--skip-update` | 跳过更新检查 | 关闭 |\n| `--dynamic` | 开启动态沙箱执行扫描 | 关闭 |\n| `--allow-domain` | 放行白名单域名（可重复） | 无（默认断网） |\n| `--sandbox-timeout` | 沙箱执行超时（秒） | 30 |\n| `--supply-chain` | 启用供应链风险分析 | 关闭 |\n| `--malicious-db` | 启用恶意 Skill 指纹匹配（341 条） | 关闭 |\n| `--global-exclude` | 启用 .nosec.yml 全局排除配置 | 关闭 |\n| `--rule-engine` | 启用 YAML 规则引擎（6 类规则包） | 关闭 |\n| `--syscall-monitor` | 启用 eBPF/ETW 系统级行为捕获 | 关闭 |\n| `--ml-detect` | 启用 ML 提示注入语义检测 | 关闭 |\n| `--taint-tracking` | 启用污点追踪（Python AST + JS 词法，source→sink 证据链） | 关闭 |\n| `--community-rules` | 加载第三方社区规则包目录（schema 校验 + 来源记录） | 关闭 |\n| `--refresh-osv` | 强制刷新 OSV 离线数据包索引（v3.4.0，联网重建全生态 CVE 索引） | 关闭 |\n| `--quick` | 一键快扫：仅 L1 静态层（恶意指纹+6类规则+权限审计），30 秒出三档裁定（v3.5.0） | 关闭（但默认档位即为 quick） |\n| `--mode` | 扫描档位：`quick`（快扫三档裁定，≤1屏）/ `full`（全量细节 SARIF/HTML/JSON），可用环境变量 `SKILLSEC_MODE` 覆盖默认 | `quick` |\n\n### 在 WorkBuddy 中触发\n\n直接告诉 WorkBuddy，口语化触发词命中率最高（v3.5.0 新增对齐钟馗的中文触发语）：\n\n- **「审一下这个 skill」** + 路径 → 自动快扫出三档裁定\n- **「装之前帮我查查」** + 路径 → 安装前安全快扫\n- **「这个 skill 安全吗」** + 路径 → 安全快扫判定\n- **「安全审计」** + 技能路径 → `帮我安全审计 D:\\skill\\my-skill`\n\n直接告诉 WorkBuddy，触发词覆盖面广：\n\n- **「安全审计」+ 技能路径** → `帮我安全审计 D:\\skill\\my-skill`\n- **「扫描」+ Skill** → `扫描这个 skill 有没有安全问题`\n- **「发布前检查」+ 技能名** → `发布前帮我检查一遍 my-skill`\n- **「安全检测」+ 路径** → `帮我对这个路径做一份安全检测`\n- **「代码审计」+ 文件夹** → `对 D:\\skill\\project 做代码审计`\n- **「Skill 安全吗」** → `这个 skill 安全吗`\n\n## 输出说明\n\n### 评分等级\n\n评分从 100 分开始扣分，不同等级对应不同发布建议：\n\n| 等级 | 分数区间 | 发布建议 | 含义 |\n|------|---------|---------|------|\n| 🟢 A | 90-100 | ✅ 可安全发布 | 优秀 |\n| 🟣 B | 75-89 | ⚠️ 建议修复后发布 | 良好 |\n| 🟡 C | 60-74 | ⚠️ 需要修复 | 一般 |\n| 🟠 D | 40-59 | ❌ 不建议发布 | 较差 |\n| 🔴 F | 0-39 | ❌ 禁止发布 | 危险 |\n\n### 严重度分类\n\n- 🔴 **严重**（-25 分/个）：提示注入、命令注入、凭证外泄 → 必须立即修复\n- 🟠 **高危**（-15 分/个）：SSRF、路径遍历、危险权限组合 → 建议尽快修复\n- 🟡 **中等**（-8 分/个）：危险函数、权限过度授权、description 过短 → 建议修复\n- 🔵 **低危**（-3 分/个）：命名规范问题、缺少错误处理说明 → 建议优化\n- ⚪ **信息**（0 分）：更新版本提示、参考信息 → 仅供参考\n\n### 返回码（for CI/CD 集成）\n\n| 退出码 | 含义 | CI 行为建议 |\n|--------|------|------------|\n| 0 | 无问题或仅低危 | ✅ 通过 |\n| 1 | 存在中等问题 | ⚠️ 警告 |\n| 2 | 存在严重/高危问题 | ❌ 失败，阻断发布 |\n\n## 扫描排除规则\n\n以下内容将被自动跳过，不参与扫描，不计入风险：\n\n### 自动排除的文件类型\n\n1. **可执行/脚本**：`.bat`、`.cmd`、`.ps1`、`.vbs`、`.exe`、`.dll`、`.msi`、`.sh`、`.com`、`.scr`、`.hta`、`.reg`\n2. **Office 文档**：`.docx`、`.xlsx`、`.pptx`、`.doc`、`.xls`、`.ppt`、`.xlsm`、`.docm`、`.pptm`\n3. **压缩包/镜像**：`.iso`、`.dmg`、`.zip`、`.rar`、`.7z`、`.tar`、`.gz`、`.apk`、`.jar`\n4. **缓存/隐藏**：`.DS_Store`、`.pyc`、`.pyo`、`.so`、`.swp`、`.env`、`.log`、`.tmp`\n\n### 自动排除的目录\n\n`__pycache__`、`.git`、`.venv`、`.pytest_cache`、`node_modules`、`.idea`、`.vscode`\n\n## 扫描示例\n\n```\n============================================================\n  Skill Security Audit Report\n============================================================\n  Skill: my-cool-skill\n  Path: D:\\skill\\my-cool-skill\n  Time: 2026-07-13T14:32:10\n  Files: 15 scanned, 2 skipped\n============================================================\n\n  Score: 82/100 (Grade: B)\n  Found 2 medium issues.\n\n  ──────────────────────────────────────────────────────────\n  [MED]   quality_check     SKILL.md         Missing version field\n  [MED]   quality_check     SKILL.md         No error handling mentioned\n  ──────────────────────────────────────────────────────────\n\n  Fix suggestions:\n    [quality_check] Add version field in frontmatter\n    [quality_check] Add error handling docs in SKILL.md\n\n  Feedback: njskills@agent.qq.com\n============================================================\n```\n\n## 常见问答（FAQ）\n\n**Q: 扫描会很慢吗？需要联网吗？**\nA: 扫描本身不会慢。工具会自动检测你的 CPU 核心数和可用内存，动态调整并行数（1-8 线程），在本地离线完成扫描，不联网也不会影响结果。可选的更新检查（24 小时缓存）可以通过 `--skip-update` 关闭。\n\n**Q: 扫描结果为 F 等级怎么办？**\nA: 请按照输出的修复建议逐一修复问题，特别是严重和高危问题。修复后可重新扫描确认分数是否提升。常见修复步骤：\n1. 移除所有硬编码的敏感信息（API Key、Password 等）→ 添加到 `.env` 或环境变量\n2. 避免使用 `eval()`/`exec()`/`os.system()` → 使用 `subprocess.run()` 并关闭 `shell=True`\n3. 确保所有依赖升级到安全版本（见报告中建议的版本号）\n4. 清理硬编码的内网 IP，改用域名或环境变量\n\n**Q: 报告说发现了命令注入，但我只是在说明文档中写了代码示例？**\nA: 代码示例中如果包含了 curl、wget、shell 等相关关键词，会被模式匹配命中。这是预期行为——**请在代码示例末尾添加 `# nosec` 注释**即可跳过该行。\n\n**Q: 这个工具支持扫描 Python 以外的文件吗？**\nA: 支持。除了 `.py` 文件，还可以扫描 `.js`、`.ts`、`.json`、`.yaml`、`.md`、`.html` 等所有文本格式文件。Office 文档和可执行文件会被自动跳过。\n\n**Q: 检测出误报怎么办？**\nA: 主要有两种方式：\n1. **临时方案**：在代码行末尾添加 `# nosec` 注释\n2. **永久方案**：联系 njskills@agent.qq.com 提供误报规则详情（文件路径和匹配模式），我们会优化规则\n\n**Q: 用于公司 CI/CD 流水线，需要安装什么依赖吗？**\nA: 不需要。本工具只需要 **Python 3.8+** 标准库，无第三方依赖。可集成到 GitHub Actions、GitLab CI、Jenkins 等任意 CI 平台。（注：动态扫描 `--dynamic` 需额外具备 Docker 或 Windows Sandbox 环境。）\n\n**Q: 我没有 Docker，能用动态扫描吗？**\nA: 可以直接加 `--dynamic`，工具会自动探测环境。若无 Docker / Windows Sandbox，会自动降级为纯静态扫描并提示「建议在沙箱环境中进行动态扫描」，不会报错。想获得完整行为捕获，推荐安装 Docker Desktop。\n\n**Q: 动态扫描会不会有风险？会不会拖慢我电脑？**\nA: 动态扫描在隔离环境中运行：Docker 用 `--network=none` 断网 + 只读挂载 + CPU/内存/PID 限额；Windows Sandbox 断网 + 只读映射。默认单次超时 30 秒，CPU 上限自动取核心数的一半，不会拖慢日常使用。被扫描代码无法接触你的真实文件系统和网络。\n\n**Q: 恶意 Skill 指纹库能覆盖未知的新型恶意 Skill 吗？**\nA: 指纹库覆盖 341 条已知恶意 Skill，对于已知的恶意包（如 PyPI 恶意依赖、npm 钓鱼包）能实现 100% 拦截。但攻击者如果修改代码、混淆变量名，SHA256 指纹会变化，此时需要结合静态扫描的规则（提示注入、命令注入等）来发现。建议同时开启 `--malicious-db` 和静态扫描，双重保障。\n\n**Q: CVE 离线缓存能维持多久？无网环境能用吗？**\nA: 7 天全量缓存 + 每日增量更新。无网络环境下，工具自动使用本地缓存，CVE 漏洞扫描功能仍可正常使用（使用最近一次缓存数据）。API 恢复后，新查询到的 CVE 结果会自动写回缓存。缓存文件存放在 `~/.workbuddy/cve_cache/`。\n\n**Q: `.nosec.yml` 和 `# nosec` 注释有什么区别？哪个优先？**\nA: `# nosec` 是单行临时排除，`.nosec.yml` 是团队级全局配置，支持按类别、文件路径、正则模式批量排除。**过滤顺序**：`# nosec` 行级排除先应用，然后是 `.nosec.yml` 全局排除。建议团队统一使用 `.nosec.yml`，个人调试用 `# nosec`。\n\n**Q: 规则引擎和原来的静态扫描有什么区别？**\nA: 规则引擎将 6 类规则从代码硬编码重构为 YAML 文件（`rules/*.yaml`），新增规则只需添加 YAML 文件，无需修改 `--rule-engine` 开启。未开启时自动回退到原有硬编码规则，完全兼容。\n\n**Q: ML 提示注入检测需要联网吗？需要安装额外依赖吗？**\nA: 不需要联网，不需要额外依赖。ML 检测使用 ONNX Runtime（纯 CPU 推理），模型存放在 `~/.workbuddy/models/prompt_injection.onnx`。无模型时自动降级到正则规则包（含 20 条规则，含中文），零外部依赖。\n\n**Q: eBPF/ETW 系统级捕获需要什么权限？**\nA: Linux 需要 root 权限 + bcc 框架；Windows 需要管理员权限。无权限时自动降级，提示「系统级行为捕获不可用」，不影响其他扫描功能。\n\n**Q: 污点追踪和原来的静态扫描有什么区别？**\nA: 污点追踪在模式匹配基础上增加了数据流分析——不只看代码中是否存在危险函数，还追踪用户输入/环境变量/网络响应（source）是否流经赋值/拼接/属性访问等路径最终到达危险函数（sink）。有完整 source→sink 传播链的报高危（`taint_chain`），仅有 sink 调用但无明确 source 的降为 info 级（`taint_sink_only`），从而降低误报。\n\n**Q: 社区规则和官方规则包有什么区别？**\nA: 官方规则包（`scripts/rules/*.yaml`）内置在 Skill 目录中，由开发者维护。社区规则通过 `--community-rules <目录>` 从外部加载，每个 YAML 文件经过 schema 校验（必填字段、类型检查、正则合法性），加载后记录来源（`_source`），报告中 `community_` 前缀与官方规则分开统计。责任边界清晰。\n\n**Q: 健康度与合规检查合并后，旧版报告还能看吗？**\nA: 完全兼容。旧版的「质量评分」「结构检查」「权限审计」三个模块在 v3.3.0 中合并为「合规性检查」一个出口，输出类别从 `quality_check`/`structure_check`/`permission_audit` 统一为 `health_quality`/`health_structure`/`compliance_permission`，报告结构更清晰，不再重复。\n\n**Q: v3.4.0 的 OSV 离线数据包需要联网和 API Key 吗？**\nA: 不需要 API Key。索引由 OSV 公开导出包（PyPI / npm）周期下载构建，纯 HTTPS、**零密钥**。索引超过 7 天或加 `--refresh-osv` 时联网重建，其余扫描全部走本地索引，无网络也能用（使用最近快照，并在报告中用 `data_point` 标注数据时点）。\n\n**Q: 锁文件解析有什么用？没有 lock 文件会怎样？**\nA: 有 `package-lock.json` / `poetry.lock` 时，工具展开完整传递依赖树并按「版本区间」精确判定某版本是否落在漏洞影响区间，误报显著降低。仅有 `requirements.txt` / `package.json`（无 lock）时退化为直接依赖 + 近似匹配，并在结果中标注 `approx`，提示你补充 lock 文件以获得精确结论。\n\n**Q: 一键快扫（--quick）和全量（--mode full）有什么区别？**\nA: 快扫只跑 L1 静态层三件套（恶意指纹 + 6 类规则 + 权限审计），跳过沙箱/OSV/污点/ML 等重能力，30 秒内出「✅干净/⚠️可疑/🚫恶意」三档裁定 + Top3 风险 + 一句话理由（≤1 屏），适合装之前看一眼。全量保留全部细节（JSON/HTML/SARIF）给安全工程师和 CI。默认档位 quick，可用 `--mode full` 或环境变量 `SKILLSEC_MODE=full` 切换。\n\n**Q: 三档裁定准吗？341 条恶意指纹会漏报吗？**\nA: 快扫强制启用恶意指纹匹配（341 条 hash + 模式），命中即直接判 🚫恶意，召回 100%。裁定映射表在 `scripts/quick_verdict.json` 外置，critical / 恶意指纹 → 🚫，high/medium → ⚠️，其余 → ✅，可自定义不硬编码。\n\n**Q: 哪些口语能触发快扫？**\nA: 对齐钟馗的中文触发语：「审一下这个 skill」「装之前帮我查查」「这个 skill 安全吗」+ 路径即可自动快扫。意图路由命中这些口语即走 quick 档。\n\n## 安全声明\n\n- **默认只做静态分析，不会执行被扫描的代码**（静态模式仅读取文件，不写入）\n- **动态扫描（`--dynamic`）需显式开启**，且仅在隔离环境（Docker / Windows Sandbox）中执行被扫描代码，沙箱**默认断网**、只读挂载、CPU/内存限额，绝不在宿主机直接运行\n- **不会上传任何文件内容到外部服务器**\n- **更新检查仅获取 GitHub Release 标题，不下载任何附件**\n- **所有扫描在本地完成，保护你的代码隐私**\n- Windows Sandbox 的 `.wsb` 配置在运行时动态生成到临时目录，用完即删，不写入 Skill 仓库\n- `.nosec.yml` 全局排除配置仅影响本团队扫描流程，不会降低安全性；被排除的行仍可在完整报告中查看（`--format json` 包含 `excluded` 字段）\n\n## 反馈与支持\n\n如有误报反馈、规则改进建议或功能需求，欢迎联系：\n\n📧 **njskills@agent.qq.com**\n\n你的反馈将直接帮助我们升级规则库，完善检测能力。\n\n## 更新日志\n\n| v3.5.0 | 2026-10-09 | 增加：一键快扫 --quick / --mode quick 模式，只跑 L1 静态层三件套（恶意指纹 341 条 + 6 类规则 + 权限审计），30 秒内出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；增加：scripts/quick_verdict.json 外置裁定映射表（分数→档位可自定义，不硬编码）；增加：报告分级输出（quick 档 ≤1 屏、full 档保留 JSON/HTML/SARIF 全量细节），默认档位可配（环境变量 SKILLSEC_MODE=quick\\|full）；优化：description 增补口语触发词（审一下这个 skill / 装之前帮我查查 / 这个 skill 安全吗）对齐钟馗意图路由，快速开始压缩到 3 行；优化：一键快扫强制启用恶意指纹匹配保障 341 条样本 🚫档召回 100% |\n| v3.3.0 | 2026-08-24 | 增加：轻量 SAST 污点追踪（taint_tracker.py），Python AST + JS 词法近似，source→sink 证据链降误报（无完整链降 info）；增加：社区规则扩展（community_rules.py），第三方 YAML 规则包 schema 校验 + 来源记录 + HMAC-SHA256 签名验证，官方/社区规则报告分开统计；增加：健康度与合规检查合并（scan_health + scan_compliance），质量评分+结构检查统一为健康度模块，权限审计+健康度统一挂合规性检查出口；增加：--taint-tracking 和 --community-rules <path> 两个 CLI 参数；优化：report meta 区新增 taint_tracking / community_rules 维度统计 |\n| v3.2.0 | 2026-08-17 | 增加：规则引擎模块（scripts/rules_engine.py），将 6 类静态规则从硬编码重构为 YAML 规则包（rules/*.yaml），支持热插拔扩展，新增规则只需加 YAML 文件不改代码；增加：scripts/rules/ 目录包含 6 个规则包（prompt_injection/command_injection/ssrf/credential_leak/path_traversal/dangerous_functions），共 67 条正则；增加：系统级行为捕获模块（scripts/sandbox/system_monitor.py），支持 eBPF（Linux）/ ETW（Windows）内核级 syscall 监控，无 eBPF/ETW 时自动降级；增加：ML 提示注入语义检测（scripts/sandbox/ml_detect.py），ONNX 模型优先 + 正则降级双模式，含中文规则与结果缓存；增加：scan_rule_engine()、scan_ml_prompt_injection()、scan_syscall_monitor() 三个扫描方法；增加：--rule-engine、--ml-detect、--syscall-monitor 三个 CLI 参数；增加：report meta 区新增 rule_engine / ml_detect / syscall_monitor 维度统计 |\n| v3.1.0 | 2026-08-07 | 增加：实时恶意 Skill 库同步模块，内置 341 条 SHA256 指纹实现 100% 已知恶意 skill 拦截；增加：CVE 离线缓存（7 天全量 + 每日增量），无网络环境仍可扫描依赖漏洞；增加：全局排除配置（.nosec.yml），支持按类别/文件/正则模式批量排除误报；增加：--malicious-db 和 --global-exclude 两个命令行参数；优化：add_result() 集成全局排除过滤逻辑 |\n| v3.0.0 | 2026-08-01 | 增加：供应链风险分析模块，支持依赖树扫描、typo-squatting 钓鱼包检测、维护状态评估（僵尸包识别）、许可证合规检查；增加：CVE 数据库从 26 条手动维护升级为 OSV/NVD API 自动拉取并每日缓存更新；增加：ci_templates/ 目录提供 GitHub Action 与 GitLab CI 开箱即用模板；增加：SARIF 2.1.0 格式输出支持 GitHub Code Scanning；增加：PR 自动评论扫描结果功能；增加：质量门禁机制（默认 70 分阈值阻止合并）；增加：--supply-chain 与 --format sarif 命令行参数；优化：audit.py 报告 meta 区新增 supply_chain 维度统计；优化：依赖解析器支持 requirements.txt / package.json / pyproject.toml 三种格式 |\n| v2.0.0 | 2026-07-22 | 增加：动态沙箱执行扫描模块，在 Docker 或 Windows Sandbox 隔离环境中实际运行脚本捕获运行时行为；增加：网络请求、文件读写、进程创建、环境变量读取、动态代码执行五类运行时行为捕获；增加：敏感路径访问、未知目标外联、下载并执行远程载荷、shell 进程创建、密钥环境变量读取五类异常行为标记；增加：沙箱默认断网与 --allow-domain 域名白名单机制；增加：--dynamic、--allow-domain、--sandbox-timeout 三个命令行参数；增加：无 Docker/Windows Sandbox 时自动降级为纯静态扫描并给出提示；优化：报告 meta 区展示动态扫描后端与行为统计 |\n| v1.3.0 | 2026-07-13 | 修复：base64 编码的命令注入模式中有两个模式解码后正则表达式括号不匹配导致扫描报错；修复：CVE 列表中 protobuf 的 CVE 编号错误；增加：24 小时缓存的更新检查机制避免频繁联网请求；增加：# nosec 内联注释排除规则降低误报；优化：依赖库覆盖范围从 17 个扩展到 26 个常见高危依赖；优化：错误信息改为更友好的中文提示；优化：扫描输出显示优化减少信息密度过高的问题；优化：新增详细说明文档和常见问答\n| v1.2.0 | 2026-07-13 | 增加：硬件感知并行度自动调整功能，根据 CPU/内存动态分配线程数；增加：更新检查功能自动提示新版本；优化：依赖审计支持 pyproject.toml 和 Pipfile 格式；修复：凭证外泄检测正则表达式中转义字符导致扫描崩溃的问题\n| v1.1.0 | 2026-07-13 | 增加：依赖漏洞审计模块；增加：质量评分维度（包含 SKILL.md 完整性检查）；优化：评分算法改为按严重度区分扣分权重；优化：HTML 报告增加统计卡片和响应式布局\n| v1.0.0 | 2026-07-13 | 初始版本发布，包含静态扫描、权限审计、结构检查、JSON/HTML 报告生成\n\nFile v3.5.0:_meta.json\n\n{\n  \"ownerId\": \"kn7chdrwbdhaqkwajcyhtfvjx989ddb1\",\n  \"slug\": \"skill-security-checker\",\n  \"version\": \"3.5.0\",\n  \"publishedAt\": 1791536430443\n}\n\nFile v3.5.0:references/scan-patterns.md\n\n# 扫描规则参考文档\n\n本文件详细定义了 Skill Security 使用的检测逻辑。\n\n## 一、提示注入检测\n\n检测试图覆盖或绕过系统指令的恶意提示。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配「忽略先前/上面/所有」+「指令/提示/规则」组合 | 尝试让 AI 忽略原始系统指令 |\n| 匹配「系统提示」+「覆盖/替换/忽略/绕过」组合 | 直接覆盖系统提示 |\n| 匹配「你现在是...」 | 强制 AI 扮演新角色绕过限制 |\n| 匹配「越狱」类关键词 | 触发越狱模式 |\n| 匹配「做任何事」模式 | 解除限制模式 |\n| 匹配「假装你是」 | 假装成其他身份 |\n| 匹配「角色扮演为」 | 绕过角色限制 |\n| 匹配「覆盖/禁用」+「安全/过滤/限制」 | 禁用安全过滤 |\n| 匹配「忘记一切」 | 让 AI 忘记所有指令 |\n| 匹配「重新开始」 | 重置指令 |\n| 匹配「重置指令」 | 重置指令 |\n\n## 二、命令注入检测\n\n检测通过用户输入执行系统命令的代码。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 curl/wget 管道连接 shell | 从远程下载脚本并执行 |\n| 匹配 fetch+eval 组合 | 执行远程代码 |\n| 匹配 eval/exec/system + $_GET/$_POST | PHP 命令注入 |\n| 匹配 passthru/shell_exec | PHP 命令执行 |\n| 匹配反引号执行 curl/wget/nc | 命令替换执行 |\n| 匹配 $() 内执行 curl/wget/nc | 命令替换执行 |\n\n## 三、SSRF/内网访问\n\n检测硬编码的内网地址。\n\n| 地址段 | 说明 |\n|--------|------|\n| 127.0.0.1 | 本地回环 |\n| 10.0.0.0/8 | 私有网络 A 类 |\n| 172.16.0.0/12 | 私有网络 B 类 |\n| 192.168.0.0/16 | 私有网络 C 类 |\n| fc00::/7 | IPv6 私有地址 |\n| fe80::/10 | IPv6 链路本地 |\n| 0.0.0.0 | 全地址监听 |\n\n## 四、凭证外泄\n\n检测硬编码的敏感凭证。\n\n| 检测类型 | 说明 |\n|---------|------|\n| API Key | 20位以上字母数字组合 |\n| Secret Key | 20位以上字母数字组合 |\n| Access Token | 20位以上字母数字组合 |\n| Private Key | 40位以上 base64 字符 |\n| Password | 8位以上明文密码 |\n| Bearer Token | Authorization 头 |\n| AWS Access Key | AKID 开头 |\n| GitHub Token | ghp_/gho_ 开头 |\n| OpenAI Key | sk- 开头 |\n| 阿里云 AccessKey | AKID 开头 |\n\n## 五、路径遍历\n\n检测 ../ 等模式访问预期外的文件系统路径。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 ../ 或 ..\\ | 目录穿越 |\n| 匹配 URL 编码 %2f%2e%2e | 编码绕过 |\n| 匹配 /etc/passwd 或 /etc/shadow | 系统文件访问 |\n| 匹配 c:\\windows\\ | Windows 系统目录 |\n\n## 六、危险函数\n\n| 函数 | 风险 |\n|------|------|\n| eval() | 执行任意代码 |\n| exec() | 执行任意代码 |\n| os.system() | 执行系统命令 |\n| subprocess(shell=True) | 命令注入 |\n| pickle.load() | 反序列化漏洞 |\n| yaml.load() (无 Loader) | 反序列化漏洞 |\n| marshal.load() | 执行字节码 |\n\n## 七、已知漏洞依赖\n\n当检测到以下依赖版本低于安全版本时发出告警：\n\n| 依赖包 | 安全版本 | 主要 CVE |\n|--------|----------|----------|\n| requests | ≥2.32.0 | CVE-2024-35195 |\n| urllib3 | ≥2.2.0 | CVE-2024-37891 |\n| flask | ≥3.0.0 | CVE-2023-30861 |\n| django | ≥4.2.0 | 多个高危 |\n| numpy | ≥1.22.0 | 缓冲区溢出 |\n| pillow | ≥10.0.0 | 多个 CVE |\n| pyyaml | ≥6.0 | CVE-2020-14343 |\n| jinja2 | ≥3.1.0 | CVE-2024-22416 |\n| cryptography | ≥42.0.0 | 安全修复 |\n| aiohttp | ≥3.9.0 | CVE-2024-23334 |\n| tqdm | ≥4.66.0 | CVE-2024-34062 |\n| setuptools | ≥65.5.0 | CVE-2022-40897 |\n| node-fetch | ≥2.6.7 | CVE-2022-0235 |\n| minimist | ≥1.2.6 | CVE-2021-44906 |\n| lodash | ≥4.17.21 | CVE-2021-23337 |\n| axios | ≥0.21.1 | CVE-2021-3749 |\n| express | ≥4.17.3 | 多个修复 |\n\n## 八、误报处理\n\n某些合法代码可能触发告警，属于正常误报场景：\n\n1. 文档/示例中包含攻击模式说明（应确保在注释或字符串中）\n2. 测试代码包含恶意 payload 样例\n3. 安全工具本身的检测规则\n4. 故意作为反例演示的代码\n\n对于确认的误报，可在代码行尾添加 `# nosec` 注释跳过检测。\n\n## 九、评分算法\n\n评分从 100 分开始扣分：\n\n| 严重度 | 扣分 |\n|--------|------|\n| 🔴 严重 | -25分/个 |\n| 🟠 高危 | -15分/个 |\n| 🟡 中等 | -8分/个 |\n| 🔵 低危 | -3分/个 |\n| ⚪ 信息 | 0分 |\n\n最低分数为 0。\n\n等级划分：\n\n| 分数 | 等级 | 发布建议 |\n|------|------|----------|\n| 90-100 | A | ✅ 可发布 |\n| 75-89 | B | ⚠️ 建议修复后发布 |\n| 60-74 | C | ⚠️ 需要修复 |\n| 40-59 | D | ❌ 不建议发布 |\n| 0-39 | F | ❌ 禁止发布 |\n\nFile v3.5.0:scripts/ci_templates/gitlab-ci.yml\n\nstages:\n  - security\n\nskill-security-scan:\n  stage: security\n  image: python:3.11-slim\n  script:\n    - python scripts/audit.py . --format json -o report.json --skip-update\n    - |\n      SCORE=$(python -c \"import json; print(json.load(open('report.json'))['score'])\")\n      echo \"Quality Score: $SCORE\"\n      if [ \"$SCORE\" -lt 70 ]; then\n        echo \"Score below threshold (70), failing.\"\n        exit 1\n      fi\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n    when: always\n  only:\n    - merge_requests\n    - main\n\nFile v3.5.0:scripts/ci_templates/skill-scan.yml\n\nname: Skill Security Scan\n\non:\n  push:\n    branches: [main, master]\n  pull_request:\n    branches: [main, master]\n\njobs:\n  security-scan:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      security-events: write\n      pull-requests: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.11'\n      - name: Run skill-security-checker\n        run: |\n          python scripts/audit.py . \\\n            --format sarif \\\n            -o sarif-output.sarif \\\n            --skip-update\n        continue-on-error: true\n      - name: Upload SARIF to GitHub Code Scanning\n        uses: github/codeql-action/upload-sarif@v3\n        if: always()\n        with:\n          sarif_file: sarif-output.sarif\n      - name: Gate on quality score\n        run: |\n          SCORE=$(python scripts/audit.py . --format json --skip-update \\\n                  | python -c \"import sys,json; print(json.load(sys.stdin)['score'])\")\n          echo \"Quality Score: $SCORE\"\n          if [ \"$SCORE\" -lt 70 ]; then\n            echo \"Score below threshold (70), failing.\"\n            exit 1\n          fi\n      - name: Comment PR with scan results\n        if: github.event_name == 'pull_request'\n        uses: actions/github-script@v7\n        with:\n          script: |\n            const fs = require('fs');\n            const report = JSON.parse(\n              fs.readFileSync('sarif-output.sarif', 'utf8')\n            );\n            const stats = report.runs[0]?.results?.length ?? 0;\n            const body = [\n              '## 🔒 Skill Security Scan',\n              '',\n              `Found **${stats}** issue(s).`,\n              '',\n              'Full details in the **Security → Code Scanning** tab.',\n            ].join('\\n');\n            github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: context.issue.number,\n              body: body,\n            });\n\nFile v3.5.0:scripts/quick_verdict.json\n\n{\n  \"default_mode\": \"quick\",\n  \"verdict_order\": [\"malicious\", \"suspicious\", \"clean\"],\n  \"severity_to_verdict\": {\n    \"critical\": \"malicious\",\n    \"high\": \"suspicious\",\n    \"medium\": \"suspicious\",\n    \"low\": \"clean\",\n    \"info\": \"clean\"\n  },\n  \"categories_force_malicious\": [\"malicious_skill\", \"malicious_db_skipped\"],\n  \"verdicts\": {\n    \"malicious\": {\n      \"label\": \"🚫 恶意\",\n      \"exit_code\": 2,\n      \"reason_template\": \"检测到 {count} 条恶意指纹/严重漏洞，强烈建议不要安装\"\n    },\n    \"suspicious\": {\n      \"label\": \"⚠️ 可疑\",\n      \"exit_code\": 1,\n      \"reason_template\": \"检测到 {count} 条高危或中危风险，建议审查后再安装\"\n    },\n    \"clean\": {\n      \"label\": \"✅ 干净\",\n      \"exit_code\": 0,\n      \"reason_template\": \"未发现明显安全风险，可放心安装\"\n    }\n  }\n}\n\nFile v3.5.0:scripts/rules/command_injection.yaml\n\nname: command_injection\ndisplay_name: 命令注入\nseverity: critical\ndescription: 检测 curl/wget 管道执行、反引号执行、$() shell 执行等风险\n\npatterns:\n  - 'exfiltrate\\('\n  - 'curl.*(sh|bash|cmd|powershell)'\n  - 'wget.*(sh|bash)'\n  - 'fetchhttp.*ival'\n  - 'passthru'\n  - 'shell_exec'\n  - '`.*(curl|wget|nc|bash|sh)`'\n  - '\\$\\(\\s*(curl|wget|nc|bash|sh)\\s*\\)'\n\nsuggestion: 避免运行时命令拼接，使用参数化调用（如 requests 库替代 curl）\nsource: static\n\nFile v3.5.0:scripts/rules/credential_leak.yaml\n\nname: credential_leak\ndisplay_name: 凭证外泄\nseverity: critical\ndescription: 检测硬编码 API Key、Token、Password、Bearer Token 等敏感信息泄露\n\npatterns:\n  - '(?i)(api[_-]?key|apikey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(secret[_-]?key|secretkey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(access[_-]?token|accesstoken)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(private[_-]?key|privatekey)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{40,}[\"\\']?'\n  - '(?i)(password|passwd|pwd)\\s*[:=]\\s*[\"\\'][^\"\\']{8,}[\"\\']'\n  - '(?i)bearer\\s+[a-z0-9\\-._~+/]+=*'\n  - '(?i)aws[_-]?(access[_-]?key[_-]?id|secret[_-]?access[_-]?key)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{20,}[\"\\']?'\n  - '(?i)gh[pousr]_[a-z0-9]{36,}'\n  - '(?i)sk-[a-z0-9]{48}'\n  - '(?i)AKID[a-z0-9]{32}'\n\nsuggestion: 立即轮换凭证！使用环境变量或密钥管理器存储敏感信息\nsource: static\n\nFile v3.5.0:scripts/rules/dangerous_functions.yaml\n\nname: dangerous_functions\ndisplay_name: 危险函数\nseverity: medium\ndescription: 检测 eval/exec/os.system/pickle.load 等危险函数调用\n\npatterns:\n  - '(?i)eval\\s*\\('\n  - '(?i)exec\\s*\\('\n  - '(?i)os\\.system\\s*\\('\n  - '(?i)subprocess\\.call\\s*\\(\\s*shell\\s*=\\s*True'\n  - '(?i)popen\\s*\\('\n  - '(?i)__import__\\s*\\('\n  - '(?i)compile\\s*\\('\n  - '(?i)input\\s*\\('\n  - '(?i)pickle\\.loads?\\s*\\('\n  - '(?i)yaml\\.load\\s*\\([^)]*\\)(?!.*Loader)'\n  - '(?i)marshal\\.loads?\\s*\\('\n\nsuggestion: 避免使用 eval/exec，改用 ast.literal_eval 或 json.loads；subprocess 关闭 shell=True\nsource: static\n\nFile v3.5.0:scripts/rules/path_traversal.yaml\n\nname: path_traversal\ndisplay_name: 路径遍历\nseverity: high\ndescription: 检测路径遍历攻击、敏感文件访问等风险\n\npatterns:\n  - '\\.\\./'\n  - '\\.\\.\\'' \n  - '\\.\\.\\%2[fF]'\n  - '\\.\\.%5[cC]'\n  - '%2[eE]%2[eE]%2[fF]'\n  - '%2[eE]%2[eE]/'\n  - '\\.\\./etc/passwd'\n  - '\\.\\./windows/system32'\n  - '/etc/passwd'\n  - '/etc/shadow'\n  - 'c:\\\\windows\\\\'\n  - 'c:/windows/'\n\nsuggestion: 避免直接拼接路径，使用 Pathlib 安全拼接；访问前验证路径是否在预期目录内\nsource: static\n\nFile v3.5.0:scripts/rules/prompt_injection.yaml\n\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\n\npatterns:\n  - 'ignore previous instructions'\n  - 'ignore above all'\n  - 'system prompt override'\n  - 'ignore all previous'\n  - 'you are now a'\n  - 'jailbreak'\n  - 'DAN mode'\n  - 'do anything now'\n  - 'pretend to be'\n  - 'override safety'\n  - 'disable safety'\n  - 'forget everything'\n  - 'roleplay as an'\n  - 'start over'\n  - 'reset instructions'\n\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n\nFile v3.5.0:scripts/rules/ssrf.yaml\n\nname: ssrf\ndisplay_name: SSRF/内网访问\nseverity: high\ndescription: 检测内网 IP 地址、localhost 访问等 SSRF 风险\n\npatterns:\n  - '127\\.0\\.0\\.1'\n  - 'localhost'\n  - '0\\.0\\.0\\.0'\n  - '10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}'\n  - '172\\.(1[6-9]|2\\d|3[01])\\.\\d{1,3}\\.\\d{1,3}'\n  - '192\\.168\\.\\d{1,3}\\.\\d{1,3}'\n  - '169\\.254\\.\\d{1,3}\\.\\d{1,3}'\n  - 'fc00:'\n  - 'fe80:'\n  - '\\[::1\\]'\n  - '\\[::ffff:127\\.0\\.0\\.1\\]'\n\nsuggestion: 避免硬编码内网 IP，改用域名或环境变量\nsource: static\n\nArchive v3.4.0: 32 files, 87960 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (75823b), scripts/ci_templates/gitlab-ci.yml (528b), scripts/ci_templates/skill-scan.yml (2013b), scripts/community_rules.py (8337b), scripts/global_exclude.py (4170b), scripts/malicious_db.py (11168b), scripts/osv_offline.py (13778b), scripts/rules_engine.py (4142b), scripts/rules/__init__.py (0b), scripts/rules/command_injection.yaml (489b), scripts/rules/credential_leak.yaml (860b), scripts/rules/dangerous_functions.yaml (592b), scripts/rules/path_traversal.yaml (503b), scripts/rules/prompt_injection.yaml (609b), scripts/rules/ssrf.yaml (492b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/ml_detect.py (7043b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), scripts/sandbox/system_monitor.py (9281b), scripts/supply_chain.py (35753b), scripts/taint_tracker.py (14518b), skill-card.md (2405b), SKILL.md (35821b)\n\nFile v3.4.0:SKILL.md\n\n---\nslug: skill-security-checker\ndisplayName: Skill 安全审计扫描器\nname: skill-security-checker\ndescription: 'Skill Security — 安全审计扫描器，帮助你快速发现 Skill 中的安全风险。轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.json / poetry.lock，版本区间级精确匹配）、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。'\nversion: 3.4.0\ntags: ['security', 'audit', 'skill', 'scanner', 'code-analysis', 'vulnerability']\nicon: '🔒'\nauthor: 'njskills'\nlicense: 'MIT'\nallowed-tools: 'Bash,Read'\nmetadata:\n  agent_created: true\n  schema_version: '1.0'\n  release_date: '2026-07-22'\n  stability: 'stable'\n---\n\n# Skill Security\n\n> 一键扫描 Skill 安全风险，发布前最后一道安全闸门。\n\n## 概述\n\n本工具用于对 **WorkBuddy / ClawHub / SkillHub** 平台上发布的安全技能进行全方位安全合规扫描。它能帮你快速找出代码中的安全漏洞、不安全的依赖项、过度授权的权限配置，并以直观的评分等级和修复建议输出结果。\n\n**适用场景：**\n\n- 发布 Skill 前的安全检查\n- 评估第三方 Skill 的安全性\n- CI/CD 流水线中的自动化审查\n- Skill 质量评估与改进\n\n## 核心功能\n\n### 1. 静态扫描\n\n检测 Skill 文件中的安全漏洞：\n\n| 风险类型 | 检测内容 | 严重度 |\n|---------|---------|--------|\n| 提示注入 | 越狱指令、\"忽略原始指令\"、\"覆盖系统提示\"等文本 | 🔴 严重 |\n| 命令注入 | curl/wget 管道执行、反引号替换、$() 中执行 shell | 🔴 严重 |\n| SSRF/内网访问 | `127.0.0.1`、`10.x.x.x`、`192.168.x.x` | 🟠 高危 |\n| 凭证外泄 | 硬编码 API Key、Token、Password、Bearer Token | 🔴 严重 |\n| 路径遍历 | `../`、URL 编码绕过、绝对路径访问 | 🟠 高危 |\n| 危险函数 | `eval()`、`exec()`、`os.system()`、`pickle.load()` | 🟡 中等 |\n\n### 2. 依赖漏洞审计\n\n扫描 `requirements.txt`、`package.json`、`Pipfile`、`pyproject.toml` 等依赖文件，与内置的已知 CVE 漏洞库比对。\n\n目前覆盖 **26** 个常见高危依赖的已知漏洞：\n`requests`、`urllib3`、`flask`、`django`、`numpy`、`pillow`、`pyyaml`、`jinja2`、`cryptography`、`aiohttp`、`tqdm`、`setuptools`、`node-fetch`、`minimist`、`lodash`、`axios`、`express`、`vue`、`react`、`webpack`、`moment`、`npm`、`tough-cookie`、`word-wrap`、`protobuf`、`eslint`\n\n### 3. 权限审计\n\n检查 `allowed-tools` 声明是否有过度授权：\n\n- 声明了 Bash 但 description 中无对应使用场景 → 🟡 中等告警\n- Bash + Write 同时授权 → 🟠 高危告警\n- Bash + Exec 同时授权 → 🟠 高危告警\n- Bash + Read + Write + Edit 全量授权 → 🟠 高危告警\n\n### 4. 质量评分\n\n检查 SKILL.md 文档的完整性：\n\n| 检查项 | 要求 |\n|--------|------|\n| 必要字段 | `name`、`description`、`version` |\n| 命名规范 | kebab-case（小写字母+数字+连字符） |\n| description 长度 | 20-1024 字符 |\n| 版本号格式 | 语义化版本 (e.g., `1.0.0`) |\n| 硬编码路径 | 检测 `D:\\` 等绝对路径 |\n| 错误处理 | 文档中需提及异常处理策略 |\n\n### 5. 结构检查\n\n- 文件数量 ≤ 200\n- 总大小 ≤ 10MB\n- 缺少 README.md 时提醒\n\n### 6. 硬件感知并行（新增）\n\n自动检测当前设备的 CPU 核心数和可用内存，动态调整并发工作线程数（1-8 线程），在扫描速度和系统性能之间取得平衡。\n\n**检测逻辑：**\n- CPU 核心数 ÷ 2 = 最大线程数\n- 可用内存 < 2GB 时，线程数减半\n\n### 7. 更新检查（新增）\n\n工具运行时会自动检查 GitHub 上的新版本，发现更新时会在结果中提示用户升级。\n\n- ✅ 内置 **24 小时缓存**，避免频繁请求\n- ✅ 新增 `--skip-update` 参数可完全关闭此功能\n- ✅ 所有网络请求仅获取版本号，不下载任何内容\n\n### 8. `# nosec` 内联排除规则（新增）\n\n如果你确认某行代码是安全的，但触发了误报，可在该行末尾添加 `# nosec` 注释，扫描器将自动跳过该行。\n\n```python\n# 这行会被扫描器跳过\nos.system('ls')  # nosec\n```\n\n### 9. 实时恶意 Skill 库同步（新增）\n\n维护一份已知恶意 Skill 的 SHA256 指纹库（内置 341 条），扫描时对 Skill 目录下每个文件计算 SHA256，命中指纹即报高危，实现 100% 拦截已知恶意 Skill。\n\n- 内置 341 条恶意 Skill 指纹（PyPI 恶意包、npm 恶意包、已知攻击类型）\n- 文件内容变化即产生不同指纹，无法通过重命名或修改绕过\n- 可添加自定义指纹\n\n### 10. CVE 离线缓存（新增）\n\nCVE 数据库从\"每次请求 API\"升级为三级缓存架构，支持离线扫描：\n\n- **7 天全量缓存**：完整 CVE 库缓存到 `~/.workbuddy/cve_cache/cve_full_cache.json`\n- **每日增量更新**：当天查询过的 CVE 写入 `~/.workbuddy/cve_cache/cve_increment_cache.json`\n- **离线降级**：无网络时自动使用缓存，API 恢复后将新结果写回缓存\n\n### 11. 全局排除配置（新增）\n\n团队级 `.nosec.yml` 配置文件，按**类别、文件路径、正则模式**批量排除误报，替代逐行 `# nosec`。\n\n在 Skill 根目录创建 `.nosec.yml`：\n\n```yaml\nversion: 1\nexclude:\n  categories:\n    - quality_check\n    - path_traversal\n  files:\n    - \"scripts/audit.py\"\n  patterns:\n    - \".*test.*\"\n```\n\n- `categories`：排除整个扫描类别\n- `files`：排除指定文件的扫描\n- `patterns`：正则匹配排除行内容\n\n### 12. 动态沙箱执行扫描（新增）\n\n静态扫描只能看代码，恶意代码却可以通过**动态下载、加密载荷、条件触发**绕过。动态沙箱在**隔离环境中实际运行** Skill 脚本，捕获运行时行为，检出静态扫描完全无法发现的恶意动作。\n\n**隔离后端（自动选择）：**\n\n| 后端 | 说明 | 隔离手段 |\n|------|------|---------|\n| Docker | 首选，行为捕获最完整 | `--network=none` 默认断网、只读挂载、CPU/内存/PID 限额、`--cap-drop ALL` |\n| Windows Sandbox | Win10/11 专业版可用 | 运行时生成 `.wsb` 配置（断网 + 只读映射） |\n| 降级模式 | 无隔离环境时 | 仅做静态扫描并提示「建议在沙箱环境中进行动态扫描」 |\n\n**行为捕获维度：**\n\n- 网络请求（目标 IP / 域名 / 端口）\n- 文件读写（路径 / 模式）\n- 进程创建（命令行）\n- 环境变量读取\n- 动态代码执行（exec / compile）\n\n**异常行为标记：**\n\n| 异常行为 | 严重度 |\n|---------|--------|\n| 访问敏感路径（`~/.ssh`、`/etc/passwd`、`.aws`、`id_rsa` 等） | 🔴 严重 |\n| 网络活动 + 动态执行同时出现（疑似下载并执行远程载荷） | 🔴 严重 |\n| 向未知目标外联（非白名单域名） | 🟠 高危 |\n| 创建 shell / 解释器进程（bash、sh、powershell、cmd） | 🟠 高危 |\n| 读取疑似密钥环境变量（token、secret、apikey 等） | 🟡 中等 |\n\n**网络隔离与白名单：** 沙箱默认**完全断网**；如脚本确需联网，可用 `--allow-domain` 逐个放行可信域名，其余外联一律标记为高危。\n\n> ⚠️ 动态扫描为**可选功能**，需显式加 `--dynamic` 开启。若本机无 Docker / Windows Sandbox，工具会自动降级为纯静态扫描并给出提示，不会报错。\n\n### 13. 规则引擎 + YAML 规则包（新增）\n\nv3.2.0 起，6 类静态规则从硬编码重构为 YAML 规则包（`rules/*.yaml`），新增规则只需加 YAML 文件，无需修改代码。\n\n**规则包结构：**\n\n```\nscripts/rules/\n├── prompt_injection.yaml      # 提示注入规则（15 条正则）\n├── command_injection.yaml     # 命令注入规则（8 条正则）\n├── ssrf.yaml                  # SSRF/内网访问（11 条正则）\n├── credential_leak.yaml       # 凭证外泄（10 条正则）\n├── path_traversal.yaml        # 路径遍历（12 条正则）\n└── dangerous_functions.yaml   # 危险函数（11 条正则）\n```\n\n**YAML 文件格式示例：**\n```yaml\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\npatterns:\n  - 'ignore previous instructions'\n  - 'system prompt override'\n  - 'jailbreak'\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n```\n\n**扩展方式：** 在 `rules/` 目录新增 `.yaml` 文件即可，工具自动加载。零依赖 YAML 解析（自研轻量实现，不依赖 PyYAML）。\n\n### 14. eBPF/ETW 系统级行为捕获（新增）\n\nv3.2.0 在沙箱 5 维行为捕获基础上，新增内核级系统调用监控，覆盖应用层无法看到的底层行为。\n\n| 后端 | 平台 | 要求 | 捕获内容 |\n|------|------|------|---------|\n| eBPF (bcc) | Linux | root + bcc 安装 | syscall：connect/send/recv、open/write、fork/exec、chmod/chown、uname/gethostname |\n| ETW | Windows | 管理员权限 | syscall：文件操作、进程创建、网络活动 |\n| 降级模式 | 无 eBPF/ETW | 自动提示「系统级行为捕获不可用」 |\n\n### 15. 提示注入 ML 语义检测（新增）\n\nv3.2.0 引入 ML 语义模型检测提示注入，降低正则匹配的绕过率。\n\n| 检测模式 | 触发条件 | 说明 |\n|---------|---------|------|\n| ONNX 语义模型 | `~/.workbuddy/models/prompt_injection.onnx` 存在 | 本地推理，离线可用 |\n| 正则降级 | ONNX 模型不可用时自动回退 | 20 条正则规则（含中文） |\n\n**性能：** 结果缓存（1 小时 TTL）+ 模型懒加载，不拖慢扫描。\n\n### 16. 轻量 SAST 污点追踪（新增）\n\nv3.3.0 引入受限数据流分析，将告警从字符串匹配升级为 source→sink 证据链。\n\n| 语言 | 分析方式 | 覆盖 |\n|------|---------|------|\n| Python | AST 解析（import/assign/attribute/call 节点追踪） | eval/exec/os.system/subprocess/pickle/yaml.load/open/file.write |\n| JS/TS | 词法近似（变量赋值+属性访问追踪） | eval/exec/child_process/innerHTML/document.write/db.query |\n| 其他 | 降级为模式匹配，标注「分析深度: 模式匹配」 | 通用危险函数 |\n\n**source 定义：** `input()`、`sys.argv`、`os.environ`、`requests.get()`、`req.body`、`process.argv`、`document.cookie` 等用户输入/环境变量/网络响应。\n\n**降误报机制：** 模式命中但无完整 source→sink 传播链时，降为 ⚪ info 级（`taint_sink_only`），避免误报。\n\n### 17. 社区规则扩展（新增）\n\nv3.3.0 支持加载第三方 YAML 规则包，经 schema 校验后纳入扫描。\n\n| 能力 | 说明 |\n|------|------|\n| Schema 校验 | 必填字段、类型检查、正则合法性、枚举值校验 |\n| 来源记录 | 加载时自动附加 `_source`（文件路径）和 `_loaded_at`（时间戳） |\n| 签名验证 | 可选 HMAC-SHA256 签名（`# signature: <hex>` 注释），防篡改 |\n| 报告区分 | 官方规则与社区规则在报告中分开统计（`community_` 前缀） |\n\n**加载方式：** `--community-rules <目录路径>`，目录下放 `.yaml` 文件即可。\n\n### 18. 健康度与合规检查合并（新增）\n\nv3.3.0 将质量评分（SKILL.md 完整性 8 项）与结构检查（文件数/大小/README）合并为「健康度」模块统一评分，权限审计+健康度统一挂「合规性检查」一个出口。\n\n| 合并模块 | 包含 | 输出类别 |\n|---------|------|---------|\n| 健康度 | 质量评分（8 项）+ 结构检查（3 项） | `health_quality` / `health_structure` |\n| 合规性 | 健康度 + 权限审计 | `compliance_permission` + 健康度全部 |\n\n**好处：** 报告结构更清晰，旧版「质量评分」「结构检查」「权限审计」三个独立模块合并为「合规性检查」一个入口。\n\n### 19. OSV.dev 离线数据包接入（新增）\n\nv3.4.0 将 OSV.dev 官方导出包（按 PyPI / npm 生态过滤）周期下载并合并进已有的三级缓存（7 天全量 + 每日增量 + 离线降级），依赖覆盖从硬编码 26 包跃升到**全生态**，且**全程零密钥**（纯 HTTPS 下载，无需任何 API key）。\n\n| 项 | 说明 |\n|----|------|\n| 数据来源 | OSV 公开导出包（PyPI / npm），无鉴权 |\n| 缓存位置 | `~/.workbuddy/osv_offline_cache/`（仓库外，不污染 skill 包） |\n| 刷新策略 | 索引超过 7 天或 `--refresh-osv` 时联网重建，其余走离线 |\n| 匹配粒度 | 按锁定文件**版本区间**精确匹配（非包名级） |\n| 离线降级 | 无网络时用最近快照，报告中标注 `data_point`（数据时点） |\n\n**性能：** 索引仅构建一次（周期缓存），扫描时为纯内存字典查询；导出包体积大但存于缓存目录，不拖慢扫描。\n\n### 20. 锁文件深度解析（新增）\n\nv3.4.0 新增 `package-lock.json` / `poetry.lock` 两类锁文件解析器（原有 `requirements.txt` 升级），自动展开**传递依赖全树**（lock 文件天然含完整依赖图），扫描匹配从「包名级」升级到「版本区间级」。\n\n| 解析器 | 生态 | 传递依赖 | approx |\n|--------|------|---------|--------|\n| requirements.txt | PyPI | 仅直接依赖 | 标注 `approx`（无 lock 时近似） |\n| package-lock.json | npm | 全树（lock 内含） | 精确 |\n| poetry.lock | PyPI | 全树（lock 内含） | 精确 |\n| package.json / pyproject.toml | npm / PyPI | 仅直接依赖 | 标注 `approx` |\n\n**好处：** 有了 lock 文件即可精确判定「某版本是否落在漏洞影响区间」，大幅降低无版本信息导致的误报；无 lock 时退化为直接依赖 + 近似匹配并明确标注 `approx`。\n\n## 使用方法\n\n### 基本用法（命令行）\n\n```bash\n# 扫描一个 Skill 目录（文本输出）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n\n# 生成 JSON 报告\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format json\n\n# 生成 HTML 报告并保存为文件\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format html -o report.html\n\n# 跳过更新检查\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --skip-update\n\n# 开启动态沙箱执行扫描（需 Docker 或 Windows Sandbox）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic\n\n# 动态扫描 + 放行白名单域名 + 自定义超时（秒）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic --allow-domain api.github.com --sandbox-timeout 60\n\n# 启用供应链风险分析\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain\n\n# 启用恶意 Skill 指纹匹配\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --malicious-db\n\n# 启用全局排除配置（.nosec.yml）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --global-exclude\n\n# 同时启用所有高级功能\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --malicious-db --global-exclude\n\n# 启用 YAML 规则引擎（6 类规则可热插拔）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine\n\n# 启用 ML 提示注入语义检测（ONNX + 正则降级）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --ml-detect\n\n# 启用 eBPF/ETW 系统级行为捕获\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --syscall-monitor\n\n# v3.2.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine --ml-detect --syscall-monitor --malicious-db --global-exclude --supply-chain --dynamic\n\n# v3.3.0 污点追踪\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking\n\n# v3.3.0 社区规则\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --community-rules \"D:\\path\\to\\community-rules\"\n\n# v3.3.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking --community-rules \"D:\\path\\to\\community-rules\" --rule-engine --ml-detect --malicious-db --global-exclude --supply-chain\n\n# v3.4.0 OSV 离线数据包强制刷新索引（联网重建全生态 CVE 索引）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --refresh-osv\n\n# v3.4.0 全功能模式（含锁文件版本区间匹配）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking --community-rules \"D:\\path\\to\\community-rules\" --rule-engine --ml-detect --malicious-db --global-exclude --supply-chain --refresh-osv\n```\n\n### 参数快查\n\n| 参数 | 说明 | 默认 |\n|------|------|------|\n| `skill_path` | 待扫描的 Skill 目录（必填） | — |\n| `--format` | 输出格式：`text` / `json` / `html` | `text` |\n| `-o, --output` | 报告输出文件路径 | 打印到终端 |\n| `--skip-update` | 跳过更新检查 | 关闭 |\n| `--dynamic` | 开启动态沙箱执行扫描 | 关闭 |\n| `--allow-domain` | 放行白名单域名（可重复） | 无（默认断网） |\n| `--sandbox-timeout` | 沙箱执行超时（秒） | 30 |\n| `--supply-chain` | 启用供应链风险分析 | 关闭 |\n| `--malicious-db` | 启用恶意 Skill 指纹匹配（341 条） | 关闭 |\n| `--global-exclude` | 启用 .nosec.yml 全局排除配置 | 关闭 |\n| `--rule-engine` | 启用 YAML 规则引擎（6 类规则包） | 关闭 |\n| `--syscall-monitor` | 启用 eBPF/ETW 系统级行为捕获 | 关闭 |\n| `--ml-detect` | 启用 ML 提示注入语义检测 | 关闭 |\n| `--taint-tracking` | 启用污点追踪（Python AST + JS 词法，source→sink 证据链） | 关闭 |\n| `--community-rules` | 加载第三方社区规则包目录（schema 校验 + 来源记录） | 关闭 |\n| `--refresh-osv` | 强制刷新 OSV 离线数据包索引（v3.4.0，联网重建全生态 CVE 索引） | 关闭 |\n\n### 在 WorkBuddy 中触发\n\n直接告诉 WorkBuddy，触发词覆盖面广：\n\n- **「安全审计」+ 技能路径** → `帮我安全审计 D:\\skill\\my-skill`\n- **「扫描」+ Skill** → `扫描这个 skill 有没有安全问题`\n- **「发布前检查」+ 技能名** → `发布前帮我检查一遍 my-skill`\n- **「安全检测」+ 路径** → `帮我对这个路径做一份安全检测`\n- **「代码审计」+ 文件夹** → `对 D:\\skill\\project 做代码审计`\n- **「Skill 安全吗」** → `这个 skill 安全吗`\n\n## 输出说明\n\n### 评分等级\n\n评分从 100 分开始扣分，不同等级对应不同发布建议：\n\n| 等级 | 分数区间 | 发布建议 | 含义 |\n|------|---------|---------|------|\n| 🟢 A | 90-100 | ✅ 可安全发布 | 优秀 |\n| 🟣 B | 75-89 | ⚠️ 建议修复后发布 | 良好 |\n| 🟡 C | 60-74 | ⚠️ 需要修复 | 一般 |\n| 🟠 D | 40-59 | ❌ 不建议发布 | 较差 |\n| 🔴 F | 0-39 | ❌ 禁止发布 | 危险 |\n\n### 严重度分类\n\n- 🔴 **严重**（-25 分/个）：提示注入、命令注入、凭证外泄 → 必须立即修复\n- 🟠 **高危**（-15 分/个）：SSRF、路径遍历、危险权限组合 → 建议尽快修复\n- 🟡 **中等**（-8 分/个）：危险函数、权限过度授权、description 过短 → 建议修复\n- 🔵 **低危**（-3 分/个）：命名规范问题、缺少错误处理说明 → 建议优化\n- ⚪ **信息**（0 分）：更新版本提示、参考信息 → 仅供参考\n\n### 返回码（for CI/CD 集成）\n\n| 退出码 | 含义 | CI 行为建议 |\n|--------|------|------------|\n| 0 | 无问题或仅低危 | ✅ 通过 |\n| 1 | 存在中等问题 | ⚠️ 警告 |\n| 2 | 存在严重/高危问题 | ❌ 失败，阻断发布 |\n\n## 扫描排除规则\n\n以下内容将被自动跳过，不参与扫描，不计入风险：\n\n### 自动排除的文件类型\n\n1. **可执行/脚本**：`.bat`、`.cmd`、`.ps1`、`.vbs`、`.exe`、`.dll`、`.msi`、`.sh`、`.com`、`.scr`、`.hta`、`.reg`\n2. **Office 文档**：`.docx`、`.xlsx`、`.pptx`、`.doc`、`.xls`、`.ppt`、`.xlsm`、`.docm`、`.pptm`\n3. **压缩包/镜像**：`.iso`、`.dmg`、`.zip`、`.rar`、`.7z`、`.tar`、`.gz`、`.apk`、`.jar`\n4. **缓存/隐藏**：`.DS_Store`、`.pyc`、`.pyo`、`.so`、`.swp`、`.env`、`.log`、`.tmp`\n\n### 自动排除的目录\n\n`__pycache__`、`.git`、`.venv`、`.pytest_cache`、`node_modules`、`.idea`、`.vscode`\n\n## 扫描示例\n\n```\n============================================================\n  Skill Security Audit Report\n============================================================\n  Skill: my-cool-skill\n  Path: D:\\skill\\my-cool-skill\n  Time: 2026-07-13T14:32:10\n  Files: 15 scanned, 2 skipped\n============================================================\n\n  Score: 82/100 (Grade: B)\n  Found 2 medium issues.\n\n  ──────────────────────────────────────────────────────────\n  [MED]   quality_check     SKILL.md         Missing version field\n  [MED]   quality_check     SKILL.md         No error handling mentioned\n  ──────────────────────────────────────────────────────────\n\n  Fix suggestions:\n    [quality_check] Add version field in frontmatter\n    [quality_check] Add error handling docs in SKILL.md\n\n  Feedback: njskills@agent.qq.com\n============================================================\n```\n\n## 常见问答（FAQ）\n\n**Q: 扫描会很慢吗？需要联网吗？**\nA: 扫描本身不会慢。工具会自动检测你的 CPU 核心数和可用内存，动态调整并行数（1-8 线程），在本地离线完成扫描，不联网也不会影响结果。可选的更新检查（24 小时缓存）可以通过 `--skip-update` 关闭。\n\n**Q: 扫描结果为 F 等级怎么办？**\nA: 请按照输出的修复建议逐一修复问题，特别是严重和高危问题。修复后可重新扫描确认分数是否提升。常见修复步骤：\n1. 移除所有硬编码的敏感信息（API Key、Password 等）→ 添加到 `.env` 或环境变量\n2. 避免使用 `eval()`/`exec()`/`os.system()` → 使用 `subprocess.run()` 并关闭 `shell=True`\n3. 确保所有依赖升级到安全版本（见报告中建议的版本号）\n4. 清理硬编码的内网 IP，改用域名或环境变量\n\n**Q: 报告说发现了命令注入，但我只是在说明文档中写了代码示例？**\nA: 代码示例中如果包含了 curl、wget、shell 等相关关键词，会被模式匹配命中。这是预期行为——**请在代码示例末尾添加 `# nosec` 注释**即可跳过该行。\n\n**Q: 这个工具支持扫描 Python 以外的文件吗？**\nA: 支持。除了 `.py` 文件，还可以扫描 `.js`、`.ts`、`.json`、`.yaml`、`.md`、`.html` 等所有文本格式文件。Office 文档和可执行文件会被自动跳过。\n\n**Q: 检测出误报怎么办？**\nA: 主要有两种方式：\n1. **临时方案**：在代码行末尾添加 `# nosec` 注释\n2. **永久方案**：联系 njskills@agent.qq.com 提供误报规则详情（文件路径和匹配模式），我们会优化规则\n\n**Q: 用于公司 CI/CD 流水线，需要安装什么依赖吗？**\nA: 不需要。本工具只需要 **Python 3.8+** 标准库，无第三方依赖。可集成到 GitHub Actions、GitLab CI、Jenkins 等任意 CI 平台。（注：动态扫描 `--dynamic` 需额外具备 Docker 或 Windows Sandbox 环境。）\n\n**Q: 我没有 Docker，能用动态扫描吗？**\nA: 可以直接加 `--dynamic`，工具会自动探测环境。若无 Docker / Windows Sandbox，会自动降级为纯静态扫描并提示「建议在沙箱环境中进行动态扫描」，不会报错。想获得完整行为捕获，推荐安装 Docker Desktop。\n\n**Q: 动态扫描会不会有风险？会不会拖慢我电脑？**\nA: 动态扫描在隔离环境中运行：Docker 用 `--network=none` 断网 + 只读挂载 + CPU/内存/PID 限额；Windows Sandbox 断网 + 只读映射。默认单次超时 30 秒，CPU 上限自动取核心数的一半，不会拖慢日常使用。被扫描代码无法接触你的真实文件系统和网络。\n\n**Q: 恶意 Skill 指纹库能覆盖未知的新型恶意 Skill 吗？**\nA: 指纹库覆盖 341 条已知恶意 Skill，对于已知的恶意包（如 PyPI 恶意依赖、npm 钓鱼包）能实现 100% 拦截。但攻击者如果修改代码、混淆变量名，SHA256 指纹会变化，此时需要结合静态扫描的规则（提示注入、命令注入等）来发现。建议同时开启 `--malicious-db` 和静态扫描，双重保障。\n\n**Q: CVE 离线缓存能维持多久？无网环境能用吗？**\nA: 7 天全量缓存 + 每日增量更新。无网络环境下，工具自动使用本地缓存，CVE 漏洞扫描功能仍可正常使用（使用最近一次缓存数据）。API 恢复后，新查询到的 CVE 结果会自动写回缓存。缓存文件存放在 `~/.workbuddy/cve_cache/`。\n\n**Q: `.nosec.yml` 和 `# nosec` 注释有什么区别？哪个优先？**\nA: `# nosec` 是单行临时排除，`.nosec.yml` 是团队级全局配置，支持按类别、文件路径、正则模式批量排除。**过滤顺序**：`# nosec` 行级排除先应用，然后是 `.nosec.yml` 全局排除。建议团队统一使用 `.nosec.yml`，个人调试用 `# nosec`。\n\n**Q: 规则引擎和原来的静态扫描有什么区别？**\nA: 规则引擎将 6 类规则从代码硬编码重构为 YAML 文件（`rules/*.yaml`），新增规则只需添加 YAML 文件，无需修改 `--rule-engine` 开启。未开启时自动回退到原有硬编码规则，完全兼容。\n\n**Q: ML 提示注入检测需要联网吗？需要安装额外依赖吗？**\nA: 不需要联网，不需要额外依赖。ML 检测使用 ONNX Runtime（纯 CPU 推理），模型存放在 `~/.workbuddy/models/prompt_injection.onnx`。无模型时自动降级到正则规则包（含 20 条规则，含中文），零外部依赖。\n\n**Q: eBPF/ETW 系统级捕获需要什么权限？**\nA: Linux 需要 root 权限 + bcc 框架；Windows 需要管理员权限。无权限时自动降级，提示「系统级行为捕获不可用」，不影响其他扫描功能。\n\n**Q: 污点追踪和原来的静态扫描有什么区别？**\nA: 污点追踪在模式匹配基础上增加了数据流分析——不只看代码中是否存在危险函数，还追踪用户输入/环境变量/网络响应（source）是否流经赋值/拼接/属性访问等路径最终到达危险函数（sink）。有完整 source→sink 传播链的报高危（`taint_chain`），仅有 sink 调用但无明确 source 的降为 info 级（`taint_sink_only`），从而降低误报。\n\n**Q: 社区规则和官方规则包有什么区别？**\nA: 官方规则包（`scripts/rules/*.yaml`）内置在 Skill 目录中，由开发者维护。社区规则通过 `--community-rules <目录>` 从外部加载，每个 YAML 文件经过 schema 校验（必填字段、类型检查、正则合法性），加载后记录来源（`_source`），报告中 `community_` 前缀与官方规则分开统计。责任边界清晰。\n\n**Q: 健康度与合规检查合并后，旧版报告还能看吗？**\nA: 完全兼容。旧版的「质量评分」「结构检查」「权限审计」三个模块在 v3.3.0 中合并为「合规性检查」一个出口，输出类别从 `quality_check`/`structure_check`/`permission_audit` 统一为 `health_quality`/`health_structure`/`compliance_permission`，报告结构更清晰，不再重复。\n\n**Q: v3.4.0 的 OSV 离线数据包需要联网和 API Key 吗？**\nA: 不需要 API Key。索引由 OSV 公开导出包（PyPI / npm）周期下载构建，纯 HTTPS、**零密钥**。索引超过 7 天或加 `--refresh-osv` 时联网重建，其余扫描全部走本地索引，无网络也能用（使用最近快照，并在报告中用 `data_point` 标注数据时点）。\n\n**Q: 锁文件解析有什么用？没有 lock 文件会怎样？**\nA: 有 `package-lock.json` / `poetry.lock` 时，工具展开完整传递依赖树并按「版本区间」精确判定某版本是否落在漏洞影响区间，误报显著降低。仅有 `requirements.txt` / `package.json`（无 lock）时退化为直接依赖 + 近似匹配，并在结果中标注 `approx`，提示你补充 lock 文件以获得精确结论。\n\n## 安全声明\n\n- **默认只做静态分析，不会执行被扫描的代码**（静态模式仅读取文件，不写入）\n- **动态扫描（`--dynamic`）需显式开启**，且仅在隔离环境（Docker / Windows Sandbox）中执行被扫描代码，沙箱**默认断网**、只读挂载、CPU/内存限额，绝不在宿主机直接运行\n- **不会上传任何文件内容到外部服务器**\n- **更新检查仅获取 GitHub Release 标题，不下载任何附件**\n- **所有扫描在本地完成，保护你的代码隐私**\n- Windows Sandbox 的 `.wsb` 配置在运行时动态生成到临时目录，用完即删，不写入 Skill 仓库\n- `.nosec.yml` 全局排除配置仅影响本团队扫描流程，不会降低安全性；被排除的行仍可在完整报告中查看（`--format json` 包含 `excluded` 字段）\n\n## 反馈与支持\n\n如有误报反馈、规则改进建议或功能需求，欢迎联系：\n\n📧 **njskills@agent.qq.com**\n\n你的反馈将直接帮助我们升级规则库，完善检测能力。\n\n## 更新日志\n\n| v3.4.0 | 2026-09-11 | 增加：OSV.dev 离线数据包接入（scripts/osv_offline.py），周期下载 PyPI/npm 导出包并合并进三级缓存，依赖覆盖从 26 包升到全生态，零密钥、离线优先、无网络时标注数据时点；增加：锁文件深度解析（package-lock.json 与 poetry.lock 两类新增解析器 + requirements.txt 升级），传递依赖全树展开，匹配从包名级升级到版本区间级，无 lock 时近似匹配并标注 approx；增加：--refresh-osv 命令行参数（强制刷新 OSV 索引）；优化：supply_chain.py 漏洞查询改为离线优先（OSV 索引 → OSV API → NVD → 本地 26 条三级降级），report meta 区新增 osv_offline 索引时点统计 |\n| v3.3.0 | 2026-08-24 | 增加：轻量 SAST 污点追踪（taint_tracker.py），Python AST + JS 词法近似，source→sink 证据链降误报（无完整链降 info）；增加：社区规则扩展（community_rules.py），第三方 YAML 规则包 schema 校验 + 来源记录 + HMAC-SHA256 签名验证，官方/社区规则报告分开统计；增加：健康度与合规检查合并（scan_health + scan_compliance），质量评分+结构检查统一为健康度模块，权限审计+健康度统一挂合规性检查出口；增加：--taint-tracking 和 --community-rules <path> 两个 CLI 参数；优化：report meta 区新增 taint_tracking / community_rules 维度统计 |\n| v3.2.0 | 2026-08-17 | 增加：规则引擎模块（scripts/rules_engine.py），将 6 类静态规则从硬编码重构为 YAML 规则包（rules/*.yaml），支持热插拔扩展，新增规则只需加 YAML 文件不改代码；增加：scripts/rules/ 目录包含 6 个规则包（prompt_injection/command_injection/ssrf/credential_leak/path_traversal/dangerous_functions），共 67 条正则；增加：系统级行为捕获模块（scripts/sandbox/system_monitor.py），支持 eBPF（Linux）/ ETW（Windows）内核级 syscall 监控，无 eBPF/ETW 时自动降级；增加：ML 提示注入语义检测（scripts/sandbox/ml_detect.py），ONNX 模型优先 + 正则降级双模式，含中文规则与结果缓存；增加：scan_rule_engine()、scan_ml_prompt_injection()、scan_syscall_monitor() 三个扫描方法；增加：--rule-engine、--ml-detect、--syscall-monitor 三个 CLI 参数；增加：report meta 区新增 rule_engine / ml_detect / syscall_monitor 维度统计 |\n| v3.1.0 | 2026-08-07 | 增加：实时恶意 Skill 库同步模块，内置 341 条 SHA256 指纹实现 100% 已知恶意 skill 拦截；增加：CVE 离线缓存（7 天全量 + 每日增量），无网络环境仍可扫描依赖漏洞；增加：全局排除配置（.nosec.yml），支持按类别/文件/正则模式批量排除误报；增加：--malicious-db 和 --global-exclude 两个命令行参数；优化：add_result() 集成全局排除过滤逻辑 |\n| v3.0.0 | 2026-08-01 | 增加：供应链风险分析模块，支持依赖树扫描、typo-squatting 钓鱼包检测、维护状态评估（僵尸包识别）、许可证合规检查；增加：CVE 数据库从 26 条手动维护升级为 OSV/NVD API 自动拉取并每日缓存更新；增加：ci_templates/ 目录提供 GitHub Action 与 GitLab CI 开箱即用模板；增加：SARIF 2.1.0 格式输出支持 GitHub Code Scanning；增加：PR 自动评论扫描结果功能；增加：质量门禁机制（默认 70 分阈值阻止合并）；增加：--supply-chain 与 --format sarif 命令行参数；优化：audit.py 报告 meta 区新增 supply_chain 维度统计；优化：依赖解析器支持 requirements.txt / package.json / pyproject.toml 三种格式 |\n| v2.0.0 | 2026-07-22 | 增加：动态沙箱执行扫描模块，在 Docker 或 Windows Sandbox 隔离环境中实际运行脚本捕获运行时行为；增加：网络请求、文件读写、进程创建、环境变量读取、动态代码执行五类运行时行为捕获；增加：敏感路径访问、未知目标外联、下载并执行远程载荷、shell 进程创建、密钥环境变量读取五类异常行为标记；增加：沙箱默认断网与 --allow-domain 域名白名单机制；增加：--dynamic、--allow-domain、--sandbox-timeout 三个命令行参数；增加：无 Docker/Windows Sandbox 时自动降级为纯静态扫描并给出提示；优化：报告 meta 区展示动态扫描后端与行为统计 |\n| v1.3.0 | 2026-07-13 | 修复：base64 编码的命令注入模式中有两个模式解码后正则表达式括号不匹配导致扫描报错；修复：CVE 列表中 protobuf 的 CVE 编号错误；增加：24 小时缓存的更新检查机制避免频繁联网请求；增加：# nosec 内联注释排除规则降低误报；优化：依赖库覆盖范围从 17 个扩展到 26 个常见高危依赖；优化：错误信息改为更友好的中文提示；优化：扫描输出显示优化减少信息密度过高的问题；优化：新增详细说明文档和常见问答\n| v1.2.0 | 2026-07-13 | 增加：硬件感知并行度自动调整功能，根据 CPU/内存动态分配线程数；增加：更新检查功能自动提示新版本；优化：依赖审计支持 pyproject.toml 和 Pipfile 格式；修复：凭证外泄检测正则表达式中转义字符导致扫描崩溃的问题\n| v1.1.0 | 2026-07-13 | 增加：依赖漏洞审计模块；增加：质量评分维度（包含 SKILL.md 完整性检查）；优化：评分算法改为按严重度区分扣分权重；优化：HTML 报告增加统计卡片和响应式布局\n| v1.0.0 | 2026-07-13 | 初始版本发布，包含静态扫描、权限审计、结构检查、JSON/HTML 报告生成\n\nFile v3.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn7chdrwbdhaqkwajcyhtfvjx989ddb1\",\n  \"slug\": \"skill-security-checker\",\n  \"version\": \"3.4.0\",\n  \"publishedAt\": 1789132231276\n}\n\nFile v3.4.0:references/scan-patterns.md\n\n# 扫描规则参考文档\n\n本文件详细定义了 Skill Security 使用的检测逻辑。\n\n## 一、提示注入检测\n\n检测试图覆盖或绕过系统指令的恶意提示。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配「忽略先前/上面/所有」+「指令/提示/规则」组合 | 尝试让 AI 忽略原始系统指令 |\n| 匹配「系统提示」+「覆盖/替换/忽略/绕过」组合 | 直接覆盖系统提示 |\n| 匹配「你现在是...」 | 强制 AI 扮演新角色绕过限制 |\n| 匹配「越狱」类关键词 | 触发越狱模式 |\n| 匹配「做任何事」模式 | 解除限制模式 |\n| 匹配「假装你是」 | 假装成其他身份 |\n| 匹配「角色扮演为」 | 绕过角色限制 |\n| 匹配「覆盖/禁用」+「安全/过滤/限制」 | 禁用安全过滤 |\n| 匹配「忘记一切」 | 让 AI 忘记所有指令 |\n| 匹配「重新开始」 | 重置指令 |\n| 匹配「重置指令」 | 重置指令 |\n\n## 二、命令注入检测\n\n检测通过用户输入执行系统命令的代码。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 curl/wget 管道连接 shell | 从远程下载脚本并执行 |\n| 匹配 fetch+eval 组合 | 执行远程代码 |\n| 匹配 eval/exec/system + $_GET/$_POST | PHP 命令注入 |\n| 匹配 passthru/shell_exec | PHP 命令执行 |\n| 匹配反引号执行 curl/wget/nc | 命令替换执行 |\n| 匹配 $() 内执行 curl/wget/nc | 命令替换执行 |\n\n## 三、SSRF/内网访问\n\n检测硬编码的内网地址。\n\n| 地址段 | 说明 |\n|--------|------|\n| 127.0.0.1 | 本地回环 |\n| 10.0.0.0/8 | 私有网络 A 类 |\n| 172.16.0.0/12 | 私有网络 B 类 |\n| 192.168.0.0/16 | 私有网络 C 类 |\n| fc00::/7 | IPv6 私有地址 |\n| fe80::/10 | IPv6 链路本地 |\n| 0.0.0.0 | 全地址监听 |\n\n## 四、凭证外泄\n\n检测硬编码的敏感凭证。\n\n| 检测类型 | 说明 |\n|---------|------|\n| API Key | 20位以上字母数字组合 |\n| Secret Key | 20位以上字母数字组合 |\n| Access Token | 20位以上字母数字组合 |\n| Private Key | 40位以上 base64 字符 |\n| Password | 8位以上明文密码 |\n| Bearer Token | Authorization 头 |\n| AWS Access Key | AKID 开头 |\n| GitHub Token | ghp_/gho_ 开头 |\n| OpenAI Key | sk- 开头 |\n| 阿里云 AccessKey | AKID 开头 |\n\n## 五、路径遍历\n\n检测 ../ 等模式访问预期外的文件系统路径。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 ../ 或 ..\\ | 目录穿越 |\n| 匹配 URL 编码 %2f%2e%2e | 编码绕过 |\n| 匹配 /etc/passwd 或 /etc/shadow | 系统文件访问 |\n| 匹配 c:\\windows\\ | Windows 系统目录 |\n\n## 六、危险函数\n\n| 函数 | 风险 |\n|------|------|\n| eval() | 执行任意代码 |\n| exec() | 执行任意代码 |\n| os.system() | 执行系统命令 |\n| subprocess(shell=True) | 命令注入 |\n| pickle.load() | 反序列化漏洞 |\n| yaml.load() (无 Loader) | 反序列化漏洞 |\n| marshal.load() | 执行字节码 |\n\n## 七、已知漏洞依赖\n\n当检测到以下依赖版本低于安全版本时发出告警：\n\n| 依赖包 | 安全版本 | 主要 CVE |\n|--------|----------|----------|\n| requests | ≥2.32.0 | CVE-2024-35195 |\n| urllib3 | ≥2.2.0 | CVE-2024-37891 |\n| flask | ≥3.0.0 | CVE-2023-30861 |\n| django | ≥4.2.0 | 多个高危 |\n| numpy | ≥1.22.0 | 缓冲区溢出 |\n| pillow | ≥10.0.0 | 多个 CVE |\n| pyyaml | ≥6.0 | CVE-2020-14343 |\n| jinja2 | ≥3.1.0 | CVE-2024-22416 |\n| cryptography | ≥42.0.0 | 安全修复 |\n| aiohttp | ≥3.9.0 | CVE-2024-23334 |\n| tqdm | ≥4.66.0 | CVE-2024-34062 |\n| setuptools | ≥65.5.0 | CVE-2022-40897 |\n| node-fetch | ≥2.6.7 | CVE-2022-0235 |\n| minimist | ≥1.2.6 | CVE-2021-44906 |\n| lodash | ≥4.17.21 | CVE-2021-23337 |\n| axios | ≥0.21.1 | CVE-2021-3749 |\n| express | ≥4.17.3 | 多个修复 |\n\n## 八、误报处理\n\n某些合法代码可能触发告警，属于正常误报场景：\n\n1. 文档/示例中包含攻击模式说明（应确保在注释或字符串中）\n2. 测试代码包含恶意 payload 样例\n3. 安全工具本身的检测规则\n4. 故意作为反例演示的代码\n\n对于确认的误报，可在代码行尾添加 `# nosec` 注释跳过检测。\n\n## 九、评分算法\n\n评分从 100 分开始扣分：\n\n| 严重度 | 扣分 |\n|--------|------|\n| 🔴 严重 | -25分/个 |\n| 🟠 高危 | -15分/个 |\n| 🟡 中等 | -8分/个 |\n| 🔵 低危 | -3分/个 |\n| ⚪ 信息 | 0分 |\n\n最低分数为 0。\n\n等级划分：\n\n| 分数 | 等级 | 发布建议 |\n|------|------|----------|\n| 90-100 | A | ✅ 可发布 |\n| 75-89 | B | ⚠️ 建议修复后发布 |\n| 60-74 | C | ⚠️ 需要修复 |\n| 40-59 | D | ❌ 不建议发布 |\n| 0-39 | F | ❌ 禁止发布 |\n\nFile v3.4.0:scripts/ci_templates/gitlab-ci.yml\n\nstages:\n  - security\n\nskill-security-scan:\n  stage: security\n  image: python:3.11-slim\n  script:\n    - python scripts/audit.py . --format json -o report.json --skip-update\n    - |\n      SCORE=$(python -c \"import json; print(json.load(open('report.json'))['score'])\")\n      echo \"Quality Score: $SCORE\"\n      if [ \"$SCORE\" -lt 70 ]; then\n        echo \"Score below threshold (70), failing.\"\n        exit 1\n      fi\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n    when: always\n  only:\n    - merge_requests\n    - main\n\nFile v3.4.0:scripts/ci_templates/skill-scan.yml\n\nname: Skill Security Scan\n\non:\n  push:\n    branches: [main, master]\n  pull_request:\n    branches: [main, master]\n\njobs:\n  security-scan:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      security-events: write\n      pull-requests: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.11'\n      - name: Run skill-security-checker\n        run: |\n          python scripts/audit.py . \\\n            --format sarif \\\n            -o sarif-output.sarif \\\n            --skip-update\n        continue-on-error: true\n      - name: Upload SARIF to GitHub Code Scanning\n        uses: github/codeql-action/upload-sarif@v3\n        if: always()\n        with:\n          sarif_file: sarif-output.sarif\n      - name: Gate on quality score\n        run: |\n          SCORE=$(python scripts/audit.py . --format json --skip-update \\\n                  | python -c \"import sys,json; print(json.load(sys.stdin)['score'])\")\n          echo \"Quality Score: $SCORE\"\n          if [ \"$SCORE\" -lt 70 ]; then\n            echo \"Score below threshold (70), failing.\"\n            exit 1\n          fi\n      - name: Comment PR with scan results\n        if: github.event_name == 'pull_request'\n        uses: actions/github-script@v7\n        with:\n          script: |\n            const fs = require('fs');\n            const report = JSON.parse(\n              fs.readFileSync('sarif-output.sarif', 'utf8')\n            );\n            const stats = report.runs[0]?.results?.length ?? 0;\n            const body = [\n              '## 🔒 Skill Security Scan',\n              '',\n              `Found **${stats}** issue(s).`,\n              '',\n              'Full details in the **Security → Code Scanning** tab.',\n            ].join('\\n');\n            github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: context.issue.number,\n              body: body,\n            });\n\nFile v3.4.0:scripts/rules/command_injection.yaml\n\nname: command_injection\ndisplay_name: 命令注入\nseverity: critical\ndescription: 检测 curl/wget 管道执行、反引号执行、$() shell 执行等风险\n\npatterns:\n  - 'exfiltrate\\('\n  - 'curl.*(sh|bash|cmd|powershell)'\n  - 'wget.*(sh|bash)'\n  - 'fetchhttp.*ival'\n  - 'passthru'\n  - 'shell_exec'\n  - '`.*(curl|wget|nc|bash|sh)`'\n  - '\\$\\(\\s*(curl|wget|nc|bash|sh)\\s*\\)'\n\nsuggestion: 避免运行时命令拼接，使用参数化调用（如 requests 库替代 curl）\nsource: static\n\nFile v3.4.0:scripts/rules/credential_leak.yaml\n\nname: credential_leak\ndisplay_name: 凭证外泄\nseverity: critical\ndescription: 检测硬编码 API Key、Token、Password、Bearer Token 等敏感信息泄露\n\npatterns:\n  - '(?i)(api[_-]?key|apikey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(secret[_-]?key|secretkey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(access[_-]?token|accesstoken)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(private[_-]?key|privatekey)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{40,}[\"\\']?'\n  - '(?i)(password|passwd|pwd)\\s*[:=]\\s*[\"\\'][^\"\\']{8,}[\"\\']'\n  - '(?i)bearer\\s+[a-z0-9\\-._~+/]+=*'\n  - '(?i)aws[_-]?(access[_-]?key[_-]?id|secret[_-]?access[_-]?key)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{20,}[\"\\']?'\n  - '(?i)gh[pousr]_[a-z0-9]{36,}'\n  - '(?i)sk-[a-z0-9]{48}'\n  - '(?i)AKID[a-z0-9]{32}'\n\nsuggestion: 立即轮换凭证！使用环境变量或密钥管理器存储敏感信息\nsource: static\n\nFile v3.4.0:scripts/rules/dangerous_functions.yaml\n\nname: dangerous_functions\ndisplay_name: 危险函数\nseverity: medium\ndescription: 检测 eval/exec/os.system/pickle.load 等危险函数调用\n\npatterns:\n  - '(?i)eval\\s*\\('\n  - '(?i)exec\\s*\\('\n  - '(?i)os\\.system\\s*\\('\n  - '(?i)subprocess\\.call\\s*\\(\\s*shell\\s*=\\s*True'\n  - '(?i)popen\\s*\\('\n  - '(?i)__import__\\s*\\('\n  - '(?i)compile\\s*\\('\n  - '(?i)input\\s*\\('\n  - '(?i)pickle\\.loads?\\s*\\('\n  - '(?i)yaml\\.load\\s*\\([^)]*\\)(?!.*Loader)'\n  - '(?i)marshal\\.loads?\\s*\\('\n\nsuggestion: 避免使用 eval/exec，改用 ast.literal_eval 或 json.loads；subprocess 关闭 shell=True\nsource: static\n\nFile v3.4.0:scripts/rules/path_traversal.yaml\n\nname: path_traversal\ndisplay_name: 路径遍历\nseverity: high\ndescription: 检测路径遍历攻击、敏感文件访问等风险\n\npatterns:\n  - '\\.\\./'\n  - '\\.\\.\\'' \n  - '\\.\\.\\%2[fF]'\n  - '\\.\\.%5[cC]'\n  - '%2[eE]%2[eE]%2[fF]'\n  - '%2[eE]%2[eE]/'\n  - '\\.\\./etc/passwd'\n  - '\\.\\./windows/system32'\n  - '/etc/passwd'\n  - '/etc/shadow'\n  - 'c:\\\\windows\\\\'\n  - 'c:/windows/'\n\nsuggestion: 避免直接拼接路径，使用 Pathlib 安全拼接；访问前验证路径是否在预期目录内\nsource: static\n\nFile v3.4.0:scripts/rules/prompt_injection.yaml\n\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\n\npatterns:\n  - 'ignore previous instructions'\n  - 'ignore above all'\n  - 'system prompt override'\n  - 'ignore all previous'\n  - 'you are now a'\n  - 'jailbreak'\n  - 'DAN mode'\n  - 'do anything now'\n  - 'pretend to be'\n  - 'override safety'\n  - 'disable safety'\n  - 'forget everything'\n  - 'roleplay as an'\n  - 'start over'\n  - 'reset instructions'\n\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n\nFile v3.4.0:scripts/rules/ssrf.yaml\n\nname: ssrf\ndisplay_name: SSRF/内网访问\nseverity: high\ndescription: 检测内网 IP 地址、localhost 访问等 SSRF 风险\n\npatterns:\n  - '127\\.0\\.0\\.1'\n  - 'localhost'\n  - '0\\.0\\.0\\.0'\n  - '10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}'\n  - '172\\.(1[6-9]|2\\d|3[01])\\.\\d{1,3}\\.\\d{1,3}'\n  - '192\\.168\\.\\d{1,3}\\.\\d{1,3}'\n  - '169\\.254\\.\\d{1,3}\\.\\d{1,3}'\n  - 'fc00:'\n  - 'fe80:'\n  - '\\[::1\\]'\n  - '\\[::ffff:127\\.0\\.0\\.1\\]'\n\nsuggestion: 避免硬编码内网 IP，改用域名或环境变量\nsource: static\n\nFile v3.4.0:skill-card.md\n\n## Description:\n\nSkill 安全审计扫描器 helps agents scan skill packages for security, dependency, permission, compliance, and CI risks and produce review reports and remediation guidance.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[fyniujin](https://clawhub.ai/user/fyniujin)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and security reviewers use this skill before publishing or adopting ClawHub, WorkBuddy, or SkillHub skills, including CI checks for static findings, dependency risks, permission issues, and compliance signals.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The scanner is marked suspicious because review evidence says flaws can break the promised scan boundary and sandbox network limits.\n\nMitigation: Treat findings as review-needed, run the tool as a low-privilege user, and avoid scanning untrusted packages from accounts or environments that expose secrets.\n\nRisk: Dynamic scanning and domain allowlisting can create a misleading sense of network isolation.\n\nMitigation: Use dynamic scanning only in an isolated environment, avoid treating --dynamic --allow-domain as a complete network allowlist, and prefer --skip-update when local-only operation is required.\n\nRisk: System-level monitoring may require root or administrator privileges.\n\nMitigation: Avoid root or administrator syscall monitoring unless the scan is performed in a separate isolated environment.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/fyniujin/skills/skill-security-checker)\n- [Publisher profile](https://clawhub.ai/user/fyniujin)\n- [扫描规则参考文档](artifact/references/scan-patterns.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Text, JSON, HTML, SARIF, and Markdown guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can generate report files and CI templates; dynamic scanning and network update behavior are optional.]\n\n## Skill Version(s):\n\n3.4.0 (source: server release metadata and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.3.0: 31 files, 79472 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (74676b), scripts/ci_templates/gitlab-ci.yml (528b), scripts/ci_templates/skill-scan.yml (2013b), scripts/community_rules.py (8337b), scripts/global_exclude.py (4170b), scripts/malicious_db.py (11168b), scripts/rules_engine.py (4142b), scripts/rules/__init__.py (0b), scripts/rules/command_injection.yaml (489b), scripts/rules/credential_leak.yaml (860b), scripts/rules/dangerous_functions.yaml (592b), scripts/rules/path_traversal.yaml (503b), scripts/rules/prompt_injection.yaml (609b), scripts/rules/ssrf.yaml (492b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/ml_detect.py (7043b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), scripts/sandbox/system_monitor.py (9281b), scripts/supply_chain.py (28689b), scripts/taint_tracker.py (14518b), skill-card.md (2606b), SKILL.md (31325b)\n\nFile v3.3.0:SKILL.md\n\n---\nname: skill-security-checker\ndescription: 'Skill Security — 安全审计扫描器，帮助你快速发现 Skill 中的安全风险。轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、CVE 离线缓存、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。'\nversion: 3.3.0\n---\n\n# Skill Security\n\n> 一键扫描 Skill 安全风险，发布前最后一道安全闸门。\n\n## 概述\n\n本工具用于对 **WorkBuddy / ClawHub / SkillHub** 平台上发布的安全技能进行全方位安全合规扫描。它能帮你快速找出代码中的安全漏洞、不安全的依赖项、过度授权的权限配置，并以直观的评分等级和修复建议输出结果。\n\n**适用场景：**\n\n- 发布 Skill 前的安全检查\n- 评估第三方 Skill 的安全性\n- CI/CD 流水线中的自动化审查\n- Skill 质量评估与改进\n\n## 核心功能\n\n### 1. 静态扫描\n\n检测 Skill 文件中的安全漏洞：\n\n| 风险类型 | 检测内容 | 严重度 |\n|---------|---------|--------|\n| 提示注入 | 越狱指令、\"忽略原始指令\"、\"覆盖系统提示\"等文本 | 🔴 严重 |\n| 命令注入 | curl/wget 管道执行、反引号替换、$() 中执行 shell | 🔴 严重 |\n| SSRF/内网访问 | `127.0.0.1`、`10.x.x.x`、`192.168.x.x` | 🟠 高危 |\n| 凭证外泄 | 硬编码 API Key、Token、Password、Bearer Token | 🔴 严重 |\n| 路径遍历 | `../`、URL 编码绕过、绝对路径访问 | 🟠 高危 |\n| 危险函数 | `eval()`、`exec()`、`os.system()`、`pickle.load()` | 🟡 中等 |\n\n### 2. 依赖漏洞审计\n\n扫描 `requirements.txt`、`package.json`、`Pipfile`、`pyproject.toml` 等依赖文件，与内置的已知 CVE 漏洞库比对。\n\n目前覆盖 **26** 个常见高危依赖的已知漏洞：\n`requests`、`urllib3`、`flask`、`django`、`numpy`、`pillow`、`pyyaml`、`jinja2`、`cryptography`、`aiohttp`、`tqdm`、`setuptools`、`node-fetch`、`minimist`、`lodash`、`axios`、`express`、`vue`、`react`、`webpack`、`moment`、`npm`、`tough-cookie`、`word-wrap`、`protobuf`、`eslint`\n\n### 3. 权限审计\n\n检查 `allowed-tools` 声明是否有过度授权：\n\n- 声明了 Bash 但 description 中无对应使用场景 → 🟡 中等告警\n- Bash + Write 同时授权 → 🟠 高危告警\n- Bash + Exec 同时授权 → 🟠 高危告警\n- Bash + Read + Write + Edit 全量授权 → 🟠 高危告警\n\n### 4. 质量评分\n\n检查 SKILL.md 文档的完整性：\n\n| 检查项 | 要求 |\n|--------|------|\n| 必要字段 | `name`、`description`、`version` |\n| 命名规范 | kebab-case（小写字母+数字+连字符） |\n| description 长度 | 20-1024 字符 |\n| 版本号格式 | 语义化版本 (e.g., `1.0.0`) |\n| 硬编码路径 | 检测 `D:\\` 等绝对路径 |\n| 错误处理 | 文档中需提及异常处理策略 |\n\n### 5. 结构检查\n\n- 文件数量 ≤ 200\n- 总大小 ≤ 10MB\n- 缺少 README.md 时提醒\n\n### 6. 硬件感知并行（新增）\n\n自动检测当前设备的 CPU 核心数和可用内存，动态调整并发工作线程数（1-8 线程），在扫描速度和系统性能之间取得平衡。\n\n**检测逻辑：**\n- CPU 核心数 ÷ 2 = 最大线程数\n- 可用内存 < 2GB 时，线程数减半\n\n### 7. 更新检查（新增）\n\n工具运行时会自动检查 GitHub 上的新版本，发现更新时会在结果中提示用户升级。\n\n- ✅ 内置 **24 小时缓存**，避免频繁请求\n- ✅ 新增 `--skip-update` 参数可完全关闭此功能\n- ✅ 所有网络请求仅获取版本号，不下载任何内容\n\n### 8. `# nosec` 内联排除规则（新增）\n\n如果你确认某行代码是安全的，但触发了误报，可在该行末尾添加 `# nosec` 注释，扫描器将自动跳过该行。\n\n```python\n# 这行会被扫描器跳过\nos.system('ls')  # nosec\n```\n\n### 9. 实时恶意 Skill 库同步（新增）\n\n维护一份已知恶意 Skill 的 SHA256 指纹库（内置 341 条），扫描时对 Skill 目录下每个文件计算 SHA256，命中指纹即报高危，实现 100% 拦截已知恶意 Skill。\n\n- 内置 341 条恶意 Skill 指纹（PyPI 恶意包、npm 恶意包、已知攻击类型）\n- 文件内容变化即产生不同指纹，无法通过重命名或修改绕过\n- 可添加自定义指纹\n\n### 10. CVE 离线缓存（新增）\n\nCVE 数据库从\"每次请求 API\"升级为三级缓存架构，支持离线扫描：\n\n- **7 天全量缓存**：完整 CVE 库缓存到 `~/.workbuddy/cve_cache/cve_full_cache.json`\n- **每日增量更新**：当天查询过的 CVE 写入 `~/.workbuddy/cve_cache/cve_increment_cache.json`\n- **离线降级**：无网络时自动使用缓存，API 恢复后将新结果写回缓存\n\n### 11. 全局排除配置（新增）\n\n团队级 `.nosec.yml` 配置文件，按**类别、文件路径、正则模式**批量排除误报，替代逐行 `# nosec`。\n\n在 Skill 根目录创建 `.nosec.yml`：\n\n```yaml\nversion: 1\nexclude:\n  categories:\n    - quality_check\n    - path_traversal\n  files:\n    - \"scripts/audit.py\"\n  patterns:\n    - \".*test.*\"\n```\n\n- `categories`：排除整个扫描类别\n- `files`：排除指定文件的扫描\n- `patterns`：正则匹配排除行内容\n\n### 12. 动态沙箱执行扫描（新增）\n\n静态扫描只能看代码，恶意代码却可以通过**动态下载、加密载荷、条件触发**绕过。动态沙箱在**隔离环境中实际运行** Skill 脚本，捕获运行时行为，检出静态扫描完全无法发现的恶意动作。\n\n**隔离后端（自动选择）：**\n\n| 后端 | 说明 | 隔离手段 |\n|------|------|---------|\n| Docker | 首选，行为捕获最完整 | `--network=none` 默认断网、只读挂载、CPU/内存/PID 限额、`--cap-drop ALL` |\n| Windows Sandbox | Win10/11 专业版可用 | 运行时生成 `.wsb` 配置（断网 + 只读映射） |\n| 降级模式 | 无隔离环境时 | 仅做静态扫描并提示「建议在沙箱环境中进行动态扫描」 |\n\n**行为捕获维度：**\n\n- 网络请求（目标 IP / 域名 / 端口）\n- 文件读写（路径 / 模式）\n- 进程创建（命令行）\n- 环境变量读取\n- 动态代码执行（exec / compile）\n\n**异常行为标记：**\n\n| 异常行为 | 严重度 |\n|---------|--------|\n| 访问敏感路径（`~/.ssh`、`/etc/passwd`、`.aws`、`id_rsa` 等） | 🔴 严重 |\n| 网络活动 + 动态执行同时出现（疑似下载并执行远程载荷） | 🔴 严重 |\n| 向未知目标外联（非白名单域名） | 🟠 高危 |\n| 创建 shell / 解释器进程（bash、sh、powershell、cmd） | 🟠 高危 |\n| 读取疑似密钥环境变量（token、secret、apikey 等） | 🟡 中等 |\n\n**网络隔离与白名单：** 沙箱默认**完全断网**；如脚本确需联网，可用 `--allow-domain` 逐个放行可信域名，其余外联一律标记为高危。\n\n> ⚠️ 动态扫描为**可选功能**，需显式加 `--dynamic` 开启。若本机无 Docker / Windows Sandbox，工具会自动降级为纯静态扫描并给出提示，不会报错。\n\n### 13. 规则引擎 + YAML 规则包（新增）\n\nv3.2.0 起，6 类静态规则从硬编码重构为 YAML 规则包（`rules/*.yaml`），新增规则只需加 YAML 文件，无需修改代码。\n\n**规则包结构：**\n\n```\nscripts/rules/\n├── prompt_injection.yaml      # 提示注入规则（15 条正则）\n├── command_injection.yaml     # 命令注入规则（8 条正则）\n├── ssrf.yaml                  # SSRF/内网访问（11 条正则）\n├── credential_leak.yaml       # 凭证外泄（10 条正则）\n├── path_traversal.yaml        # 路径遍历（12 条正则）\n└── dangerous_functions.yaml   # 危险函数（11 条正则）\n```\n\n**YAML 文件格式示例：**\n```yaml\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\npatterns:\n  - 'ignore previous instructions'\n  - 'system prompt override'\n  - 'jailbreak'\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n```\n\n**扩展方式：** 在 `rules/` 目录新增 `.yaml` 文件即可，工具自动加载。零依赖 YAML 解析（自研轻量实现，不依赖 PyYAML）。\n\n### 14. eBPF/ETW 系统级行为捕获（新增）\n\nv3.2.0 在沙箱 5 维行为捕获基础上，新增内核级系统调用监控，覆盖应用层无法看到的底层行为。\n\n| 后端 | 平台 | 要求 | 捕获内容 |\n|------|------|------|---------|\n| eBPF (bcc) | Linux | root + bcc 安装 | syscall：connect/send/recv、open/write、fork/exec、chmod/chown、uname/gethostname |\n| ETW | Windows | 管理员权限 | syscall：文件操作、进程创建、网络活动 |\n| 降级模式 | 无 eBPF/ETW | 自动提示「系统级行为捕获不可用」 |\n\n### 15. 提示注入 ML 语义检测（新增）\n\nv3.2.0 引入 ML 语义模型检测提示注入，降低正则匹配的绕过率。\n\n| 检测模式 | 触发条件 | 说明 |\n|---------|---------|------|\n| ONNX 语义模型 | `~/.workbuddy/models/prompt_injection.onnx` 存在 | 本地推理，离线可用 |\n| 正则降级 | ONNX 模型不可用时自动回退 | 20 条正则规则（含中文） |\n\n**性能：** 结果缓存（1 小时 TTL）+ 模型懒加载，不拖慢扫描。\n\n### 16. 轻量 SAST 污点追踪（新增）\n\nv3.3.0 引入受限数据流分析，将告警从字符串匹配升级为 source→sink 证据链。\n\n| 语言 | 分析方式 | 覆盖 |\n|------|---------|------|\n| Python | AST 解析（import/assign/attribute/call 节点追踪） | eval/exec/os.system/subprocess/pickle/yaml.load/open/file.write |\n| JS/TS | 词法近似（变量赋值+属性访问追踪） | eval/exec/child_process/innerHTML/document.write/db.query |\n| 其他 | 降级为模式匹配，标注「分析深度: 模式匹配」 | 通用危险函数 |\n\n**source 定义：** `input()`、`sys.argv`、`os.environ`、`requests.get()`、`req.body`、`process.argv`、`document.cookie` 等用户输入/环境变量/网络响应。\n\n**降误报机制：** 模式命中但无完整 source→sink 传播链时，降为 ⚪ info 级（`taint_sink_only`），避免误报。\n\n### 17. 社区规则扩展（新增）\n\nv3.3.0 支持加载第三方 YAML 规则包，经 schema 校验后纳入扫描。\n\n| 能力 | 说明 |\n|------|------|\n| Schema 校验 | 必填字段、类型检查、正则合法性、枚举值校验 |\n| 来源记录 | 加载时自动附加 `_source`（文件路径）和 `_loaded_at`（时间戳） |\n| 签名验证 | 可选 HMAC-SHA256 签名（`# signature: <hex>` 注释），防篡改 |\n| 报告区分 | 官方规则与社区规则在报告中分开统计（`community_` 前缀） |\n\n**加载方式：** `--community-rules <目录路径>`，目录下放 `.yaml` 文件即可。\n\n### 18. 健康度与合规检查合并（新增）\n\nv3.3.0 将质量评分（SKILL.md 完整性 8 项）与结构检查（文件数/大小/README）合并为「健康度」模块统一评分，权限审计+健康度统一挂「合规性检查」一个出口。\n\n| 合并模块 | 包含 | 输出类别 |\n|---------|------|---------|\n| 健康度 | 质量评分（8 项）+ 结构检查（3 项） | `health_quality` / `health_structure` |\n| 合规性 | 健康度 + 权限审计 | `compliance_permission` + 健康度全部 |\n\n**好处：** 报告结构更清晰，旧版「质量评分」「结构检查」「权限审计」三个独立模块合并为「合规性检查」一个入口。\n\n## 使用方法\n\n### 基本用法（命令行）\n\n```bash\n# 扫描一个 Skill 目录（文本输出）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n\n# 生成 JSON 报告\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format json\n\n# 生成 HTML 报告并保存为文件\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format html -o report.html\n\n# 跳过更新检查\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --skip-update\n\n# 开启动态沙箱执行扫描（需 Docker 或 Windows Sandbox）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic\n\n# 动态扫描 + 放行白名单域名 + 自定义超时（秒）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic --allow-domain api.github.com --sandbox-timeout 60\n\n# 启用供应链风险分析\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain\n\n# 启用恶意 Skill 指纹匹配\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --malicious-db\n\n# 启用全局排除配置（.nosec.yml）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --global-exclude\n\n# 同时启用所有高级功能\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --malicious-db --global-exclude\n\n# 启用 YAML 规则引擎（6 类规则可热插拔）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine\n\n# 启用 ML 提示注入语义检测（ONNX + 正则降级）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --ml-detect\n\n# 启用 eBPF/ETW 系统级行为捕获\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --syscall-monitor\n\n# v3.2.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine --ml-detect --syscall-monitor --malicious-db --global-exclude --supply-chain --dynamic\n\n# v3.3.0 污点追踪\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking\n\n# v3.3.0 社区规则\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --community-rules \"D:\\path\\to\\community-rules\"\n\n# v3.3.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking --community-rules \"D:\\path\\to\\community-rules\" --rule-engine --ml-detect --malicious-db --global-exclude --supply-chain\n```\n\n### 参数快查\n\n| 参数 | 说明 | 默认 |\n|------|------|------|\n| `skill_path` | 待扫描的 Skill 目录（必填） | — |\n| `--format` | 输出格式：`text` / `json` / `html` | `text` |\n| `-o, --output` | 报告输出文件路径 | 打印到终端 |\n| `--skip-update` | 跳过更新检查 | 关闭 |\n| `--dynamic` | 开启动态沙箱执行扫描 | 关闭 |\n| `--allow-domain` | 放行白名单域名（可重复） | 无（默认断网） |\n| `--sandbox-timeout` | 沙箱执行超时（秒） | 30 |\n| `--supply-chain` | 启用供应链风险分析 | 关闭 |\n| `--malicious-db` | 启用恶意 Skill 指纹匹配（341 条） | 关闭 |\n| `--global-exclude` | 启用 .nosec.yml 全局排除配置 | 关闭 |\n| `--rule-engine` | 启用 YAML 规则引擎（6 类规则包） | 关闭 |\n| `--syscall-monitor` | 启用 eBPF/ETW 系统级行为捕获 | 关闭 |\n| `--ml-detect` | 启用 ML 提示注入语义检测 | 关闭 |\n| `--taint-tracking` | 启用污点追踪（Python AST + JS 词法，source→sink 证据链） | 关闭 |\n| `--community-rules` | 加载第三方社区规则包目录（schema 校验 + 来源记录） | 关闭 |\n\n### 在 WorkBuddy 中触发\n\n直接告诉 WorkBuddy，触发词覆盖面广：\n\n- **「安全审计」+ 技能路径** → `帮我安全审计 D:\\skill\\my-skill`\n- **「扫描」+ Skill** → `扫描这个 skill 有没有安全问题`\n- **「发布前检查」+ 技能名** → `发布前帮我检查一遍 my-skill`\n- **「安全检测」+ 路径** → `帮我对这个路径做一份安全检测`\n- **「代码审计」+ 文件夹** → `对 D:\\skill\\project 做代码审计`\n- **「Skill 安全吗」** → `这个 skill 安全吗`\n\n## 输出说明\n\n### 评分等级\n\n评分从 100 分开始扣分，不同等级对应不同发布建议：\n\n| 等级 | 分数区间 | 发布建议 | 含义 |\n|------|---------|---------|------|\n| 🟢 A | 90-100 | ✅ 可安全发布 | 优秀 |\n| 🟣 B | 75-89 | ⚠️ 建议修复后发布 | 良好 |\n| 🟡 C | 60-74 | ⚠️ 需要修复 | 一般 |\n| 🟠 D | 40-59 | ❌ 不建议发布 | 较差 |\n| 🔴 F | 0-39 | ❌ 禁止发布 | 危险 |\n\n### 严重度分类\n\n- 🔴 **严重**（-25 分/个）：提示注入、命令注入、凭证外泄 → 必须立即修复\n- 🟠 **高危**（-15 分/个）：SSRF、路径遍历、危险权限组合 → 建议尽快修复\n- 🟡 **中等**（-8 分/个）：危险函数、权限过度授权、description 过短 → 建议修复\n- 🔵 **低危**（-3 分/个）：命名规范问题、缺少错误处理说明 → 建议优化\n- ⚪ **信息**（0 分）：更新版本提示、参考信息 → 仅供参考\n\n### 返回码（for CI/CD 集成）\n\n| 退出码 | 含义 | CI 行为建议 |\n|--------|------|------------|\n| 0 | 无问题或仅低危 | ✅ 通过 |\n| 1 | 存在中等问题 | ⚠️ 警告 |\n| 2 | 存在严重/高危问题 | ❌ 失败，阻断发布 |\n\n## 扫描排除规则\n\n以下内容将被自动跳过，不参与扫描，不计入风险：\n\n### 自动排除的文件类型\n\n1. **可执行/脚本**：`.bat`、`.cmd`、`.ps1`、`.vbs`、`.exe`、`.dll`、`.msi`、`.sh`、`.com`、`.scr`、`.hta`、`.reg`\n2. **Office 文档**：`.docx`、`.xlsx`、`.pptx`、`.doc`、`.xls`、`.ppt`、`.xlsm`、`.docm`、`.pptm`\n3. **压缩包/镜像**：`.iso`、`.dmg`、`.zip`、`.rar`、`.7z`、`.tar`、`.gz`、`.apk`、`.jar`\n4. **缓存/隐藏**：`.DS_Store`、`.pyc`、`.pyo`、`.so`、`.swp`、`.env`、`.log`、`.tmp`\n\n### 自动排除的目录\n\n`__pycache__`、`.git`、`.venv`、`.pytest_cache`、`node_modules`、`.idea`、`.vscode`\n\n## 扫描示例\n\n```\n============================================================\n  Skill Security Audit Report\n============================================================\n  Skill: my-cool-skill\n  Path: D:\\skill\\my-cool-skill\n  Time: 2026-07-13T14:32:10\n  Files: 15 scanned, 2 skipped\n============================================================\n\n  Score: 82/100 (Grade: B)\n  Found 2 medium issues.\n\n  ──────────────────────────────────────────────────────────\n  [MED]   quality_check     SKILL.md         Missing version field\n  [MED]   quality_check     SKILL.md         No error handling mentioned\n  ──────────────────────────────────────────────────────────\n\n  Fix suggestions:\n    [quality_check] Add version field in frontmatter\n    [quality_check] Add error handling docs in SKILL.md\n\n  Feedback: njskills@agent.qq.com\n============================================================\n```\n\n## 常见问答（FAQ）\n\n**Q: 扫描会很慢吗？需要联网吗？**\nA: 扫描本身不会慢。工具会自动检测你的 CPU 核心数和可用内存，动态调整并行数（1-8 线程），在本地离线完成扫描，不联网也不会影响结果。可选的更新检查（24 小时缓存）可以通过 `--skip-update` 关闭。\n\n**Q: 扫描结果为 F 等级怎么办？**\nA: 请按照输出的修复建议逐一修复问题，特别是严重和高危问题。修复后可重新扫描确认分数是否提升。常见修复步骤：\n1. 移除所有硬编码的敏感信息（API Key、Password 等）→ 添加到 `.env` 或环境变量\n2. 避免使用 `eval()`/`exec()`/`os.system()` → 使用 `subprocess.run()` 并关闭 `shell=True`\n3. 确保所有依赖升级到安全版本（见报告中建议的版本号）\n4. 清理硬编码的内网 IP，改用域名或环境变量\n\n**Q: 报告说发现了命令注入，但我只是在说明文档中写了代码示例？**\nA: 代码示例中如果包含了 curl、wget、shell 等相关关键词，会被模式匹配命中。这是预期行为——**请在代码示例末尾添加 `# nosec` 注释**即可跳过该行。\n\n**Q: 这个工具支持扫描 Python 以外的文件吗？**\nA: 支持。除了 `.py` 文件，还可以扫描 `.js`、`.ts`、`.json`、`.yaml`、`.md`、`.html` 等所有文本格式文件。Office 文档和可执行文件会被自动跳过。\n\n**Q: 检测出误报怎么办？**\nA: 主要有两种方式：\n1. **临时方案**：在代码行末尾添加 `# nosec` 注释\n2. **永久方案**：联系 njskills@agent.qq.com 提供误报规则详情（文件路径和匹配模式），我们会优化规则\n\n**Q: 用于公司 CI/CD 流水线，需要安装什么依赖吗？**\nA: 不需要。本工具只需要 **Python 3.8+** 标准库，无第三方依赖。可集成到 GitHub Actions、GitLab CI、Jenkins 等任意 CI 平台。（注：动态扫描 `--dynamic` 需额外具备 Docker 或 Windows Sandbox 环境。）\n\n**Q: 我没有 Docker，能用动态扫描吗？**\nA: 可以直接加 `--dynamic`，工具会自动探测环境。若无 Docker / Windows Sandbox，会自动降级为纯静态扫描并提示「建议在沙箱环境中进行动态扫描」，不会报错。想获得完整行为捕获，推荐安装 Docker Desktop。\n\n**Q: 动态扫描会不会有风险？会不会拖慢我电脑？**\nA: 动态扫描在隔离环境中运行：Docker 用 `--network=none` 断网 + 只读挂载 + CPU/内存/PID 限额；Windows Sandbox 断网 + 只读映射。默认单次超时 30 秒，CPU 上限自动取核心数的一半，不会拖慢日常使用。被扫描代码无法接触你的真实文件系统和网络。\n\n**Q: 恶意 Skill 指纹库能覆盖未知的新型恶意 Skill 吗？**\nA: 指纹库覆盖 341 条已知恶意 Skill，对于已知的恶意包（如 PyPI 恶意依赖、npm 钓鱼包）能实现 100% 拦截。但攻击者如果修改代码、混淆变量名，SHA256 指纹会变化，此时需要结合静态扫描的规则（提示注入、命令注入等）来发现。建议同时开启 `--malicious-db` 和静态扫描，双重保障。\n\n**Q: CVE 离线缓存能维持多久？无网环境能用吗？**\nA: 7 天全量缓存 + 每日增量更新。无网络环境下，工具自动使用本地缓存，CVE 漏洞扫描功能仍可正常使用（使用最近一次缓存数据）。API 恢复后，新查询到的 CVE 结果会自动写回缓存。缓存文件存放在 `~/.workbuddy/cve_cache/`。\n\n**Q: `.nosec.yml` 和 `# nosec` 注释有什么区别？哪个优先？**\nA: `# nosec` 是单行临时排除，`.nosec.yml` 是团队级全局配置，支持按类别、文件路径、正则模式批量排除。**过滤顺序**：`# nosec` 行级排除先应用，然后是 `.nosec.yml` 全局排除。建议团队统一使用 `.nosec.yml`，个人调试用 `# nosec`。\n\n**Q: 规则引擎和原来的静态扫描有什么区别？**\nA: 规则引擎将 6 类规则从代码硬编码重构为 YAML 文件（`rules/*.yaml`），新增规则只需添加 YAML 文件，无需修改 `--rule-engine` 开启。未开启时自动回退到原有硬编码规则，完全兼容。\n\n**Q: ML 提示注入检测需要联网吗？需要安装额外依赖吗？**\nA: 不需要联网，不需要额外依赖。ML 检测使用 ONNX Runtime（纯 CPU 推理），模型存放在 `~/.workbuddy/models/prompt_injection.onnx`。无模型时自动降级到正则规则包（含 20 条规则，含中文），零外部依赖。\n\n**Q: eBPF/ETW 系统级捕获需要什么权限？**\nA: Linux 需要 root 权限 + bcc 框架；Windows 需要管理员权限。无权限时自动降级，提示「系统级行为捕获不可用」，不影响其他扫描功能。\n\n**Q: 污点追踪和原来的静态扫描有什么区别？**\nA: 污点追踪在模式匹配基础上增加了数据流分析——不只看代码中是否存在危险函数，还追踪用户输入/环境变量/网络响应（source）是否流经赋值/拼接/属性访问等路径最终到达危险函数（sink）。有完整 source→sink 传播链的报高危（`taint_chain`），仅有 sink 调用但无明确 source 的降为 info 级（`taint_sink_only`），从而降低误报。\n\n**Q: 社区规则和官方规则包有什么区别？**\nA: 官方规则包（`scripts/rules/*.yaml`）内置在 Skill 目录中，由开发者维护。社区规则通过 `--community-rules <目录>` 从外部加载，每个 YAML 文件经过 schema 校验（必填字段、类型检查、正则合法性），加载后记录来源（`_source`），报告中 `community_` 前缀与官方规则分开统计。责任边界清晰。\n\n**Q: 健康度与合规检查合并后，旧版报告还能看吗？**\nA: 完全兼容。旧版的「质量评分」「结构检查」「权限审计」三个模块在 v3.3.0 中合并为「合规性检查」一个出口，输出类别从 `quality_check`/`structure_check`/`permission_audit` 统一为 `health_quality`/`health_structure`/`compliance_permission`，报告结构更清晰，不再重复。\n\n## 安全声明\n\n- **默认只做静态分析，不会执行被扫描的代码**（静态模式仅读取文件，不写入）\n- **动态扫描（`--dynamic`）需显式开启**，且仅在隔离环境（Docker / Windows Sandbox）中执行被扫描代码，沙箱**默认断网**、只读挂载、CPU/内存限额，绝不在宿主机直接运行\n- **不会上传任何文件内容到外部服务器**\n- **更新检查仅获取 GitHub Release 标题，不下载任何附件**\n- **所有扫描在本地完成，保护你的代码隐私**\n- Windows Sandbox 的 `.wsb` 配置在运行时动态生成到临时目录，用完即删，不写入 Skill 仓库\n- `.nosec.yml` 全局排除配置仅影响本团队扫描流程，不会降低安全性；被排除的行仍可在完整报告中查看（`--format json` 包含 `excluded` 字段）\n\n## 反馈与支持\n\n如有误报反馈、规则改进建议或功能需求，欢迎联系：\n\n📧 **njskills@agent.qq.com**\n\n你的反馈将直接帮助我们升级规则库，完善检测能力。\n\n## 更新日志\n\n| v3.3.0 | 2026-08-24 | 增加：轻量 SAST 污点追踪（taint_tracker.py），Python AST + JS 词法近似，source→sink 证据链降误报（无完整链降 info）；增加：社区规则扩展（community_rules.py），第三方 YAML 规则包 schema 校验 + 来源记录 + HMAC-SHA256 签名验证，官方/社区规则报告分开统计；增加：健康度与合规检查合并（scan_health + scan_compliance），质量评分+结构检查统一为健康度模块，权限审计+健康度统一挂合规性检查出口；增加：--taint-tracking 和 --community-rules <path> 两个 CLI 参数；优化：report meta 区新增 taint_tracking / community_rules 维度统计 |\n| v3.2.0 | 2026-08-17 | 增加：规则引擎模块（scripts/rules_engine.py），将 6 类静态规则从硬编码重构为 YAML 规则包（rules/*.yaml），支持热插拔扩展，新增规则只需加 YAML 文件不改代码；增加：scripts/rules/ 目录包含 6 个规则包（prompt_injection/command_injection/ssrf/credential_leak/path_traversal/dangerous_functions），共 67 条正则；增加：系统级行为捕获模块（scripts/sandbox/system_monitor.py），支持 eBPF（Linux）/ ETW（Windows）内核级 syscall 监控，无 eBPF/ETW 时自动降级；增加：ML 提示注入语义检测（scripts/sandbox/ml_detect.py），ONNX 模型优先 + 正则降级双模式，含中文规则与结果缓存；增加：scan_rule_engine()、scan_ml_prompt_injection()、scan_syscall_monitor() 三个扫描方法；增加：--rule-engine、--ml-detect、--syscall-monitor 三个 CLI 参数；增加：report meta 区新增 rule_engine / ml_detect / syscall_monitor 维度统计 |\n| v3.1.0 | 2026-08-07 | 增加：实时恶意 Skill 库同步模块，内置 341 条 SHA256 指纹实现 100% 已知恶意 skill 拦截；增加：CVE 离线缓存（7 天全量 + 每日增量），无网络环境仍可扫描依赖漏洞；增加：全局排除配置（.nosec.yml），支持按类别/文件/正则模式批量排除误报；增加：--malicious-db 和 --global-exclude 两个命令行参数；优化：add_result() 集成全局排除过滤逻辑 |\n| v3.0.0 | 2026-08-01 | 增加：供应链风险分析模块，支持依赖树扫描、typo-squatting 钓鱼包检测、维护状态评估（僵尸包识别）、许可证合规检查；增加：CVE 数据库从 26 条手动维护升级为 OSV/NVD API 自动拉取并每日缓存更新；增加：ci_templates/ 目录提供 GitHub Action 与 GitLab CI 开箱即用模板；增加：SARIF 2.1.0 格式输出支持 GitHub Code Scanning；增加：PR 自动评论扫描结果功能；增加：质量门禁机制（默认 70 分阈值阻止合并）；增加：--supply-chain 与 --format sarif 命令行参数；优化：audit.py 报告 meta 区新增 supply_chain 维度统计；优化：依赖解析器支持 requirements.txt / package.json / pyproject.toml 三种格式 |\n| v2.0.0 | 2026-07-22 | 增加：动态沙箱执行扫描模块，在 Docker 或 Windows Sandbox 隔离环境中实际运行脚本捕获运行时行为；增加：网络请求、文件读写、进程创建、环境变量读取、动态代码执行五类运行时行为捕获；增加：敏感路径访问、未知目标外联、下载并执行远程载荷、shell 进程创建、密钥环境变量读取五类异常行为标记；增加：沙箱默认断网与 --allow-domain 域名白名单机制；增加：--dynamic、--allow-domain、--sandbox-timeout 三个命令行参数；增加：无 Docker/Windows Sandbox 时自动降级为纯静态扫描并给出提示；优化：报告 meta 区展示动态扫描后端与行为统计 |\n| v1.3.0 | 2026-07-13 | 修复：base64 编码的命令注入模式中有两个模式解码后正则表达式括号不匹配导致扫描报错；修复：CVE 列表中 protobuf 的 CVE 编号错误；增加：24 小时缓存的更新检查机制避免频繁联网请求；增加：# nosec 内联注释排除规则降低误报；优化：依赖库覆盖范围从 17 个扩展到 26 个常见高危依赖；优化：错误信息改为更友好的中文提示；优化：扫描输出显示优化减少信息密度过高的问题；优化：新增详细说明文档和常见问答\n| v1.2.0 | 2026-07-13 | 增加：硬件感知并行度自动调整功能，根据 CPU/内存动态分配线程数；增加：更新检查功能自动提示新版本；优化：依赖审计支持 pyproject.toml 和 Pipfile 格式；修复：凭证外泄检测正则表达式中转义字符导致扫描崩溃的问题\n| v1.1.0 | 2026-07-13 | 增加：依赖漏洞审计模块；增加：质量评分维度（包含 SKILL.md 完整性检查）；优化：评分算法改为按严重度区分扣分权重；优化：HTML 报告增加统计卡片和响应式布局\n| v1.0.0 | 2026-07-13 | 初始版本发布，包含静态扫描、权限审计、结构检查、JSON/HTML 报告生成\n\nFile v3.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn7chdrwbdhaqkwajcyhtfvjx989ddb1\",\n  \"slug\": \"skill-security-checker\",\n  \"version\": \"3.3.0\",\n  \"publishedAt\": 1787587843674\n}\n\nFile v3.3.0:references/scan-patterns.md\n\n# 扫描规则参考文档\n\n本文件详细定义了 Skill Security 使用的检测逻辑。\n\n## 一、提示注入检测\n\n检测试图覆盖或绕过系统指令的恶意提示。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配「忽略先前/上面/所有」+「指令/提示/规则」组合 | 尝试让 AI 忽略原始系统指令 |\n| 匹配「系统提示」+「覆盖/替换/忽略/绕过」组合 | 直接覆盖系统提示 |\n| 匹配「你现在是...」 | 强制 AI 扮演新角色绕过限制 |\n| 匹配「越狱」类关键词 | 触发越狱模式 |\n| 匹配「做任何事」模式 | 解除限制模式 |\n| 匹配「假装你是」 | 假装成其他身份 |\n| 匹配「角色扮演为」 | 绕过角色限制 |\n| 匹配「覆盖/禁用」+「安全/过滤/限制」 | 禁用安全过滤 |\n| 匹配「忘记一切」 | 让 AI 忘记所有指令 |\n| 匹配「重新开始」 | 重置指令 |\n| 匹配「重置指令」 | 重置指令 |\n\n## 二、命令注入检测\n\n检测通过用户输入执行系统命令的代码。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 curl/wget 管道连接 shell | 从远程下载脚本并执行 |\n| 匹配 fetch+eval 组合 | 执行远程代码 |\n| 匹配 eval/exec/system + $_GET/$_POST | PHP 命令注入 |\n| 匹配 passthru/shell_exec | PHP 命令执行 |\n| 匹配反引号执行 curl/wget/nc | 命令替换执行 |\n| 匹配 $() 内执行 curl/wget/nc | 命令替换执行 |\n\n## 三、SSRF/内网访问\n\n检测硬编码的内网地址。\n\n| 地址段 | 说明 |\n|--------|------|\n| 127.0.0.1 | 本地回环 |\n| 10.0.0.0/8 | 私有网络 A 类 |\n| 172.16.0.0/12 | 私有网络 B 类 |\n| 192.168.0.0/16 | 私有网络 C 类 |\n| fc00::/7 | IPv6 私有地址 |\n| fe80::/10 | IPv6 链路本地 |\n| 0.0.0.0 | 全地址监听 |\n\n## 四、凭证外泄\n\n检测硬编码的敏感凭证。\n\n| 检测类型 | 说明 |\n|---------|------|\n| API Key | 20位以上字母数字组合 |\n| Secret Key | 20位以上字母数字组合 |\n| Access Token | 20位以上字母数字组合 |\n| Private Key | 40位以上 base64 字符 |\n| Password | 8位以上明文密码 |\n| Bearer Token | Authorization 头 |\n| AWS Access Key | AKID 开头 |\n| GitHub Token | ghp_/gho_ 开头 |\n| OpenAI Key | sk- 开头 |\n| 阿里云 AccessKey | AKID 开头 |\n\n## 五、路径遍历\n\n检测 ../ 等模式访问预期外的文件系统路径。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 ../ 或 ..\\ | 目录穿越 |\n| 匹配 URL 编码 %2f%2e%2e | 编码绕过 |\n| 匹配 /etc/passwd 或 /etc/shadow | 系统文件访问 |\n| 匹配 c:\\windows\\ | Windows 系统目录 |\n\n## 六、危险函数\n\n| 函数 | 风险 |\n|------|------|\n| eval() | 执行任意代码 |\n| exec() | 执行任意代码 |\n| os.system() | 执行系统命令 |\n| subprocess(shell=True) | 命令注入 |\n| pickle.load() | 反序列化漏洞 |\n| yaml.load() (无 Loader) | 反序列化漏洞 |\n| marshal.load() | 执行字节码 |\n\n## 七、已知漏洞依赖\n\n当检测到以下依赖版本低于安全版本时发出告警：\n\n| 依赖包 | 安全版本 | 主要 CVE |\n|--------|----------|----------|\n| requests | ≥2.32.0 | CVE-2024-35195 |\n| urllib3 | ≥2.2.0 | CVE-2024-37891 |\n| flask | ≥3.0.0 | CVE-2023-30861 |\n| django | ≥4.2.0 | 多个高危 |\n| numpy | ≥1.22.0 | 缓冲区溢出 |\n| pillow | ≥10.0.0 | 多个 CVE |\n| pyyaml | ≥6.0 | CVE-2020-14343 |\n| jinja2 | ≥3.1.0 | CVE-2024-22416 |\n| cryptography | ≥42.0.0 | 安全修复 |\n| aiohttp | ≥3.9.0 | CVE-2024-23334 |\n| tqdm | ≥4.66.0 | CVE-2024-34062 |\n| setuptools | ≥65.5.0 | CVE-2022-40897 |\n| node-fetch | ≥2.6.7 | CVE-2022-0235 |\n| minimist | ≥1.2.6 | CVE-2021-44906 |\n| lodash | ≥4.17.21 | CVE-2021-23337 |\n| axios | ≥0.21.1 | CVE-2021-3749 |\n| express | ≥4.17.3 | 多个修复 |\n\n## 八、误报处理\n\n某些合法代码可能触发告警，属于正常误报场景：\n\n1. 文档/示例中包含攻击模式说明（应确保在注释或字符串中）\n2. 测试代码包含恶意 payload 样例\n3. 安全工具本身的检测规则\n4. 故意作为反例演示的代码\n\n对于确认的误报，可在代码行尾添加 `# nosec` 注释跳过检测。\n\n## 九、评分算法\n\n评分从 100 分开始扣分：\n\n| 严重度 | 扣分 |\n|--------|------|\n| 🔴 严重 | -25分/个 |\n| 🟠 高危 | -15分/个 |\n| 🟡 中等 | -8分/个 |\n| 🔵 低危 | -3分/个 |\n| ⚪ 信息 | 0分 |\n\n最低分数为 0。\n\n等级划分：\n\n| 分数 | 等级 | 发布建议 |\n|------|------|----------|\n| 90-100 | A | ✅ 可发布 |\n| 75-89 | B | ⚠️ 建议修复后发布 |\n| 60-74 | C | ⚠️ 需要修复 |\n| 40-59 | D | ❌ 不建议发布 |\n| 0-39 | F | ❌ 禁止发布 |\n\nFile v3.3.0:scripts/ci_templates/gitlab-ci.yml\n\nstages:\n  - security\n\nskill-security-scan:\n  stage: security\n  image: python:3.11-slim\n  script:\n    - python scripts/audit.py . --format json -o report.json --skip-update\n    - |\n      SCORE=$(python -c \"import json; print(json.load(open('report.json'))['score'])\")\n      echo \"Quality Score: $SCORE\"\n      if [ \"$SCORE\" -lt 70 ]; then\n        echo \"Score below threshold (70), failing.\"\n        exit 1\n      fi\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n    when: always\n  only:\n    - merge_requests\n    - main\n\nFile v3.3.0:scripts/ci_templates/skill-scan.yml\n\nname: Skill Security Scan\n\non:\n  push:\n    branches: [main, master]\n  pull_request:\n    branches: [main, master]\n\njobs:\n  security-scan:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      security-events: write\n      pull-requests: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.11'\n      - name: Run skill-security-checker\n        run: |\n          python scripts/audit.py . \\\n            --format sarif \\\n            -o sarif-output.sarif \\\n            --skip-update\n        continue-on-error: true\n      - name: Upload SARIF to GitHub Code Scanning\n        uses: github/codeql-action/upload-sarif@v3\n        if: always()\n        with:\n          sarif_file: sarif-output.sarif\n      - name: Gate on quality score\n        run: |\n          SCORE=$(python scripts/audit.py . --format json --skip-update \\\n                  | python -c \"import sys,json; print(json.load(sys.stdin)['score'])\")\n          echo \"Quality Score: $SCORE\"\n          if [ \"$SCORE\" -lt 70 ]; then\n            echo \"Score below threshold (70), failing.\"\n            exit 1\n          fi\n      - name: Comment PR with scan results\n        if: github.event_name == 'pull_request'\n        uses: actions/github-script@v7\n        with:\n          script: |\n            const fs = require('fs');\n            const report = JSON.parse(\n              fs.readFileSync('sarif-output.sarif', 'utf8')\n            );\n            const stats = report.runs[0]?.results?.length ?? 0;\n            const body = [\n              '## 🔒 Skill Security Scan',\n              '',\n              `Found **${stats}** issue(s).`,\n              '',\n              'Full details in the **Security → Code Scanning** tab.',\n            ].join('\\n');\n            github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: context.issue.number,\n              body: body,\n            });\n\nFile v3.3.0:scripts/rules/command_injection.yaml\n\nname: command_injection\ndisplay_name: 命令注入\nseverity: critical\ndescription: 检测 curl/wget 管道执行、反引号执行、$() shell 执行等风险\n\npatterns:\n  - 'exfiltrate\\('\n  - 'curl.*(sh|bash|cmd|powershell)'\n  - 'wget.*(sh|bash)'\n  - 'fetchhttp.*ival'\n  - 'passthru'\n  - 'shell_exec'\n  - '`.*(curl|wget|nc|bash|sh)`'\n  - '\\$\\(\\s*(curl|wget|nc|bash|sh)\\s*\\)'\n\nsuggestion: 避免运行时命令拼接，使用参数化调用（如 requests 库替代 curl）\nsource: static\n\nFile v3.3.0:scripts/rules/credential_leak.yaml\n\nname: credential_leak\ndisplay_name: 凭证外泄\nseverity: critical\ndescription: 检测硬编码 API Key、Token、Password、Bearer Token 等敏感信息泄露\n\npatterns:\n  - '(?i)(api[_-]?key|apikey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(secret[_-]?key|secretkey)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(access[_-]?token|accesstoken)\\s*[:=]\\s*[\"\\']?[a-z0-9]{20,}[\"\\']?'\n  - '(?i)(private[_-]?key|privatekey)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{40,}[\"\\']?'\n  - '(?i)(password|passwd|pwd)\\s*[:=]\\s*[\"\\'][^\"\\']{8,}[\"\\']'\n  - '(?i)bearer\\s+[a-z0-9\\-._~+/]+=*'\n  - '(?i)aws[_-]?(access[_-]?key[_-]?id|secret[_-]?access[_-]?key)\\s*[:=]\\s*[\"\\']?[a-z0-9/+=]{20,}[\"\\']?'\n  - '(?i)gh[pousr]_[a-z0-9]{36,}'\n  - '(?i)sk-[a-z0-9]{48}'\n  - '(?i)AKID[a-z0-9]{32}'\n\nsuggestion: 立即轮换凭证！使用环境变量或密钥管理器存储敏感信息\nsource: static\n\nFile v3.3.0:scripts/rules/dangerous_functions.yaml\n\nname: dangerous_functions\ndisplay_name: 危险函数\nseverity: medium\ndescription: 检测 eval/exec/os.system/pickle.load 等危险函数调用\n\npatterns:\n  - '(?i)eval\\s*\\('\n  - '(?i)exec\\s*\\('\n  - '(?i)os\\.system\\s*\\('\n  - '(?i)subprocess\\.call\\s*\\(\\s*shell\\s*=\\s*True'\n  - '(?i)popen\\s*\\('\n  - '(?i)__import__\\s*\\('\n  - '(?i)compile\\s*\\('\n  - '(?i)input\\s*\\('\n  - '(?i)pickle\\.loads?\\s*\\('\n  - '(?i)yaml\\.load\\s*\\([^)]*\\)(?!.*Loader)'\n  - '(?i)marshal\\.loads?\\s*\\('\n\nsuggestion: 避免使用 eval/exec，改用 ast.literal_eval 或 json.loads；subprocess 关闭 shell=True\nsource: static\n\nFile v3.3.0:scripts/rules/path_traversal.yaml\n\nname: path_traversal\ndisplay_name: 路径遍历\nseverity: high\ndescription: 检测路径遍历攻击、敏感文件访问等风险\n\npatterns:\n  - '\\.\\./'\n  - '\\.\\.\\'' \n  - '\\.\\.\\%2[fF]'\n  - '\\.\\.%5[cC]'\n  - '%2[eE]%2[eE]%2[fF]'\n  - '%2[eE]%2[eE]/'\n  - '\\.\\./etc/passwd'\n  - '\\.\\./windows/system32'\n  - '/etc/passwd'\n  - '/etc/shadow'\n  - 'c:\\\\windows\\\\'\n  - 'c:/windows/'\n\nsuggestion: 避免直接拼接路径，使用 Pathlib 安全拼接；访问前验证路径是否在预期目录内\nsource: static\n\nFile v3.3.0:scripts/rules/prompt_injection.yaml\n\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\n\npatterns:\n  - 'ignore previous instructions'\n  - 'ignore above all'\n  - 'system prompt override'\n  - 'ignore all previous'\n  - 'you are now a'\n  - 'jailbreak'\n  - 'DAN mode'\n  - 'do anything now'\n  - 'pretend to be'\n  - 'override safety'\n  - 'disable safety'\n  - 'forget everything'\n  - 'roleplay as an'\n  - 'start over'\n  - 'reset instructions'\n\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n\nFile v3.3.0:scripts/rules/ssrf.yaml\n\nname: ssrf\ndisplay_name: SSRF/内网访问\nseverity: high\ndescription: 检测内网 IP 地址、localhost 访问等 SSRF 风险\n\npatterns:\n  - '127\\.0\\.0\\.1'\n  - 'localhost'\n  - '0\\.0\\.0\\.0'\n  - '10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}'\n  - '172\\.(1[6-9]|2\\d|3[01])\\.\\d{1,3}\\.\\d{1,3}'\n  - '192\\.168\\.\\d{1,3}\\.\\d{1,3}'\n  - '169\\.254\\.\\d{1,3}\\.\\d{1,3}'\n  - 'fc00:'\n  - 'fe80:'\n  - '\\[::1\\]'\n  - '\\[::ffff:127\\.0\\.0\\.1\\]'\n\nsuggestion: 避免硬编码内网 IP，改用域名或环境变量\nsource: static\n\nFile v3.3.0:skill-card.md\n\n## Description:\n\nSkill Security Checker scans ClawHub, SkillHub, and WorkBuddy skill directories for security, dependency, permission, supply-chain, sandbox, and compliance issues and can produce text, JSON, HTML, or SARIF reports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[fyniujin](https://clawhub.ai/user/fyniujin)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and security reviewers use this skill to audit skill directories before release, assess third-party skills, and generate CI-friendly reports with remediation guidance.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill may contact GitHub by default for update checks, which can be undesirable in offline or sensitive environments.\n\nMitigation: Run with --skip-update when network access should be avoided.\n\nRisk: The optional syscall monitor uses root or administrator telemetry paths, and the server security summary says this high-privilege behavior needs review before installation.\n\nMitigation: Avoid --syscall-monitor unless the operator has reviewed and accepted the privilege requirements, telemetry behavior, and implementation limits.\n\nRisk: Dynamic scanning executes target skill code in a sandbox when enabled.\n\nMitigation: Use --dynamic only with Docker or Windows Sandbox available, keep default network isolation, and allow only trusted domains with --allow-domain.\n\nRisk: The scanner reads skill directories and can write cache or report files.\n\nMitigation: Run it only against intended directories and direct outputs to approved locations.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/fyniujin/skills/skill-security-checker)\n- [scan-patterns.md](artifact/references/scan-patterns.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands plus text, JSON, HTML, and SARIF report outputs]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Reports may be printed to the terminal or written to caller-selected output files; optional features can read local caches, write report/cache files, and perform a GitHub update check unless skipped.]\n\n## Skill Version(s):\n\n3.3.0 (source: SKILL.md frontmatter and evidence.release.version)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.2.0: 29 files, 70740 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (69659b), scripts/ci_templates/gitlab-ci.yml (528b), scripts/ci_templates/skill-scan.yml (2013b), scripts/global_exclude.py (4170b), scripts/malicious_db.py (11168b), scripts/rules_engine.py (4142b), scripts/rules/__init__.py (0b), scripts/rules/command_injection.yaml (489b), scripts/rules/credential_leak.yaml (860b), scripts/rules/dangerous_functions.yaml (592b), scripts/rules/path_traversal.yaml (503b), scripts/rules/prompt_injection.yaml (609b), scripts/rules/ssrf.yaml (492b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/ml_detect.py (7043b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), scripts/sandbox/system_monitor.py (9281b), scripts/supply_chain.py (28689b), skill-card.md (2782b), SKILL.md (26247b)\n\nFile v3.2.0:SKILL.md\n\n---\nname: skill-security-checker\ndescription: 'Skill Security — 安全审计扫描器，帮助你快速发现 Skill 中的安全风险。静态规则引擎（YAML规则包 rules/*.yaml，6 类规则可热插拔扩展）、提示注入 ML 语义检测（ONNX + 正则降级，降低绕过率）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描（Docker/Windows Sandbox）、供应链风险分析、CVE 离线缓存、恶意 Skill 指纹库、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。'\nversion: 3.2.0\n---\n\n\n# Skill Security\n\n> 一键扫描 Skill 安全风险，发布前最后一道安全闸门。\n\n## 概述\n\n本工具用于对 **WorkBuddy / ClawHub / SkillHub** 平台上发布的安全技能进行全方位安全合规扫描。它能帮你快速找出代码中的安全漏洞、不安全的依赖项、过度授权的权限配置，并以直观的评分等级和修复建议输出结果。\n\n**适用场景：**\n\n- 发布 Skill 前的安全检查\n- 评估第三方 Skill 的安全性\n- CI/CD 流水线中的自动化审查\n- Skill 质量评估与改进\n\n## 核心功能\n\n### 1. 静态扫描\n\n检测 Skill 文件中的安全漏洞：\n\n| 风险类型 | 检测内容 | 严重度 |\n|---------|---------|--------|\n| 提示注入 | 越狱指令、\"忽略原始指令\"、\"覆盖系统提示\"等文本 | 🔴 严重 |\n| 命令注入 | curl/wget 管道执行、反引号替换、$() 中执行 shell | 🔴 严重 |\n| SSRF/内网访问 | `127.0.0.1`、`10.x.x.x`、`192.168.x.x` | 🟠 高危 |\n| 凭证外泄 | 硬编码 API Key、Token、Password、Bearer Token | 🔴 严重 |\n| 路径遍历 | `../`、URL 编码绕过、绝对路径访问 | 🟠 高危 |\n| 危险函数 | `eval()`、`exec()`、`os.system()`、`pickle.load()` | 🟡 中等 |\n\n### 2. 依赖漏洞审计\n\n扫描 `requirements.txt`、`package.json`、`Pipfile`、`pyproject.toml` 等依赖文件，与内置的已知 CVE 漏洞库比对。\n\n目前覆盖 **26** 个常见高危依赖的已知漏洞：\n`requests`、`urllib3`、`flask`、`django`、`numpy`、`pillow`、`pyyaml`、`jinja2`、`cryptography`、`aiohttp`、`tqdm`、`setuptools`、`node-fetch`、`minimist`、`lodash`、`axios`、`express`、`vue`、`react`、`webpack`、`moment`、`npm`、`tough-cookie`、`word-wrap`、`protobuf`、`eslint`\n\n### 3. 权限审计\n\n检查 `allowed-tools` 声明是否有过度授权：\n\n- 声明了 Bash 但 description 中无对应使用场景 → 🟡 中等告警\n- Bash + Write 同时授权 → 🟠 高危告警\n- Bash + Exec 同时授权 → 🟠 高危告警\n- Bash + Read + Write + Edit 全量授权 → 🟠 高危告警\n\n### 4. 质量评分\n\n检查 SKILL.md 文档的完整性：\n\n| 检查项 | 要求 |\n|--------|------|\n| 必要字段 | `name`、`description`、`version` |\n| 命名规范 | kebab-case（小写字母+数字+连字符） |\n| description 长度 | 20-1024 字符 |\n| 版本号格式 | 语义化版本 (e.g., `1.0.0`) |\n| 硬编码路径 | 检测 `D:\\` 等绝对路径 |\n| 错误处理 | 文档中需提及异常处理策略 |\n\n### 5. 结构检查\n\n- 文件数量 ≤ 200\n- 总大小 ≤ 10MB\n- 缺少 README.md 时提醒\n\n### 6. 硬件感知并行（新增）\n\n自动检测当前设备的 CPU 核心数和可用内存，动态调整并发工作线程数（1-8 线程），在扫描速度和系统性能之间取得平衡。\n\n**检测逻辑：**\n- CPU 核心数 ÷ 2 = 最大线程数\n- 可用内存 < 2GB 时，线程数减半\n\n### 7. 更新检查（新增）\n\n工具运行时会自动检查 GitHub 上的新版本，发现更新时会在结果中提示用户升级。\n\n- ✅ 内置 **24 小时缓存**，避免频繁请求\n- ✅ 新增 `--skip-update` 参数可完全关闭此功能\n- ✅ 所有网络请求仅获取版本号，不下载任何内容\n\n### 8. `# nosec` 内联排除规则（新增）\n\n如果你确认某行代码是安全的，但触发了误报，可在该行末尾添加 `# nosec` 注释，扫描器将自动跳过该行。\n\n```python\n# 这行会被扫描器跳过\nos.system('ls')  # nosec\n```\n\n### 9. 实时恶意 Skill 库同步（新增）\n\n维护一份已知恶意 Skill 的 SHA256 指纹库（内置 341 条），扫描时对 Skill 目录下每个文件计算 SHA256，命中指纹即报高危，实现 100% 拦截已知恶意 Skill。\n\n- 内置 341 条恶意 Skill 指纹（PyPI 恶意包、npm 恶意包、已知攻击类型）\n- 文件内容变化即产生不同指纹，无法通过重命名或修改绕过\n- 可添加自定义指纹\n\n### 10. CVE 离线缓存（新增）\n\nCVE 数据库从\"每次请求 API\"升级为三级缓存架构，支持离线扫描：\n\n- **7 天全量缓存**：完整 CVE 库缓存到 `~/.workbuddy/cve_cache/cve_full_cache.json`\n- **每日增量更新**：当天查询过的 CVE 写入 `~/.workbuddy/cve_cache/cve_increment_cache.json`\n- **离线降级**：无网络时自动使用缓存，API 恢复后将新结果写回缓存\n\n### 11. 全局排除配置（新增）\n\n团队级 `.nosec.yml` 配置文件，按**类别、文件路径、正则模式**批量排除误报，替代逐行 `# nosec`。\n\n在 Skill 根目录创建 `.nosec.yml`：\n\n```yaml\nversion: 1\nexclude:\n  categories:\n    - quality_check\n    - path_traversal\n  files:\n    - \"scripts/audit.py\"\n  patterns:\n    - \".*test.*\"\n```\n\n- `categories`：排除整个扫描类别\n- `files`：排除指定文件的扫描\n- `patterns`：正则匹配排除行内容\n\n### 12. 动态沙箱执行扫描（新增）\n\n静态扫描只能看代码，恶意代码却可以通过**动态下载、加密载荷、条件触发**绕过。动态沙箱在**隔离环境中实际运行** Skill 脚本，捕获运行时行为，检出静态扫描完全无法发现的恶意动作。\n\n**隔离后端（自动选择）：**\n\n| 后端 | 说明 | 隔离手段 |\n|------|------|---------|\n| Docker | 首选，行为捕获最完整 | `--network=none` 默认断网、只读挂载、CPU/内存/PID 限额、`--cap-drop ALL` |\n| Windows Sandbox | Win10/11 专业版可用 | 运行时生成 `.wsb` 配置（断网 + 只读映射） |\n| 降级模式 | 无隔离环境时 | 仅做静态扫描并提示「建议在沙箱环境中进行动态扫描」 |\n\n**行为捕获维度：**\n\n- 网络请求（目标 IP / 域名 / 端口）\n- 文件读写（路径 / 模式）\n- 进程创建（命令行）\n- 环境变量读取\n- 动态代码执行（exec / compile）\n\n**异常行为标记：**\n\n| 异常行为 | 严重度 |\n|---------|--------|\n| 访问敏感路径（`~/.ssh`、`/etc/passwd`、`.aws`、`id_rsa` 等） | 🔴 严重 |\n| 网络活动 + 动态执行同时出现（疑似下载并执行远程载荷） | 🔴 严重 |\n| 向未知目标外联（非白名单域名） | 🟠 高危 |\n| 创建 shell / 解释器进程（bash、sh、powershell、cmd） | 🟠 高危 |\n| 读取疑似密钥环境变量（token、secret、apikey 等） | 🟡 中等 |\n\n**网络隔离与白名单：** 沙箱默认**完全断网**；如脚本确需联网，可用 `--allow-domain` 逐个放行可信域名，其余外联一律标记为高危。\n\n> ⚠️ 动态扫描为**可选功能**，需显式加 `--dynamic` 开启。若本机无 Docker / Windows Sandbox，工具会自动降级为纯静态扫描并给出提示，不会报错。\n\n### 13. 规则引擎 + YAML 规则包（新增）\n\nv3.2.0 起，6 类静态规则从硬编码重构为 YAML 规则包（`rules/*.yaml`），新增规则只需加 YAML 文件，无需修改代码。\n\n**规则包结构：**\n\n```\nscripts/rules/\n├── prompt_injection.yaml      # 提示注入规则（15 条正则）\n├── command_injection.yaml     # 命令注入规则（8 条正则）\n├── ssrf.yaml                  # SSRF/内网访问（11 条正则）\n├── credential_leak.yaml       # 凭证外泄（10 条正则）\n├── path_traversal.yaml        # 路径遍历（12 条正则）\n└── dangerous_functions.yaml   # 危险函数（11 条正则）\n```\n\n**YAML 文件格式示例：**\n```yaml\nname: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\npatterns:\n  - 'ignore previous instructions'\n  - 'system prompt override'\n  - 'jailbreak'\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static\n```\n\n**扩展方式：** 在 `rules/` 目录新增 `.yaml` 文件即可，工具自动加载。零依赖 YAML 解析（自研轻量实现，不依赖 PyYAML）。\n\n### 14. eBPF/ETW 系统级行为捕获（新增）\n\nv3.2.0 在沙箱 5 维行为捕获基础上，新增内核级系统调用监控，覆盖应用层无法看到的底层行为。\n\n| 后端 | 平台 | 要求 | 捕获内容 |\n|------|------|------|---------|\n| eBPF (bcc) | Linux | root + bcc 安装 | syscall：connect/send/recv、open/write、fork/exec、chmod/chown、uname/gethostname |\n| ETW | Windows | 管理员权限 | syscall：文件操作、进程创建、网络活动 |\n| 降级模式 | 无 eBPF/ETW | 自动提示「系统级行为捕获不可用」 |\n\n### 15. 提示注入 ML 语义检测（新增）\n\nv3.2.0 引入 ML 语义模型检测提示注入，降低正则匹配的绕过率。\n\n| 检测模式 | 触发条件 | 说明 |\n|---------|---------|------|\n| ONNX 语义模型 | `~/.workbuddy/models/prompt_injection.onnx` 存在 | 本地推理，离线可用 |\n| 正则降级 | ONNX 模型不可用时自动回退 | 20 条正则规则（含中文） |\n\n**性能：** 结果缓存（1 小时 TTL）+ 模型懒加载，不拖慢扫描。\n\n## 使用方法\n\n### 基本用法（命令行）\n\n```bash\n# 扫描一个 Skill 目录（文本输出）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n\n# 生成 JSON 报告\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format json\n\n# 生成 HTML 报告并保存为文件\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format html -o report.html\n\n# 跳过更新检查\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --skip-update\n\n# 开启动态沙箱执行扫描（需 Docker 或 Windows Sandbox）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic\n\n# 动态扫描 + 放行白名单域名 + 自定义超时（秒）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic --allow-domain api.github.com --sandbox-timeout 60\n\n# 启用供应链风险分析\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain\n\n# 启用恶意 Skill 指纹匹配\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --malicious-db\n\n# 启用全局排除配置（.nosec.yml）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --global-exclude\n\n# 同时启用所有高级功能\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --malicious-db --global-exclude\n\n# 启用 YAML 规则引擎（6 类规则可热插拔）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine\n\n# 启用 ML 提示注入语义检测（ONNX + 正则降级）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --ml-detect\n\n# 启用 eBPF/ETW 系统级行为捕获\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --syscall-monitor\n\n# v3.2.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine --ml-detect --syscall-monitor --malicious-db --global-exclude --supply-chain --dynamic\n```\n\n### 参数快查\n\n| 参数 | 说明 | 默认 |\n|------|------|------|\n| `skill_path` | 待扫描的 Skill 目录（必填） | — |\n| `--format` | 输出格式：`text` / `json` / `html` | `text` |\n| `-o, --output` | 报告输出文件路径 | 打印到终端 |\n| `--skip-update` | 跳过更新检查 | 关闭 |\n| `--dynamic` | 开启动态沙箱执行扫描 | 关闭 |\n| `--allow-domain` | 放行白名单域名（可重复） | 无（默认断网） |\n| `--sandbox-timeout` | 沙箱执行超时（秒） | 30 |\n| `--supply-chain` | 启用供应链风险分析 | 关闭 |\n| `--malicious-db` | 启用恶意 Skill 指纹匹配（341 条） | 关闭 |\n| `--global-exclude` | 启用 .nosec.yml 全局排除配置 | 关闭 |\n| `--rule-engine` | 启用 YAML 规则引擎（6 类规则包） | 关闭 |\n| `--syscall-monitor` | 启用 eBPF/ETW 系统级行为捕获 | 关闭 |\n| `--ml-detect` | 启用 ML 提示注入语义检测 | 关闭 |\n\n### 在 WorkBuddy 中触发\n\n直接告诉 WorkBuddy，触发词覆盖面广：\n\n- **「安全审计」+ 技能路径** → `帮我安全审计 D:\\skill\\my-skill`\n- **「扫描」+ Skill** → `扫描这个 skill 有没有安全问题`\n- **「发布前检查」+ 技能名** → `发布前帮我检查一遍 my-skill`\n- **「安全检测」+ 路径** → `帮我对这个路径做一份安全检测`\n- **「代码审计」+ 文件夹** → `对 D:\\skill\\project 做代码审计`\n- **「Skill 安全吗」** → `这个 skill 安全吗`\n\n## 输出说明\n\n### 评分等级\n\n评分从 100 分开始扣分，不同等级对应不同发布建议：\n\n| 等级 | 分数区间 | 发布建议 | 含义 |\n|------|---------|---------|------|\n| 🟢 A | 90-100 | ✅ 可安全发布 | 优秀 |\n| 🟣 B | 75-89 | ⚠️ 建议修复后发布 | 良好 |\n| 🟡 C | 60-74 | ⚠️ 需要修复 | 一般 |\n| 🟠 D | 40-59 | ❌ 不建议发布 | 较差 |\n| 🔴 F | 0-39 | ❌ 禁止发布 | 危险 |\n\n### 严重度分类\n\n- 🔴 **严重**（-25 分/个）：提示注入、命令注入、凭证外泄 → 必须立即修复\n- 🟠 **高危**（-15 分/个）：SSRF、路径遍历、危险权限组合 → 建议尽快修复\n- 🟡 **中等**（-8 分/个）：危险函数、权限过度授权、description 过短 → 建议修复\n- 🔵 **低危**（-3 分/个）：命名规范问题、缺少错误处理说明 → 建议优化\n- ⚪ **信息**（0 分）：更新版本提示、参考信息 → 仅供参考\n\n### 返回码（for CI/CD 集成）\n\n| 退出码 | 含义 | CI 行为建议 |\n|--------|------|------------|\n| 0 | 无问题或仅低危 | ✅ 通过 |\n| 1 | 存在中等问题 | ⚠️ 警告 |\n| 2 | 存在严重/高危问题 | ❌ 失败，阻断发布 |\n\n## 扫描排除规则\n\n以下内容将被自动跳过，不参与扫描，不计入风险：\n\n### 自动排除的文件类型\n\n1. **可执行/脚本**：`.bat`、`.cmd`、`.ps1`、`.vbs`、`.exe`、`.dll`、`.msi`、`.sh`、`.com`、`.scr`、`.hta`、`.reg`\n2. **Office 文档**：`.docx`、`.xlsx`、`.pptx`、`.doc`、`.xls`、`.ppt`、`.xlsm`、`.docm`、`.pptm`\n3. **压缩包/镜像**：`.iso`、`.dmg`、`.zip`、`.rar`、`.7z`、`.tar`、`.gz`、`.apk`、`.jar`\n4. **缓存/隐藏**：`.DS_Store`、`.pyc`、`.pyo`、`.so`、`.swp`、`.env`、`.log`、`.tmp`\n\n### 自动排除的目录\n\n`__pycache__`、`.git`、`.venv`、`.pytest_cache`、`node_modules`、`.idea`、`.vscode`\n\n## 扫描示例\n\n```\n============================================================\n  Skill Security Audit Report\n============================================================\n  Skill: my-cool-skill\n  Path: D:\\skill\\my-cool-skill\n  Time: 2026-07-13T14:32:10\n  Files: 15 scanned, 2 skipped\n============================================================\n\n  Score: 82/100 (Grade: B)\n  Found 2 medium issues.\n\n  ──────────────────────────────────────────────────────────\n  [MED]   quality_check     SKILL.md         Missing version field\n  [MED]   quality_check     SKILL.md         No error handling mentioned\n  ──────────────────────────────────────────────────────────\n\n  Fix suggestions:\n    [quality_check] Add version field in frontmatter\n    [quality_check] Add error handling docs in SKILL.md\n\n  Feedback: njskills@agent.qq.com\n============================================================\n```\n\n## 常见问答（FAQ）\n\n**Q: 扫描会很慢吗？需要联网吗？**\nA: 扫描本身不会慢。工具会自动检测你的 CPU 核心数和可用内存，动态调整并行数（1-8 线程），在本地离线完成扫描，不联网也不会影响结果。可选的更新检查（24 小时缓存）可以通过 `--skip-update` 关闭。\n\n**Q: 扫描结果为 F 等级怎么办？**\nA: 请按照输出的修复建议逐一修复问题，特别是严重和高危问题。修复后可重新扫描确认分数是否提升。常见修复步骤：\n1. 移除所有硬编码的敏感信息（API Key、Password 等）→ 添加到 `.env` 或环境变量\n2. 避免使用 `eval()`/`exec()`/`os.system()` → 使用 `subprocess.run()` 并关闭 `shell=True`\n3. 确保所有依赖升级到安全版本（见报告中建议的版本号）\n4. 清理硬编码的内网 IP，改用域名或环境变量\n\n**Q: 报告说发现了命令注入，但我只是在说明文档中写了代码示例？**\nA: 代码示例中如果包含了 curl、wget、shell 等相关关键词，会被模式匹配命中。这是预期行为——**请在代码示例末尾添加 `# nosec` 注释**即可跳过该行。\n\n**Q: 这个工具支持扫描 Python 以外的文件吗？**\nA: 支持。除了 `.py` 文件，还可以扫描 `.js`、`.ts`、`.json`、`.yaml`、`.md`、`.html` 等所有文本格式文件。Office 文档和可执行文件会被自动跳过。\n\n**Q: 检测出误报怎么办？**\nA: 主要有两种方式：\n1. **临时方案**：在代码行末尾添加 `# nosec` 注释\n2. **永久方案**：联系 njskills@agent.qq.com 提供误报规则详情（文件路径和匹配模式），我们会优化规则\n\n**Q: 用于公司 CI/CD 流水线，需要安装什么依赖吗？**\nA: 不需要。本工具只需要 **Python 3.8+** 标准库，无第三方依赖。可集成到 GitHub Actions、GitLab CI、Jenkins 等任意 CI 平台。（注：动态扫描 `--dynamic` 需额外具备 Docker 或 Windows Sandbox 环境。）\n\n**Q: 我没有 Docker，能用动态扫描吗？**\nA: 可以直接加 `--dynamic`，工具会自动探测环境。若无 Docker / Windows Sandbox，会自动降级为纯静态扫描并提示「建议在沙箱环境中进行动态扫描」，不会报错。想获得完整行为捕获，推荐安装 Docker Desktop。\n\n**Q: 动态扫描会不会有风险？会不会拖慢我电脑？**\nA: 动态扫描在隔离环境中运行：Docker 用 `--network=none` 断网 + 只读挂载 + CPU/内存/PID 限额；Windows Sandbox 断网 + 只读映射。默认单次超时 30 秒，CPU 上限自动取核心数的一半，不会拖慢日常使用。被扫描代码无法接触你的真实文件系统和网络。\n\n**Q: 恶意 Skill 指纹库能覆盖未知的新型恶意 Skill 吗？**\nA: 指纹库覆盖 341 条已知恶意 Skill，对于已知的恶意包（如 PyPI 恶意依赖、npm 钓鱼包）能实现 100% 拦截。但攻击者如果修改代码、混淆变量名，SHA256 指纹会变化，此时需要结合静态扫描的规则（提示注入、命令注入等）来发现。建议同时开启 `--malicious-db` 和静态扫描，双重保障。\n\n**Q: CVE 离线缓存能维持多久？无网环境能用吗？**\nA: 7 天全量缓存 + 每日增量更新。无网络环境下，工具自动使用本地缓存，CVE 漏洞扫描功能仍可正常使用（使用最近一次缓存数据）。API 恢复后，新查询到的 CVE 结果会自动写回缓存。缓存文件存放在 `~/.workbuddy/cve_cache/`。\n\n**Q: `.nosec.yml` 和 `# nosec` 注释有什么区别？哪个优先？**\nA: `# nosec` 是单行临时排除，`.nosec.yml` 是团队级全局配置，支持按类别、文件路径、正则模式批量排除。**过滤顺序**：`# nosec` 行级排除先应用，然后是 `.nosec.yml` 全局排除。建议团队统一使用 `.nosec.yml`，个人调试用 `# nosec`。\n\n**Q: 规则引擎和原来的静态扫描有什么区别？**\nA: 规则引擎将 6 类规则从代码硬编码重构为 YAML 文件（`rules/*.yaml`），新增规则只需添加 YAML 文件，无需修改 `--rule-engine` 开启。未开启时自动回退到原有硬编码规则，完全兼容。\n\n**Q: ML 提示注入检测需要联网吗？需要安装额外依赖吗？**\nA: 不需要联网，不需要额外依赖。ML 检测使用 ONNX Runtime（纯 CPU 推理），模型存放在 `~/.workbuddy/models/prompt_injection.onnx`。无模型时自动降级到正则规则包（含 20 条规则，含中文），零外部依赖。\n\n**Q: eBPF/ETW 系统级捕获需要什么权限？**\nA: Linux 需要 root 权限 + bcc 框架；Windows 需要管理员权限。无权限时自动降级，提示「系统级行为捕获不可用」，不影响其他扫描功能。\n\n## 安全声明\n\n- **默认只做静态分析，不会执行被扫描的代码**（静态模式仅读取文件，不写入）\n- **动态扫描（`--dynamic`）需显式开启**，且仅在隔离环境（Docker / Windows Sandbox）中执行被扫描代码，沙箱**默认断网**、只读挂载、CPU/内存限额，绝不在宿主机直接运行\n- **不会上传任何文件内容到外部服务器**\n- **更新检查仅获取 GitHub Release 标题，不下载任何附件**\n- **所有扫描在本地完成，保护你的代码隐私**\n- Windows Sandbox 的 `.wsb` 配置在运行时动态生成到临时目录，用完即删，不写入 Skill 仓库\n- `.nosec.yml` 全局排除配置仅影响本团队扫描流程，不会降低安全性；被排除的行仍可在完整报告中查看（`--format json` 包含 `excluded` 字段）\n\n## 反馈与支持\n\n如有误报反馈、规则改进建议或功能需求，欢迎联系：\n\n📧 **njskills@agent.qq.com**\n\n你的反馈将直接帮助我们升级规则库，完善检测能力。\n\n## 更新日志\n\n| v3.2.0 | 2026-08-17 | 增加：规则引擎模块（scripts/rules_engine.py），将 6 类静态规则从硬编码重构为 YAML 规则包（rules/*.yaml），支持热插拔扩展，新增规则只需加 YAML 文件不改代码；增加：scripts/rules/ 目录包含 6 个规则包（prompt_injection/command_injection/ssrf/credential_leak/path_traversal/dangerous_functions），共 67 条正则；增加：系统级行为捕获模块（scripts/sandbox/system_monitor.py），支持 eBPF（Linux）/ ETW（Windows）内核级 syscall 监控，无 eBPF/ETW 时自动降级；\n\nArchive v3.1.0: 19 files, 57096 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (61005b), scripts/ci_templates/gitlab-ci.yml (528b), scripts/ci_templates/skill-scan.yml (2013b), scripts/global_exclude.py (4170b), scripts/malicious_db.py (11168b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), scripts/supply_chain.py (28689b), skill-card.md (2435b), SKILL.md (21370b)\n\nArchive v3.0.0: 17 files, 49216 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (57288b), scripts/ci_templates/gitlab-ci.yml (528b), scripts/ci_templates/skill-scan.yml (2013b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), scripts/supply_chain.py (25451b), skill-card.md (2575b), SKILL.md (17230b)\n\nArchive v2.0.0: 14 files, 37757 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (51826b), scripts/sandbox/__init__.py (954b), scripts/sandbox/backends/__init__.py (1185b), scripts/sandbox/backends/degraded.py (619b), scripts/sandbox/backends/docker_backend.py (4178b), scripts/sandbox/backends/winsandbox_backend.py (3800b), scripts/sandbox/monitor.py (4215b), scripts/sandbox/report.py (695b), scripts/sandbox/rules.py (5375b), scripts/sandbox/runner.py (5028b), skill-card.md (2170b), SKILL.md (16304b)\n\nArchive v1.3.0: 5 files, 22145 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (46462b), skill-card.md (2534b), SKILL.md (11688b)\n\nArchive v1.2.0: 5 files, 19852 bytes\n\nFiles: _meta.json (141b), references/scan-patterns.md (4671b), scripts/audit.py (43582b), skill-card.md (2259b), SKILL.md (8636b)","readmeExcerpt":"Skill: skill-security-checker Owner: fyniujin Summary: Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.js","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 1. 快扫：30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 + 一句话理由\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --quick\n# 2. 全量：CI/CD 用 JSON/SARIF，安全工程师看 HTML\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode full --format sarif -o report.sarif.json\n# 3. 口语触发：直接对 WorkBuddy 说「审一下这个 skill」+ 路径，自动快扫"},{"language":"python","snippet":"# 这行会被扫描器跳过\nos.system('ls')  # nosec"},{"language":"yaml","snippet":"version: 1\nexclude:\n  categories:\n    - quality_check\n    - path_traversal\n  files:\n    - \"scripts/audit.py\"\n  patterns:\n    - \".*test.*\""},{"language":"text","snippet":"scripts/rules/\n├── prompt_injection.yaml      # 提示注入规则（15 条正则）\n├── command_injection.yaml     # 命令注入规则（8 条正则）\n├── ssrf.yaml                  # SSRF/内网访问（11 条正则）\n├── credential_leak.yaml       # 凭证外泄（10 条正则）\n├── path_traversal.yaml        # 路径遍历（12 条正则）\n└── dangerous_functions.yaml   # 危险函数（11 条正则）"},{"language":"yaml","snippet":"name: prompt_injection\ndisplay_name: 提示注入\nseverity: critical\ndescription: 检测提示注入、越狱指令、系统提示覆盖等风险\npatterns:\n  - 'ignore previous instructions'\n  - 'system prompt override'\n  - 'jailbreak'\nsuggestion: 移除提示注入或越狱指令文本；如为文档示例，请添加 # nosec 注释\nsource: static"},{"language":"bash","snippet":"# 扫描一个 Skill 目录（文本输出）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\"\n\n# 生成 JSON 报告\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format json\n\n# 生成 HTML 报告并保存为文件\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --format html -o report.html\n\n# 跳过更新检查\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --skip-update\n\n# 开启动态沙箱执行扫描（需 Docker 或 Windows Sandbox）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic\n\n# 动态扫描 + 放行白名单域名 + 自定义超时（秒）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --dynamic --allow-domain api.github.com --sandbox-timeout 60\n\n# 启用供应链风险分析\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain\n\n# 启用恶意 Skill 指纹匹配\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --malicious-db\n\n# 启用全局排除配置（.nosec.yml）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --global-exclude\n\n# 同时启用所有高级功能\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --supply-chain --malicious-db --global-exclude\n\n# 启用 YAML 规则引擎（6 类规则可热插拔）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine\n\n# 启用 ML 提示注入语义检测（ONNX + 正则降级）\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --ml-detect\n\n# 启用 eBPF/ETW 系统级行为捕获\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --syscall-monitor\n\n# v3.2.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --rule-engine --ml-detect --syscall-monitor --malicious-db --global-exclude --supply-chain --dynamic\n\n# v3.3.0 污点追踪\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --taint-tracking\n\n# v3.3.0 社区规则\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --community-rules \"D:\\path\\to\\community-rules\"\n\n# v3.3.0 全功能模式\npython D:\\skill\\skill-security-checker\\scripts\\audi"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: skill-security-checker\ndescription: 'Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.json / poetry.lock，版本区间级精确匹配）、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。'\nversion: 3.5.5\n---\n\n\n# Skill Security\n\n> 一键扫描 Skill 安全风险，发布前最后一道安全闸门。\n\n## 快速开始（3 行）\n\n```bash\n# 1. 快扫：30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 + 一句话理由\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --quick\n# 2. 全量：CI/CD 用 JSON/SARIF，安全工程师看 HTML\npython D:\\skill\\skill-security-checker\\scripts\\audit.py \"D:\\skill\\你的技能名\" --mode full --format sarif -o report.sarif.json\n# 3. 口语触发：直接对 WorkBuddy 说「审一下这个 skill」+ 路径，自动快扫\n```\n\n## 概述\n\n本工具用于对 **WorkBuddy / ClawHub / SkillHub** 平台上发布的安全技能进行全方位安全合规扫描。它能帮你快速找出代码中的安全漏洞、不安全的依赖项、过度授权的权限配置，并以直观的评分等级和修复建议输出结果。\n\n**适用场景：**\n\n- 发布 Skill 前的安全检查\n- 评估第三方 Skill 的安全性\n- CI/CD 流水线中的自动化审查\n- Skill 质量评估与改进\n\n## 核心功能\n\n### 1. 静态扫描\n\n检测 Skill 文件中的安全漏洞：\n\n| 风险类型 | 检测内容 | 严重度 |\n|---------|---------|--------|\n| 提示注入 | 越狱指令、\"忽略原始指令\"、\"覆盖系统提示\"等文本 | 🔴 严重 |\n| 命令注入 | curl/wget 管道执行、反引号替换、$() 中执行 shell | 🔴 严重 |\n| SSRF/内网访问 | `127.0.0.1`、`10.x.x.x`、`192.168.x.x` | 🟠 高危 |\n| 凭证外泄 | 硬编码 API Key、Token、Password、Bearer Token | 🔴 严重 |\n| 路径遍历 | `../`、URL 编码绕过、绝对路径访问 | 🟠 高危 |\n| 危险函数 | `eval()`、`exec()`、`os.system()`、`pickle.load()` | 🟡 中等 |\n\n### 2. 依赖漏洞审计\n\n扫描 `requirements.txt`、`package.json`、`Pipfile`、`pyproject.toml` 等依赖文件，与内置的已知 CVE 漏洞库比对。\n\n目前覆盖 **26** 个常见高危依赖的已知漏洞：\n`requests`、`urllib3`、`flask`、`django`、`numpy`、`pillow`、`pyyaml`、`jinja2`、`cryptography`、`aiohttp`、`tqdm`、`setuptools`、`node-fetch`、`minimist`、`lodash`、`axios`、`express`、`vue`、`react`、`webpack`、`moment`、`npm`、`tough-cookie`、`word-wrap`、`protobuf`、`eslint`\n\n### 3. 权限审计\n\n检查 `allowed-tools` 声明是否有过度授权：\n\n- 声明了 Bash 但 description 中无对应使用场景 → 🟡 中等告警\n- Bash + Write 同时授权 → 🟠 高危告警\n- Bash + Exec 同时授权 → 🟠 高危告警\n- Bash + Read + Write + Edit 全量授权 → 🟠 高危告警\n\n### 4. 质量评分\n\n检查 SKILL.md 文档的完整性：\n\n| 检查项 | 要求 |\n|--------|------|\n| 必要字段 | `name`、`description`、`version` |\n| 命名规范 | kebab-case（小写字母+数字+连字符） |\n| description 长度 | 20-1024 字符 |\n| 版本号格式 | 语义化版本 (e.g., `1.0.0`) |\n| 硬编码路径 | 检测 `D:\\` 等绝对路径 |\n| 错误处理 | 文档中需提及异常处理策略 |\n\n### 5. 结构检查\n\n- 文件数量 ≤ 200\n- 总大小 ≤ 10MB\n- 缺少 README.md 时提醒\n\n### 6. 硬件感知并行（新增）\n\n自动检测当前设备的 CPU 核心数和可用内存，动态调整并发工作线程数（1-8 线程），在扫描速度和系统性能之间取得平衡。\n\n**检测逻辑：**\n- CPU 核心数 ÷ 2 = 最大线程数\n- 可用内存 < 2GB 时，线程数减半\n\n### 7. 更新检查（新增）\n\n工具运行时会自动检查 GitHub 上的新版本，发现更新时会在结果中提示用户升级。\n\n- ✅ 内置 **24 小时缓存**，避免频繁请求\n- ✅ 新增 `--skip-update` 参数可完全关闭此功能\n- ✅ 所有网络请求仅获取版本号，不下载任何内容\n\n### 8. `# nosec` 内联排除规则（新增）\n\n如果你确认某行代码是安全的，但触发了误报，可在该行末尾添加 `# nosec` 注释，扫描器将自动跳过该行。\n\n```python\n# 这行会被扫描器跳过\nos.system('ls')  # nosec\n```\n\n### 9. 实时恶意 Skill 库同步（新增）\n\n维护一份已知恶意 Skill 的 SHA256 指纹库（内置 341 条），扫描时对 Skill 目录下每个文件计算 SHA256，命中指纹即报高危，实现"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7chdrwbdhaqkwajcyhtfvjx989ddb1\",\n  \"slug\": \"skill-security-checker\",\n  \"version\": \"3.5.5\",\n  \"publishedAt\": 1791544785736\n}"},{"path":"references/scan-patterns.md","content":"# 扫描规则参考文档\n\n本文件详细定义了 Skill Security 使用的检测逻辑。\n\n## 一、提示注入检测\n\n检测试图覆盖或绕过系统指令的恶意提示。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配「忽略先前/上面/所有」+「指令/提示/规则」组合 | 尝试让 AI 忽略原始系统指令 |\n| 匹配「系统提示」+「覆盖/替换/忽略/绕过」组合 | 直接覆盖系统提示 |\n| 匹配「你现在是...」 | 强制 AI 扮演新角色绕过限制 |\n| 匹配「越狱」类关键词 | 触发越狱模式 |\n| 匹配「做任何事」模式 | 解除限制模式 |\n| 匹配「假装你是」 | 假装成其他身份 |\n| 匹配「角色扮演为」 | 绕过角色限制 |\n| 匹配「覆盖/禁用」+「安全/过滤/限制」 | 禁用安全过滤 |\n| 匹配「忘记一切」 | 让 AI 忘记所有指令 |\n| 匹配「重新开始」 | 重置指令 |\n| 匹配「重置指令」 | 重置指令 |\n\n## 二、命令注入检测\n\n检测通过用户输入执行系统命令的代码。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 curl/wget 管道连接 shell | 从远程下载脚本并执行 |\n| 匹配 fetch+eval 组合 | 执行远程代码 |\n| 匹配 eval/exec/system + $_GET/$_POST | PHP 命令注入 |\n| 匹配 passthru/shell_exec | PHP 命令执行 |\n| 匹配反引号执行 curl/wget/nc | 命令替换执行 |\n| 匹配 $() 内执行 curl/wget/nc | 命令替换执行 |\n\n## 三、SSRF/内网访问\n\n检测硬编码的内网地址。\n\n| 地址段 | 说明 |\n|--------|------|\n| 127.0.0.1 | 本地回环 |\n| 10.0.0.0/8 | 私有网络 A 类 |\n| 172.16.0.0/12 | 私有网络 B 类 |\n| 192.168.0.0/16 | 私有网络 C 类 |\n| fc00::/7 | IPv6 私有地址 |\n| fe80::/10 | IPv6 链路本地 |\n| 0.0.0.0 | 全地址监听 |\n\n## 四、凭证外泄\n\n检测硬编码的敏感凭证。\n\n| 检测类型 | 说明 |\n|---------|------|\n| API Key | 20位以上字母数字组合 |\n| Secret Key | 20位以上字母数字组合 |\n| Access Token | 20位以上字母数字组合 |\n| Private Key | 40位以上 base64 字符 |\n| Password | 8位以上明文密码 |\n| Bearer Token | Authorization 头 |\n| AWS Access Key | AKID 开头 |\n| GitHub Token | ghp_/gho_ 开头 |\n| OpenAI Key | sk- 开头 |\n| 阿里云 AccessKey | AKID 开头 |\n\n## 五、路径遍历\n\n检测 ../ 等模式访问预期外的文件系统路径。\n\n| 检测逻辑 | 说明 |\n|---------|------|\n| 匹配 ../ 或 ..\\ | 目录穿越 |\n| 匹配 URL 编码 %2f%2e%2e | 编码绕过 |\n| 匹配 /etc/passwd 或 /etc/shadow | 系统文件访问 |\n| 匹配 c:\\windows\\ | Windows 系统目录 |\n\n## 六、危险函数\n\n| 函数 | 风险 |\n|------|------|\n| eval() | 执行任意代码 |\n| exec() | 执行任意代码 |\n| os.system() | 执行系统命令 |\n| subprocess(shell=True) | 命令注入 |\n| pickle.load() | 反序列化漏洞 |\n| yaml.load() (无 Loader) | 反序列化漏洞 |\n| marshal.load() | 执行字节码 |\n\n## 七、已知漏洞依赖\n\n当检测到以下依赖版本低于安全版本时发出告警：\n\n| 依赖包 | 安全版本 | 主要 CVE |\n|--------|----------|----------|\n| requests | ≥2.32.0 | CVE-2024-35195 |\n| urllib3 | ≥2.2.0 | CVE-2024-37891 |\n| flask | ≥3.0.0 | CVE-2023-30861 |\n| django | ≥4.2.0 | 多个高危 |\n| numpy | ≥1.22.0 | 缓冲区溢出 |\n| pillow | ≥10.0.0 | 多个 CVE |\n| pyyaml | ≥6.0 | CVE-2020-14343 |\n| jinja2 | ≥3.1.0 | CVE-2024-22416 |\n| cryptography | ≥42.0.0 | 安全修复 |\n| aiohttp | ≥3.9.0 | CVE-2024-23334 |\n| tqdm | ≥4.66.0 | CVE-2024-34062 |\n| setuptools | ≥65.5.0 | CVE-2022-40897 |\n| node-fetch | ≥2.6.7 | CVE-2022-0235 |\n| minimist | ≥1.2.6 | CVE-2021-44906 |\n| lodash | ≥4.17.21 | CVE-2021-23337 |\n| axios | ≥0.21.1 | CVE-2021-3749 |\n| express | ≥4.17.3 | 多个修复 |\n\n## 八、误报处理\n\n某些合法代码可能触发告警，属于正常误报场景：\n\n1. 文档/示例中包含攻击模式说明（应确保在注释或字符串中）\n2. 测试代码包含恶意 payload 样例\n3. 安全工具本身的检测规则\n4. 故意作为反例演示的代码\n\n对于确认的误报，可在代码行尾添加 `# nosec` 注释跳过检测。\n\n## 九、评分算法\n\n评分从 100 分开始扣分：\n\n| 严重度 | 扣分 |\n|--------|------|\n| 🔴 严重 | -25分/个 |\n| 🟠 高危 | -15分/个 |\n| 🟡 中等 | -8分/个 |\n| 🔵 低危 | -3分/个 |\n| ⚪ 信息 | 0分 |\n\n最低分数为 0。\n\n等级划分：\n\n| 分数 | 等级 | 发布建议 |\n|------|------|----------|\n| 90-100 | A | ✅ 可发布 |\n| 75-89 | B | ⚠️ 建议修复后发布 |\n| 60-74 | C | ⚠️ 需要修复 |\n| 40-59 | D | ❌ 不建议发布 |\n| 0-39 | F | ❌ 禁止发布 |"},{"path":"scripts/ci_templates/gitlab-ci.yml","content":"stages:\n  - security\n\nskill-security-scan:\n  stage: security\n  image: python:3.11-slim\n  script:\n    - python scripts/audit.py . --format json -o report.json --skip-update\n    - |\n      SCORE=$(python -c \"import json; print(json.load(open('report.json'))['score'])\")\n      echo \"Quality Score: $SCORE\"\n      if [ \"$SCORE\" -lt 70 ]; then\n        echo \"Score below threshold (70), failing.\"\n        exit 1\n      fi\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n    when: always\n  only:\n    - merge_requests\n    - main"},{"path":"scripts/ci_templates/skill-scan.yml","content":"name: Skill Security Scan\n\non:\n  push:\n    branches: [main, master]\n  pull_request:\n    branches: [main, master]\n\njobs:\n  security-scan:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      security-events: write\n      pull-requests: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.11'\n      - name: Run skill-security-checker\n        run: |\n          python scripts/audit.py . \\\n            --format sarif \\\n            -o sarif-output.sarif \\\n            --skip-update\n        continue-on-error: true\n      - name: Upload SARIF to GitHub Code Scanning\n        uses: github/codeql-action/upload-sarif@v3\n        if: always()\n        with:\n          sarif_file: sarif-output.sarif\n      - name: Gate on quality score\n        run: |\n          SCORE=$(python scripts/audit.py . --format json --skip-update \\\n                  | python -c \"import sys,json; print(json.load(sys.stdin)['score'])\")\n          echo \"Quality Score: $SCORE\"\n          if [ \"$SCORE\" -lt 70 ]; then\n            echo \"Score below threshold (70), failing.\"\n            exit 1\n          fi\n      - name: Comment PR with scan results\n        if: github.event_name == 'pull_request'\n        uses: actions/github-script@v7\n        with:\n          script: |\n            const fs = require('fs');\n            const report = JSON.parse(\n              fs.readFileSync('sarif-output.sarif', 'utf8')\n            );\n            const stats = report.runs[0]?.results?.length ?? 0;\n            const body = [\n              '## 🔒 Skill Security Scan',\n              '',\n              `Found **${stats}** issue(s).`,\n              '',\n              'Full details in the **Security → Code Scanning** tab.',\n            ].join('\\n');\n            github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: context.issue.number,\n              body: body,\n            });"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.json / poetry.lock，版本区间级精确匹配）、恶意 Skill 指纹库、健康度与合规检查（质量+结构+权限合并）、全局排除配置、CI/CD 集成、JSON/HTML/SARIF 报告生成。 Skill: skill-security-checker Owner: fyniujin Summary: Skill Security — 安全审计扫描器，审一下这个 skill、装之前帮我查查、这个 skill 安全吗？一键快扫 30 秒出三档裁定（✅干净/⚠️可疑/🚫恶意）+ Top3 风险 + 一句话理由；全量模式覆盖轻量 SAST 污点追踪（Python AST + JS 词法近似，source→sink 证据链降误报）、规则引擎（YAML 规则包热插拔扩展）、社区规则（schema 校验 + 来源记录 + 签名验证）、提示注入 ML 语义检测（ONNX + 正则降级）、系统级行为捕获（eBPF Linux / ETW Windows）、动态沙箱执行扫描、供应链风险分析、OSV.dev 离线数据包（全生态 CVE 覆盖，零密钥）+ 锁文件深度解析（requirements.txt / package-lock.js","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1294,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T03:08:59.174Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T03:08:59.174Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:31:54.302Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}