mcpField
S
skill-safety-verifier

skill-safety-verifier

github.com/ttttstcセキュリティ239 回インストール34 週間前に更新
リポジトリ

skill-safety-verifier について

AI エージェント向けの外部スキルを、インストール前後に評価するセキュリティ重視のスキルです。ネットワーク、コードの脆弱性、権限を調べ、GitHub Advisory API のデータも使ってリスクを分類します。

主な機能

  1. 01ネットワークとソケット通信の確認
  2. 02コードの脆弱性とパターンの評価
  3. 03権限範囲の評価
  4. 04リスクレベルによる分類
  5. 05GitHub 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

詳細

Skill Safety Verifier

AI エージェント向けのセキュリティを最優先したスキル審査

概要

Skill Safety Verifier は、外部スキルをインストールする前にセキュリティチェックを実施する、セキュリティを最優先したスキル審査ツールです。

重要な理由

AI エージェントは高い権限で動作し、次のことができます。

  • 任意のコマンドを実行する
  • ファイルシステムにアクセスする
  • ネットワークリクエストを送信する
  • 環境変数を読み取る

審査されていないスキルはセキュリティリスクです


ワークフロー

┌─────────────────────────────────────────────────────────────────────────┐
│                        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. リスク評価

次の3つの観点からスキルを評価します。

観点チェック項目リスクレベル
ソケット/ネットワーク外部への接続、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            │
└──────────────┴──────────────┴─────────────────────────────┘

評価基準

ソケット/ネットワークリスク
アラート数リスクスコア
00
1-210
3-525
>550
コード/脆弱性リスク
深刻度スコア
重大25
高15
中10
低5
GitHub Advisory API との連携

GitHub Advisory API を使用して実際の脆弱性データを取得し、インストールの流れを妨げません。

API: https://api.github.com/advisories
認証: Token は不要(匿名で1時間あたり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 - 詳細は LICENSE ファイルを参照してください

コメント