skill-safety-verifier について
AI エージェント向けの外部スキルを、インストール前後に評価するセキュリティ重視のスキルです。ネットワーク、コードの脆弱性、権限を調べ、GitHub Advisory API のデータも使ってリスクを分類します。
主な機能
- 01ネットワークとソケット通信の確認
- 02コードの脆弱性とパターンの評価
- 03権限範囲の評価
- 04リスクレベルによる分類
- 05GitHub Advisory API データの利用
活用シーン
- 01インストール前のスキル評価
- 02インストール済みスキルの検証
- 03自動インストール有効化前のリスク確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ttttstc/ skill-safety-verifier --skill skill-safety-verifierインストール後、Claude Code で/skill-safety-verifierを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreLICENSEREADME.mdREADME_zh.mdanalyzer.pyrequirements.txtrisk_radar.pysetup.pybin/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 │
└──────────────┴──────────────┴─────────────────────────────┘
評価基準
ソケット/ネットワークリスク
| アラート数 | リスクスコア |
|---|---|
| 0 | 0 |
| 1-2 | 10 |
| 3-5 | 25 |
| >5 | 50 |
コード/脆弱性リスク
| 深刻度 | スコア |
|---|---|
| 重大 | 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
ベストプラクティス
- 必ず検証する - 審査されていないスキルはインストールしない
- コードを読む - 自動チェックだけでは不十分です
- 最小権限 - 必要な権限のみを付与する
- 隔離する - 高リスクのスキルはコンテナ内で実行する
- 監視する - すべてのスキルのアクティビティを記録する
関連情報
- ClawdHub - スキルマーケットプレイス
- OpenClaw Security - プラットフォームのセキュリティドキュメント
- Skill Writing Guide - 安全なスキルの作成方法
ライセンス
MIT License - 詳細は LICENSE ファイルを参照してください
コメント
Markdown 対応