mcpField
S
skill-safety-verifier

skill-safety-verifier

github.com/ttttstc安全239 次安装34 周前更新
代码仓库

关于 skill-safety-verifier

面向 AI Agent 外部技能的安全审查技能,可在安装前或安装后进行评估。它综合网络、代码漏洞和权限检查进行风险分类,并使用 GitHub Advisory API 数据辅助评估。

主要功能

  1. 01检查网络与套接字活动
  2. 02评估代码漏洞和模式
  3. 03评估权限范围
  4. 04按风险级别分类结果
  5. 05使用 GitHub Advisory API 数据

适用场景

  1. 01安装前评估技能
  2. 02验证已安装的技能
  3. 03启用自动安装前审查风险

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ttttstc/skill-safety-verifier --skill skill-safety-verifier

安装后在 Claude Code 中输入/skill-safety-verifier确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.gitignore
LICENSE
README.md
README_zh.md
analyzer.py
requirements.txt
risk_radar.py
setup.py
bin/
skill-safety-check

详细介绍

技能安全验证器

面向 AI Agent 的安全优先技能审查

概述

技能安全验证器 是一款安全优先的技能审查工具,用于在安装任何外部技能前进行安全检查。

这为何重要

AI Agent 以较高权限运行,可以:

  • 执行任意命令
  • 访问文件系统
  • 发起网络请求
  • 读取环境变量

未经审查的技能 = 安全风险


工作流

┌─────────────────────────────────────────────────────────────────────────┐
│                        SKILL SAFETY VERIFIER FLOW                       │
└─────────────────────────────────────────────────────────────────────────┘

    User Request
         │
         ▼
┌─────────────────────┐
│  1. Fetch Skill    │
│  - Clone/Extract    │
│  - Read SKILL.md    │
└─────────────────────┘
         │
         ▼
┌─────────────────────┐
│  2. Parallel Scan  │
│  ┌───────────────┐  │
│  │ Socket Check  │  │  ← Check outbound connections
│  └───────────────┘  │
│  ┌───────────────┐  │
│  │ Vuln Scan     │  │  ← Query GitHub Advisory API
│  └───────────────┘  │
│  ┌───────────────┐  │
│  │ Code Patterns │  │  ← Scan dangerous functions
│  └───────────────┘  │
└─────────────────────┘
         │
         ▼
┌─────────────────────┐
│  3. Risk Score     │
│  - Calculate total │  ← Network + Vuln + Permission
│  - Classify level  │
└─────────────────────┘
         │
         ▼
┌─────────────────────┐
│  4. Present Result │
│  - Risk Radar      │
│  - Warnings       │
│  - Recommendation │
└─────────────────────┘
         │
         ▼
    User Decision

核心职责

1. 风险评估

从三个维度评估技能:

维度检查内容风险等级
Socket/网络出站连接、API 调用严重
代码质量Snyk 漏洞、依赖项高
权限文件访问、命令执行高
2. 危险信号检测

常见的可疑模式:

red_flags:
  network:
    - "Suspicious domain (non-standard TLD)"
    - "Hardcoded IP addresses"
    - "DNS lookups to unknown domains"
    - "Excessive outbound connections"
  
  execution:
    - "os.system() / subprocess without sanitization"
    - "eval() / exec() usage"
    - "Shell injection patterns"
    - "Download and execute code"
  
  data:
    - "Reading sensitive env vars"
    - "Exfiltrating files"
    - "Logging keystrokes"
    - "Credential harvesting"
  
  permissions:
    - "Overbroad file permissions"
    - "sudo/root without prompt"
    - "Full disk access requests"
3. 风险分类
┌─────────────────────────────────────────────────────────────┐
│                    RISK CLASSIFICATION                      │
├──────────────┬──────────────┬─────────────────────────────┤
│    Level     │    Score     │        Action               │
├──────────────┼──────────────┼─────────────────────────────┤
│   🟢 Safe    │    0-10      │  Install & use freely       │
│   🟡 Low     │    11-30     │  Install with caution       │
│   🟠 Medium  │    31-60     │  Review code, then decide   │
│   🔴 High    │    61-100    │  Do not install            │
└──────────────┴──────────────┴─────────────────────────────┘

评估标准

Socket/网络风险
警报数量风险分数
00
1-210
3-525
>550
代码/漏洞风险
严重程度分数
严重25
高15
中10
低5
GitHub Advisory API 集成

使用 GitHub Advisory API 获取真实漏洞数据,且不阻塞安装流程。

API: https://api.github.com/advisories
认证: 无需 Token(匿名每小时 60 次)
TTL: 本地缓存 24 小时

流程:

1. 用户触发安装 → 立即返回 "安检中..."
2. 后台并行: 克隆代码 + 查缓存 + 异步请求 API
3. 缓存命中? Yes → 直接返回 | No → 等 API (超时 5s)
4. 合并 Socket分析 + 代码模式 + 漏洞数据 → 呈现
权限范围风险
范围分数
只读0
网络调用10
文件写入15
命令执行25
完整系统访问权限50

工作流

User: "Install skill X"
         │
         ▼
┌─────────────────────┐
│  1. Fetch Skill    │
│  - Clone/Extract    │
│  - Read SKILL.md    │
└─────────────────────┘
         │
         ▼
┌─────────────────────┐
│  2. Security Scan  │
│  - Socket alerts    │
│  - Snyk vulnerabilities│
│  - Code patterns    │
└─────────────────────┘
         │
         ▼
┌─────────────────────┐
│  3. Risk Score     │
│  - Calculate total │
│  - Classify level  │
└─────────────────────┘
         │
         ▼
┌─────────────────────┐
│  4. Present Result │
│  - Risk level      │
│  - Warnings        │
│  - Recommendation  │
└─────────────────────┘
         │
         ▼
User Decision

输出格式

进度条样式(推荐)
✅ weather - Risk Assessment

┌─────────────────────────────────────────┐
│  📊 Risk Radar                          │
├─────────────────────────────────────────┤
│  Network      [░░░░░░░░░░░]  0/50  🟢 │
│  Vulnerabil. [░░░░░░░░░░░░]  0/25  🟢 │
│  Permissions  [░░░░░░░░░░░░]  0/50  🟢 │
│  ─────────────────────────────────────  │
│  TOTAL        [░░░░░░░░░░░░]  0/100 🟢 │
├─────────────────────────────────────────┤
│  Dependencies: curl, wttr.in            │
│  Recommendation: ✅ Safe to install     │
└─────────────────────────────────────────┘
实现逻辑
# Progress bar rendering
def render_bar(score, max_score, label, width=10):
    percent = score / max_score
    filled = int(percent * width)
    bar = '█' * filled + '░' * (width - filled)
    emoji = get_risk_emoji(percent)
    return f"  {label:<12} [{bar}] {score}/{max_score} {emoji}"

# Color mapping
def get_risk_emoji(percent):
    if percent < 0.2: return '🟢'
    if percent < 0.5: return '🟡'
    if percent < 0.8: return '🟠'
    return '🔴'
安全技能
✅ skill-name - Risk Assessment Complete

┌─────────────────────────────────┐
│  🟢 LOW RISK                   │
│  Socket Alerts: 0               │
│  Snyk Issues: 0                  │
│  Code Patterns: Clean            │
└─────────────────────────────────┘

Recommendation: Safe to install and use.

What's included:
- Feature A
- Feature B
中等风险技能
⚠️ skill-name - Risk Assessment Complete

┌─────────────────────────────────┐
│  🟠 MEDIUM RISK                │
│  Socket Alerts: 2               │
│  Snyk Issues: 1 (Medium)        │
│  Notes: Network calls detected   │
└─────────────────────────────────┘

Warnings:
- Makes API calls to external service
- Stores credentials in config file

Recommendation: Review the code before installing.
高风险技能
🚫 skill-name - Risk Assessment Complete

┌─────────────────────────────────┐
│  🔴 HIGH RISK                   │
│  Socket Alerts: 5               │
│  Snyk Issues: 3 (Critical)      │
│  Red Flags: Command execution    │
└─────────────────────────────────┘

🚨 DO NOT INSTALL

Reasons:
1. Multiple critical vulnerabilities found
2. Executes shell commands
3. No input sanitization

If you must proceed:
- Review every line of code
- Run in sandboxed environment
- Never expose credentials

用法

安装前检查
# Before installing any skill
skill-safety-check --source <skill-url>

# Example
skill-safety-check --source github.com/user/skill-repo
安装后验证
# Verify installed skill
skill-safety-check --verify --skill-name <name>
交互模式
User: "Install jina-cli"
Agent: [Runs skill-safety-verifier]
→ Analyzes skill
→ Presents risk assessment
→ User decides

集成

与 ClawdHub 集成
# Install with auto-verification
npx skills add <owner/repo> --verify
与 OpenClaw 集成

在配置中启用后,验证器会在安装技能前自动运行。


配置

设置
# .openclaw/config.yaml
skill_safety:
  enabled: true
  auto_check: true
  block_high_risk: false  # Set true to auto-block
  scan_depth: full        # quick | full
环境变量
SKILL_SAFETY_LOG_LEVEL=info
SKILL_SAFETY_CACHE_TTL=3600

最佳实践

  1. 始终验证 - 绝不安装未经审查的技能
  2. 阅读代码 - 自动检查还不够
  3. 最小权限 - 只授予必要的权限
  4. 隔离运行 - 在容器中运行高风险技能
  5. 监控 - 记录所有技能活动

相关内容


许可证

MIT 许可证 - 详情请参阅 LICENSE 文件

评论

支持 Markdown