
SkillSpector v2.10.0
AIエージェントスキル向けセキュリティスキャナ。インストールする前に、Claude Code、Codex、MCPスキルに含まれる脆弱性、悪意のあるパターン、セキュリティリスク、プロンプトインジェクション、データ窃取、サプライチェーンリスクを検出します。
SkillSpector
AIエージェントスキル向けセキュリティスキャナ。 エージェントスキルをインストールする前に、脆弱性、悪意のあるパターン、セキュリティリスクを検出します。
概要
AIエージェントスキル(Claude Code、Codex CLI、Gemini CLIなどで使用)は、暗黙の信頼と最小限の検証で実行されます。調査によると、スキルの26.1%に脆弱性が含まれ、5.2%に悪意のある意図が疑われることが示されています。
SkillSpectorは、「このスキルは安全にインストールできるか?」 という問いに答えるのに役立ちます。
SkillSpectorは、NVIDIA Verified Skillsパイプラインの一部であり、公開前にエージェントスキルをスキャン、評価、署名します。合格したスキルはNVIDIAスキルカタログに公開されます。
ドキュメント
- インストール前のエージェントスキルのスキャン — ホスト型ガイド:いつスキャンするか、レポートの読み方、インストールのゲート方法。
- 開発ガイド — アーキテクチャ、パッケージ構成、アナライザーパイプラインの拡張方法。
- Pi拡張機能 — SkillSpectorをPiツールとしてインストールし、エージェントセッション内からスキルをスキャンします。
機能
- マルチフォーマット入力: Gitリポジトリ、URL、zipファイル、ディレクトリ、または単一ファイルをスキャン
- 17カテゴリにわたる68の脆弱性パターン: プロンプトインジェクション、データ外部送信、権限昇格、サプライチェーン、過剰なエージェンシー、出力処理、システムプロンプト漏洩、メモリポイズニング、ツールの悪用、不正エージェント、拒否回避、トリガー悪用、危険なコード(AST)、テイントトラッキング、YARAシグネチャ、MCP最小権限、MCPツールポイズニング
- 2段階分析: 高速な静的解析 + オプションのLLM意味評価
- ライブ脆弱性ルックアップ: SC4がOSV.devに問い合わせ、リアルタイムのCVEデータを自動オフラインフォールバック付きで取得
- 複数の出力形式: ターミナル、JSON、Markdown、SARIFレポート
- リスクスコアリング: 重大度ラベルと明確な推奨事項付きの0〜100のスコア
- ベースライン / 誤検知抑制: グロブルールまたはフィンガープリントベースラインを使用して既知の検出結果を受け入れ、再スキャンでは新しい問題のみを表示(ドキュメント)
クイックスタート
インストール
オープンソースソフトウェアに関する通知: このプロジェクトは、追加のサードパーティ製オープンソースソフトウェアプロジェクトをダウンロードしてインストールします。使用前にこれらのオープンソースプロジェクトのライセンス条項を確認してください。
まず仮想環境を作成してアクティブにします(すべてのmakeターゲットはvenvがアクティブであることを前提としています)。uvまたはpipを使用します。Makefileは、利用可能な場合はuvを、それ以外の場合はpipを使用します。
uvによるクイックインストール(CLIのみ):```bash uv tool install git+https://github.com/NVIDIA/skillspector.git
Update later: uv tool update skillspector
`skillspector mcp` を実行する予定がある場合は、インストール時に MCP エクストラをインストールしてください:```bash
uv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'
From source:```bash
Clone the repository
git clone https://github.com/NVIDIA/skillspector.git cd skillspector
Create and activate virtual environment
uv venv .venv && source .venv/bin/activate
or: python3 -m venv .venv && source .venv/bin/activate
Install for production use
make install
Or install with development dependencies
make install-dev
### Docker(Python不要)
同梱の[Dockerfile](https://github.com/nvidia/skillspector/blob/HEAD/Dockerfile)からローカルでビルドすることで、PythonをインストールせずにSkillSpectorを実行できます。このイメージはDocker公式のPython `3.12-slim-bookworm`イメージをベースにしています。
**イメージをビルドする:**```bash
make docker-build
# or: docker build -t skillspector .
ローカルディレクトリをスキャンするには、現在のディレクトリをコンテナの作業ディレクトリである /scan にマウントします:```bash
docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm
**LLM分析によるスキャン**は、ローカルの`.env`ファイルで認証情報を渡すことで実行できます:```bash
cat > .env <<'EOF'
SKILLSPECTOR_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
EOF
The -p option allows you to specify a custom port for the reverse shell. The -h option displays the help menu. The -v option enables verbose output, which is useful for debugging. The -s option allows you to specify a custom shell to use for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell connection. The -c option allows you to specify a custom command to execute on the target system. The -d option allows you to specify a custom delay between commands. The -r option allows you to specify a custom retry count for the reverse shell connection. The -w option allows you to specify a custom wait time for the reverse shell connection. The -e option allows you to specify a custom encoding for the reverse shell payload. The -o option allows you to specify a custom output file for the reverse shell output. The -l option allows you to specify a custom log file for the reverse shell. The -f option allows you to specify a custom format for the reverse shell output. The -i option allows you to specify a custom input file for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -x option allows you to specify a custom exit command for the reverse shell. The -y option allows you to specify a custom yes/no prompt for the reverse shell. The -z option allows you to specify a custom zip file for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -j option allows you to specify a custom JSON payload for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -v option allows you to specify a custom version for the reverse shell. The -w option allows you to specify a custom wordlist for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom proxy for the reverse shell. The -z option allows you to specify a custom proxy for the reverse shell. The -a option allows you to specify a custom agent for the reverse shell. The -b option allows you to specify a custom browser for the reverse shell. The -c option allows you to specify a custom cookie for the reverse shell. The -d option allows you to specify a custom domain for the reverse shell. The -e option allows you to specify a custom email for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom function for the reverse shell. The -g option allows you to specify a custom global for the reverse shell. The -h option allows you to specify a custom header for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom method for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom response for the reverse shell. The -s option allows you to specify a custom status for the reverse shell. The -t option allows you to specify a custom time for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom version for the reverse shell. The -w option allows you to specify a custom warning for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -h option allows you to specify a custom help for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom JSON for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom retry for the reverse shell. The -s option allows you to specify a custom shell for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom verbose for the reverse shell. The -w option allows you to specify a custom wait for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom yes for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -h option allows you to specify a custom help for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom JSON for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom retry for the reverse shell. The -s option allows you to specify a custom shell for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom verbose for the reverse shell. The -w option allows you to specify a custom wait for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom yes for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -h option allows you to specify a custom help for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom JSON for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom retry for the reverse shell. The -s option allows you to specify a custom shell for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom verbose for the reverse shell. The -w option allows you to specify a custom wait for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom yes for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -h option allows you to specify a custom help for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom JSON for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom retry for the reverse shell. The -s option allows you to specify a custom shell for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom verbose for the reverse shell. The -w option allows you to specify a custom wait for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom yes for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -h option allows you to specify a custom help for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom JSON for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom retry for the reverse shell. The -s option allows you to specify a custom shell for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom verbose for the reverse shell. The -w option allows you to specify a custom wait for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom yes for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -h option allows you to specify a custom help for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom JSON for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom retry for the reverse shell. The -s option allows you to specify a custom shell for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom verbose for the reverse shell. The -w option allows you to specify a custom wait for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom yes for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a custom group for the reverse shell. The -h option allows you to specify a custom help for the reverse shell. The -i option allows you to specify a custom interface for the reverse shell. The -j option allows you to specify a custom JSON for the reverse shell. The -k option allows you to specify a custom key for the reverse shell. The -l option allows you to specify a custom listener for the reverse shell. The -m option allows you to specify a custom module for the reverse shell. The -n option allows you to specify a custom network for the reverse shell. The -o option allows you to specify a custom option for the reverse shell. The -p option allows you to specify a custom port for the reverse shell. The -q option allows you to specify a custom queue for the reverse shell. The -r option allows you to specify a custom retry for the reverse shell. The -s option allows you to specify a custom shell for the reverse shell. The -t option allows you to specify a custom timeout for the reverse shell. The -u option allows you to specify a custom user for the reverse shell. The -v option allows you to specify a custom verbose for the reverse shell. The -w option allows you to specify a custom wait for the reverse shell. The -x option allows you to specify a custom proxy for the reverse shell. The -y option allows you to specify a custom yes for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom address for the reverse shell. The -b option allows you to specify a custom binary for the reverse shell. The -c option allows you to specify a custom config for the reverse shell. The -d option allows you to specify a custom data for the reverse shell. The -e option allows you to specify a custom error for the reverse shell. The -f option allows you to specify a custom file for the reverse shell. The -g option allows you to specify a custom gateway for the reverse shell. The -h option allows you to specify a custom host for the reverse shell. The -i option allows you to specify a custom input for the reverse shell. The -j option allows you to specify a custom job for the reverse shell. The -k option allows you to specify a custom kernel for the reverse shell. The -l option allows you to specify a custom log for the reverse shell. The -m option allows you to specify a custom message for the reverse shell. The -n option allows you to specify a custom name for the reverse shell. The -o option allows you to specify a custom output for the reverse shell. The -p option allows you to specify a custom path for the reverse shell. The -q option allows you to specify a custom query for the reverse shell. The -r option allows you to specify a custom router for the reverse shell. The -s option allows you to specify a custom server for the reverse shell. The -t option allows you to specify a custom target for the reverse shell. The -u option allows you to specify a custom URL for the reverse shell. The -v option allows you to specify a custom value for the reverse shell. The -w option allows you to specify a custom web for the reverse shell. The -x option allows you to specify a custom XML for the reverse shell. The -y option allows you to specify a custom YAML for the reverse shell. The -z option allows you to specify a custom zip for the reverse shell. The -a option allows you to specify a custom argument for the reverse shell. The -b option allows you to specify a custom banner for the reverse shell. The -c option allows you to specify a custom command for the reverse shell. The -d option allows you to specify a custom delay for the reverse shell. The -e option allows you to specify a custom encoding for the reverse shell. The -f option allows you to specify a custom format for the reverse shell. The -g option allows you to specify a```bash
docker run --rm
-v "$PWD:/scan"
--env-file .env
skillspector scan ./my-skill/
Or pass credentials directly from your shell environment:
シェル環境から直接資格情報を渡すこともできます:```bash
docker run --rm \
-v "$PWD:/scan" \
-e SKILLSPECTOR_PROVIDER=anthropic \
-e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \
skillspector scan ./my-skill/
ホストファイルシステムへのレポートの書き込みは、マウントされたディレクトリに書き込むことで行います:```bash
docker run --rm
-v "$PWD:/scan"
skillspector scan ./my-skill/ --no-llm --format json --output report.json
**オプションのエイリアス**(繰り返しの静的スキャン用):```bash
alias skillspector-docker='docker run --rm -v "$PWD:/scan" skillspector'
skillspector-docker scan ./my-skill/ --no-llm
基本的な使い方```bash
Scan a local skill directory
skillspector scan ./my-skill/
Scan a single SKILL.md file
skillspector scan ./SKILL.md
Scan a Git repository
skillspector scan https://github.com/user/my-skill
Scan a zip file
skillspector scan ./my-skill.zip
#### サイズ制限
SkillSpector は、リモートおよびアーカイブ入力に対して2つの独立した上限を適用し、過大なダウンロードやzip爆弾の影響を抑えます:
- **取り込みごとの上限**: `INGEST_MAX_BYTES`(100 MiB)— ストリーミングURLダウンロード、zipアーカイブの非圧縮合計サイズ、Gitリポジトリのクローン後のディスク使用量に適用されます。
- **Zipメンバー上限**: `INGEST_MAX_ZIP_MEMBERS`(10,000)— 単一のzip内のエントリ数を制限します。
ファイルごとの1 MB分析上限(`MAX_FILE_BYTES`)は、別の下流側の制限であることに注意してください。これは、個々のアナライザーが取り込み済みディレクトリから読み取る内容を制限するものです。上記の取り込み上限は、そもそもディスク上に配置できるコンテンツの量を制限します。いずれかの取り込み上限を超えると、`IngestLimitExceededError` でフェイルクローズ(安全側に失敗)します。
### 出力形式```bash
# Terminal output (default) - pretty formatted
skillspector scan ./my-skill/
# JSON output - machine readable
skillspector scan ./my-skill/ --format json --output report.json
# Markdown output - for documentation
skillspector scan ./my-skill/ --format markdown --output report.md
# SARIF output - for CI/CD integration and IDE tooling
skillspector scan ./my-skill/ --format sarif --output report.sarif
バッチスキャン
contrib/batch_scan/ からスキルのディレクトリ全体を並列でスキャンします:```bash
python -m contrib.batch_scan.batch_scan ./my-skills/ --no-llm
python -m contrib.batch_scan.batch_scan ./my-skills/ --workers 20 -f json -o report.json
python -m contrib.batch_scan.batch_scan ./tests/fixtures/ -f terminal --workers 20
多言語検出(zh/ja/ko)に対応し、ターミナル/JSON/Markdown出力をサポートします。
より高い並行性でLLMスキャンを実行するには、[`.env.example`](https://github.com/nvidia/skillspector/blob/HEAD/contrib/batch_scan/.env.example) に従って複数のAPIキーを設定してください。キーがアカウントレベルのレート制限を共有しない限り、プールによってスループットと耐障害性が向上します。
詳細は[contribガイド](https://github.com/nvidia/skillspector/blob/HEAD/contrib/batch_scan/docs/)を参照してください。
> **LLMサポートに関する注記:** デフォルト構成は、最も安価な公開オプションとしてDeepSeekを対象としています。DeepSeek-Chatは[廃止される予定](https://api-docs.deepseek.com/)であり、貢献者はローカルモデルでテストするためのハードウェアを持っていません。バッチスキャナーは当初、OpenAI互換エンドポイントでテストされました。DeepSeekが構造化出力をサポートしていないため、手動のJSON解析パッチが必要でした。より汎用的なバックエンド(Ollama、vLLM、または別のプロバイダー)を提供できる場合は、PRを歓迎します。
### 誤検知の抑制(ベースライン)
既知/許容済みの検出結果を抑制して、リスクスコアが未トリアージの問題のみを反映し、再スキャンで*新しい*検出結果のみが表面化するようにします。完全なリファレンスは[抑制ガイド](https://github.com/nvidia/skillspector/blob/HEAD/docs/SUPPRESSION.md)を参照してください。```bash
# Accept all current findings into a baseline (run once), then commit it.
skillspector baseline ./my-skill/ -o .skillspector-baseline.yaml
# Scan against the baseline — only NEW findings are reported and scored.
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml
# Review what was suppressed (still excluded from the score).
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml --show-suppressed
ベースラインは、ドリフト耐性のあるグロブルール(ルールID、ファイルパス、またはメッセージによる)も使用できます — .skillspector-baseline.example.yaml を参照してください。
正確なフィンガープリントベースラインは証拠に紐づいています。スキャン対象のソースやSkillSpectorのバージョンを変更しても、再レビューされるまで検出結果はアクティブなままです。
選択したベースラインまたはベースライン出力がスキルディレクトリ内に保存されている場合、SkillSpectorはその正確なファイルをコンテンツ分析から除外するため、その抑制テキストが検出結果を生成したり、再生成されたフィンガープリントに含まれたりすることはありません。兄弟ファイルは通常のスキャン範囲に残ります。
LLM分析
最良の結果を得るには、セマンティック分析用にOpenAI互換のLLMエンドポイントを設定してください。SKILLSPECTOR_PROVIDER でプロバイダーを選択します。ホスト型プロバイダーにはバンドルされたデフォルトモデルが同梱されており、CLIプロバイダーは SKILLSPECTOR_MODEL が設定されていない限り、ローカルランタイムのデフォルトモデルにフォールバックします。SkillSpectorは、ローカルのOpenAI互換サーバー(Ollama、vLLM、llama.cpp)やマネージド推論ゲートウェイでも動作します。
プロバイダー(SKILLSPECTOR_PROVIDER) | 認証情報の環境変数 | エンドポイント | デフォルトモデル |
|---|---|---|---|
openai | OPENAI_API_KEY(任意の OPENAI_BASE_URL も可) | api.openai.com(または任意のOpenAI互換URL) | gpt-5.4 |
anthropic | ANTHROPIC_API_KEY | api.anthropic.com | claude-opus-4-6 |
anthropic_proxy | ANTHROPIC_PROXY_API_KEY + ANTHROPIC_PROXY_ENDPOINT_URL | Vertexスタイルのraw-predictプロキシ | claude-sonnet-4-6 |
bedrock | AWS_PROFILE(任意)+ AWS_REGION — boto3経由のSigV4 | AWS Bedrock Runtime | us.anthropic.claude-sonnet-4-6-20250915-v1:0 |
nv_build | NVIDIA_INFERENCE_KEY | build.nvidia.com | deepseek-ai/deepseek-v4-flash |
claude_cli | (なし — ローカルCLI認証を使用) | ローカルの claude バイナリ | ローカルClaudeランタイムのフォールバック、または SKILLSPECTOR_MODEL |
codex_cli | (なし — ローカルCLI認証を使用) | ローカルの codex バイナリ | ローカルCodexランタイムのフォールバック、または SKILLSPECTOR_MODEL |
Stock OpenAI
export SKILLSPECTOR_PROVIDER=openai export OPENAI_API_KEY=sk-... skillspector scan ./my-skill/
Anthropic
export SKILLSPECTOR_PROVIDER=anthropic export ANTHROPIC_API_KEY=sk-ant-... skillspector scan ./my-skill/
Anthropic via Vertex-style proxy (corporate gateways, GCP Vertex AI)
export SKILLSPECTOR_PROVIDER=anthropic_proxy export ANTHROPIC_PROXY_ENDPOINT_URL=https://my-gateway.example.com/models/claude-sonnet-4-6:streamRawPredict export ANTHROPIC_PROXY_API_KEY=your-bearer-token export SKILLSPECTOR_MODEL=claude-sonnet-4-6 skillspector scan ./my-skill/
AWS Bedrock (Claude via SigV4)
export SKILLSPECTOR_PROVIDER=bedrock
Optional: select an AWS named profile. When unset, the standard
boto3 credential chain (env vars, instance metadata, SSO, etc.) resolves.
export AWS_PROFILE=my-profile
export AWS_REGION=us-west-2 # default if unset
Default model: us.anthropic.claude-sonnet-4-6-20250915-v1:0
Override with any Bedrock model ID, cross-region inference-profile
ID, or your own application-inference-profile ARN:
export SKILLSPECTOR_MODEL=us.anthropic.claude-opus-4-6-20250915-v1:0
skillspector scan ./my-skill/
NVIDIA build.nvidia.com
export SKILLSPECTOR_PROVIDER=nv_build export NVIDIA_INFERENCE_KEY=nvapi-... skillspector scan ./my-skill/
Local Claude CLI — no API key; uses your existing claude auth login session
Requires: claude CLI installed and authenticated (claude auth login)
export SKILLSPECTOR_PROVIDER=claude_cli
Uses the local Claude CLI runtime fallback unless SKILLSPECTOR_MODEL is set.
export SKILLSPECTOR_MODEL=claude-sonnet-4-6
skillspector scan ./my-skill/
Local Codex CLI — no API key; uses your existing codex login session
Requires: codex CLI installed and authenticated
export SKILLSPECTOR_PROVIDER=codex_cli skillspector scan ./my-skill/
Local Ollama or any OpenAI-compatible endpoint
export SKILLSPECTOR_PROVIDER=openai export OPENAI_API_KEY=ollama export OPENAI_BASE_URL=http://localhost:11434/v1 export SKILLSPECTOR_MODEL=llama3.1:8b skillspector scan ./my-skill/
Override the provider's default model
export SKILLSPECTOR_MODEL=gpt-5.2 skillspector scan ./my-skill/
Skip LLM analysis (faster, static analysis only)
skillspector scan ./my-skill/ --no-llm
### MCP サーバー
SkillSpector を [Model Context Protocol](https://modelcontextprotocol.io)
サーバーとして実行し、MCP 対応の任意のエージェント(Claude Code、Codex CLI、Gemini CLI)やリモート
ランタイムがスキャンをツールとして呼び出し、**その結果に基づいてスキル/MCP のインストールをゲートできる**ようにします。これにより、SkillSpector は帯域外の監査ステップではなく、ランタイムのガードレールになります。
`skillspector mcp` には `skillspector[mcp]` が必要です。```bash
# Install, or reinstall if you already used the CLI-only path
uv tool install --force 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'
# FastMCP stdio transport for local CLI agents
skillspector mcp
# streamable HTTP/SSE transport for remote / A2A callers
skillspector mcp --transport http --host 127.0.0.1 --port 8000
stdioトランスポートは、ローカルCLIエージェント向けの現在のFastMCPパスであり、issue #199で報告されたinitializeハングは、そこでも依然として発生します。
サーバーは単一のツールを公開します:
scan_skill(target, use_llm=true, output_format="json")— Git URL、ファイルURL、.zip、.mdファイル、またはディレクトリをスキャンし、構造化された判定結果を返します:risk_score(0〜100)、severity、recommendation、safe_to_install、およびfindings。また、llm_used/scan_modeも報告するため、静的解析のみのスキャンによる低スコアが、完全なスキャンのクリーンな結果と誤認されることはありません。
Claude Codeで次のように登録します:```bash claude mcp add skillspector -- skillspector mcp
> **セキュリティ — HTTPトランスポートの信頼モデル**
>
> HTTPトランスポートは**認証なし**で動作します。ポートに到達できる呼び出し元は誰でも`scan_skill`を呼び出せます。stdioまたは`127.0.0.1`経由では、これはCLIと同じ信頼境界です。ルーティング可能なインターフェースにバインドする場合:
>
> - 外部に公開する前に、認証付きリバースプロキシ(例: nginx + mTLS)の背後にサーバーを配置してください。
> - ローカルパスと`file://` URLはHTTP経由で**自動的に拒否**され、認証されていない呼び出し元が任意のホストファイルを読み取るのを防ぎます。リモートのGitおよび`.zip` URLのみが受け入れられます。
## 脆弱性パターン
SkillSpectorは17カテゴリにわたる**68の脆弱性パターン**を検出します:
### プロンプトインジェクション(5パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| P1 | 命令の上書き | HIGH | 安全制約を無視するコマンド |
| P2 | 隠された命令 | HIGH | コメント/不可視テキスト内の悪意のある指示 |
| P3 | データ流出コマンド | HIGH | コンテキストを外部に送信する指示 |
| P4 | 動作操作 | MEDIUM | エージェントの決定を変更する巧妙な指示 |
| P5 | 有害なコンテンツ | CRITICAL | 物理的な害を引き起こす可能性のある指示 |
### 拒否回避(3パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| AR1 | 拒否の抑制 | HIGH | 決して拒否せず常に従う指示(例: 「決して拒否しない」「常に従う」) |
| AR2 | 免責事項の抑制 | HIGH | 警告、免責事項、倫理的コメントを省略する指示(例: 「免責事項なし」「道徳的な説教はしない」) |
| AR3 | 安全ポリシーの無効化 | HIGH | ガードレールを無効化する脱獄フレーミング(例: 「制限はない」「ガイドラインを無視」「今すぐ何でもする」) |
### データ流出(4パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| E1 | 外部送信 | MEDIUM | 外部URLへのデータ送信 |
| E2 | 環境変数の収集 | HIGH | シークレット収集のための環境データの列挙、コピー、検索 |
| E3 | ファイルシステムの列挙 | MEDIUM | 機密ファイルのディレクトリスキャン |
| E4 | コンテキスト漏洩 | HIGH | 会話コンテキストの外部送信 |
### 権限昇格(3パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| PE1 | 過剰な権限 | LOW | 記載された機能を超えるアクセス要求 |
| PE2 | Sudo/Root実行 | MEDIUM | 昇格したシステム権限の呼び出し |
| PE3 | 資格情報へのアクセス | HIGH | SSHキー、トークン、パスワードの読み取り |
### サプライチェーン(6パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| SC1 | バージョン固定なしの依存関係 | LOW | パッケージのバージョン制約なし |
| SC2 | 外部スクリプトの取得 | HIGH | curl \| bashおよびリモートコード実行 |
| SC3 | 難読化されたコード | HIGH | Base64/hexエンコードされた実行 |
| SC4 | 既知の脆弱な依存関係 | HIGH | 既知のCVEを持つ依存関係(ライブOSV.devルックアップ) |
| SC5 | 放棄された依存関係 | MEDIUM | セキュリティ更新のない未保守パッケージ |
| SC6 | タイポスクワッティング | HIGH | 人気パッケージに類似したパッケージ名 |
### 過剰なエージェンシー(4パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| EA1 | 無制限のツールアクセス | HIGH | 制約なしの無制限ツールアクセス |
| EA2 | 自律的な意思決定 | HIGH | 人間の介入なしの影響度の高い決定 |
| EA3 | スコープの拡大 | MEDIUM | 記載された目的を超える機能 |
| EA4 | 無制限のリソースアクセス | MEDIUM | リソース消費のレート制限やクォータなし |
### 出力処理(3パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| OH1 | 未検証の出力インジェクション | HIGH | サニタイズなしで使用されるモデル出力 |
| OH2 | クロスコンテキスト出力 | MEDIUM | 検証なしで信頼境界を越える出力フロー |
| OH3 | 無制限の出力 | MEDIUM | 出力サイズや生成レートの制限なし |
### システムプロンプト漏洩(3パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| P6 | 直接漏洩 | HIGH | システムプロンプトや内部ルールを公開する指示 |
| P7 | 間接的な抽出 | MEDIUM | 言い換え、翻訳、サイドチャネルによる抽出 |
| P8 | ツールベースの流出 | HIGH | ファイル書き込みやネットワークリクエストによるシステムプロンプトの流出 |
### メモリポイズニング(3パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| MP1 | 永続的なコンテキストインジェクション | HIGH | 複数のやり取りにわたって持続するように設計されたコンテンツ |
| MP2 | コンテキストウィンドウの詰め込み | MEDIUM | 安全制約を押しのけるフィラーコンテンツ |
| MP3 | メモリ操作 | HIGH | エージェントのメモリや保存状態への改ざん |
### ツールの誤用(3パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| TM1 | ツールパラメータの悪用 | HIGH | 意図しない動作のための細工されたパラメータ(shell=True、--force) |
| TM2 | チェーン悪用 | HIGH | 個々の安全チェックを回避するツールチェーン |
| TM3 | 安全でないデフォルト | MEDIUM | 過度に寛容なデフォルト(TLS無効、認証なし) |
### 不正エージェント(2パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| RA1 | 自己改変 | CRITICAL | 実行時に自身のコードや設定を変更 |
| RA2 | セッション永続化 | HIGH | cronジョブや起動スクリプトによる不正な永続化 |
### トリガー悪用(3パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| TR1 | 過度に広いトリガー | MEDIUM | 一般的な単語に一致するトリガーパターン |
| TR2 | シャドウコマンドトリガー | HIGH | 組み込みコマンドや他のスキルを覆い隠すトリガー |
| TR3 | キーワード誘引トリガー | MEDIUM | アクティベーションを最大化するように設計された汎用トリガー |
### ビヘイビアAST(9パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| AST1 | exec()呼び出し | CRITICAL | 任意のコード実行を可能にする直接のexec() |
| AST2 | eval()呼び出し | HIGH | 任意の式を評価する直接のeval() |
| AST3 | 動的インポート | HIGH | 実行時に任意のモジュールを読み込む\_\_import\_\_() |
| AST4 | subprocess呼び出し | HIGH | subprocessによる外部コマンド実行 |
| AST5 | os.system / exec系 | HIGH | osモジュールによるシェルコマンド |
| AST6 | compile()呼び出し | MEDIUM | 文字列からのコードオブジェクト生成 |
| AST7 | 動的getattr() | MEDIUM | 非リテラル名による任意の属性アクセス |
| AST8 | 危険な実行チェーン | CRITICAL | 動的ソース(ネットワーク、エンコードデータ)と組み合わせたexec/eval |
| AST9 | リフレクティブgetattr()シンク | HIGH | AST1/AST5を回避する`getattr(os,'system')` / `getattr(builtins,'exec')`によるリフレクティブexec |
### テイントトラッキング(5パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| TT1 | 直接テイントフロー | HIGH | データがサニタイズなしでソースからシンクへ直接流れる |
| TT2 | 変数媒介テイントフロー | MEDIUM | データが中間変数を介してソースからシンクへ流れる |
| TT3 | 資格情報流出チェーン | CRITICAL | 資格情報(環境変数、シークレット)がネットワーク出力シンクへ流れる |
| TT4 | ファイル読み取りからネットワーク流出 | HIGH | ファイル内容がネットワーク出力シンクへ流れる |
| TT5 | 外部入力からコード実行 | CRITICAL | ネットワークまたはユーザー入力がexec/eval/subprocessシンクへ流れる |
### YARAシグネチャ(4パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| YR1 | マルウェア一致 | CRITICAL | 既知のマルウェアシグネチャに対するYARAルール一致 |
| YR2 | ウェブシェル一致 | CRITICAL | ウェブシェルパターンに対するYARAルール一致 |
| YR3 | クリプトマイナー一致 | HIGH | 暗号通貨マイニング指標に対するYARAルール一致 |
| YR4 | ハッキングツール/エクスプロイト一致 | HIGH | ハッキングツールまたはエクスプロイトコードに対するYARAルール一致 |
### MCP最小権限(4パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| LP1 | 未宣言の機能 | HIGH | 宣言された権限に記載されていない機能をコードが使用 |
| LP2 | ワイルドカード権限 | MEDIUM | 権限リストにワイルドカード(\*、all、full、any)が含まれる |
| LP3 | 権限宣言の欠落 | MEDIUM | 権限フィールドがないが、コードに検出可能な機能がある |
| LP4 | 過剰宣言された権限 | LOW | 権限が宣言されているが、対応するコード機能が見つからない |
### MCPツールポイズニング(4パターン)
| ID | パターン | 重大度 | 説明 |
|----|---------|----------|-------------|
| TP1 | 隠された命令 | HIGH | メタデータ内の隠された指示(HTMLコメント、ゼロ幅文字、base64、データURI) |
| TP2 | Unicode欺瞞 | HIGH | ツールメタデータ内のホモグリフ、RTLオーバーライド、混在スクリプト識別子 |
| TP3 | パラメータ説明インジェクション | MEDIUM | パラメータ定義内のインジェクションパターン(オーバーライド、システムトークン、悪意のあるデフォルト) |
| TP4 | 説明と動作の不一致 | MEDIUM | 宣言されたツール説明が実際のコード動作と一致しない(LLM駆動) |
検出されたすべてのパターンは上記の表に記載されています。
## リスクスコアリング
### スコア計算
- **CRITICAL問題**: +50ポイント
- **HIGH問題**: +25ポイント
- **MEDIUM問題**: +10ポイント
- **LOW問題**: +5ポイント
- **実行可能スクリプト**: 1.3倍乗数
### 重大度レベル
| スコア | 重大度 | 推奨事項 |
|-------|----------|----------------|
| 0-20 | LOW | 安全 |
| 21-50 | MEDIUM | 注意 |
| 51-80 | HIGH | インストールしない |
| 81-100 | CRITICAL | インストールしない |
## 出力例
### ターミナル出力```
SkillSpector Security Report v2.0.0
Skill: suspicious-skill
Source: ./suspicious-skill/
Scanned: 2026-01-29 10:30:00 UTC
Risk Assessment
Metric Value
Score 78/100
Severity HIGH
Recommendation DO NOT INSTALL
Components (3)
File Type Lines Executable
SKILL.md markdown 142 No
scripts/sync.py python 87 Yes
requirements.txt text 3 No
Issues (2)
HIGH: Env Variable Harvesting (E2)
Location: scripts/sync.py:23
Finding: for key, val in os.environ.items():...
Confidence: 94%
Explanation: This code collects environment variables containing
API keys and secrets, then sends them to an external server.
HIGH: External Transmission (E1)
Location: scripts/sync.py:45
Finding: requests.post("https://api.skill.io/env"...
Confidence: 89%
Explanation: Data is being sent to an external server. Combined
with env harvesting above, this indicates credential exfiltration.
設定
環境変数
| 変数 | 説明 | 必須 |
|---|---|---|
SKILLSPECTOR_PROVIDER | アクティブなLLMプロバイダー: openai、anthropic、anthropic_proxy、bedrock、nv_build、claude_cli、codex_cli、または gemini_cli。ホスト型プロバイダーはバンドルされた model_registry.yaml のデフォルトを使用します。claude_cli と codex_cli は、SKILLSPECTOR_MODEL が設定されていない限り、ローカルCLIランタイムのデフォルトモデルにフォールバックします。デフォルトは nv_build です。 | 任意 |
NVIDIA_INFERENCE_KEY | nv_build プロバイダー(build.nvidia.com)の認証情報。 | SKILLSPECTOR_PROVIDER=nv_build の場合、LLM分析に必須 |
OPENAI_API_KEY | OpenAIプロバイダー(SKILLSPECTOR_PROVIDER=openai)の認証情報。また、アクティブなプロバイダーが認証情報を返さない場合、認証情報ウォーターフォールのティア2フォールバックとしても機能します。 | SKILLSPECTOR_PROVIDER=openai の場合、LLM分析に必須 |
OPENAI_BASE_URL | OpenAIエンドポイントを上書きします(例: Ollamaを指定)。 | 任意 |
SKILLSPECTOR_REASONING_EFFORT | プロバイダーおよびモデルに依存する任意の推論努力設定。空でない値はトリムされ、そのまま渡されます。未設定または空白の場合は、プロバイダーのデフォルト動作が維持されます。 | 任意 |
ANTHROPIC_API_KEY | Anthropicプロバイダー(SKILLSPECTOR_PROVIDER=anthropic)の認証情報。 | SKILLSPECTOR_PROVIDER=anthropic の場合、LLM分析に必須 |
ANTHROPIC_BASE_URL | ネイティブのAnthropicエンドポイントを上書きします(デフォルト: https://api.anthropic.com)。 | 任意 |
ANTHROPIC_PROXY_ENDPOINT_URL | Anthropicプロキシプロバイダー(Vertexスタイルのraw-predict)の完全なエンドポイントURL。 | SKILLSPECTOR_PROVIDER=anthropic_proxy の場合に必須 |
ANTHROPIC_PROXY_API_KEY | Anthropicプロキシプロバイダーのベアラートークン。 | SKILLSPECTOR_PROVIDER=anthropic_proxy の場合に必須 |
ANTHROPIC_PROXY_API_VERSION | リクエストボディで送信される anthropic_version 値(デフォルト: vertex-2023-10-16)。 | 任意 |
AWS_PROFILE | Bedrockプロバイダー用の名前付きAWSプロファイル — boto3を通じてSigV4で認証します。未設定の場合、標準のboto3認証情報チェーン(環境変数、インスタンスメタデータ、SSOなど)が解決されます。 | 任意(SKILLSPECTOR_PROVIDER=bedrock の場合に使用) |
AWS_REGION | Bedrock RuntimeエンドポイントのAWSリージョン。デフォルトは us-west-2。 | 任意(SKILLSPECTOR_PROVIDER=bedrock の場合に使用) |
SKILLSPECTOR_MODEL | アクティブなプロバイダーモデルを上書きします。ホスト型プロバイダーの場合、LLM分析テーブルのバンドルされたデフォルトを置き換えます。claude_cli と codex_cli の場合、ローカルCLIランタイムのフォールバックを使用する代わりに、--model として転送されます。 | 任意 |
SKILLSPECTOR_MODEL_REGISTRY | バンドルされたプロバイダー別YAMLレジストリ(src/skillspector/providers/<provider>/model_registry.yaml)をカスタムパスで上書きします。 | 任意 |
SKILLSPECTOR_LOG_LEVEL | ログレベル: DEBUG、INFO、WARNING、ERROR(デフォルト: WARNING)。 | 任意 |
CLIプロバイダー(
claude_cli、codex_cli): APIキーは不要です。認証はエージェントCLI自身のログインセッション(claude auth login/codex login)によって完全に管理されます。これらのプロバイダーがアクティブな場合、SkillSpectorはAPIキーを読み取ったり転送したりすることはありません。サブプロセスは強化されたサンドボックスで実行されます: ツール無効、MCPなし、読み取り専用サンドボックスモード(codex)、信頼できないスキルコンテンツはstdin経由でのみ配信されます。
CLIオプション```bash
skillspector scan --help
Options: -f, --format [terminal|json|markdown|sarif] Output format [default: terminal] -o, --output PATH Output file path --no-llm Skip LLM analysis (static only) --yara-rules-dir PATH Extra YARA rules directory -b, --baseline PATH Suppress findings listed in a baseline --show-suppressed List baseline-suppressed findings -V, --verbose Show detailed progress --help Show this message and exit
Generate a baseline of all current findings (see docs/SUPPRESSION.md)
skillspector baseline [-o FILE] [--no-llm] [--reason TEXT]
## SkillSpectorの統合
SkillSpectorは、他のツール(CIパイプライン、インストールゲート、エディタ統合)から駆動されるように設計されています。その終了コードとJSON出力は安定した契約です。
### 終了コード
`skillspector scan`は以下のコードで終了します:
| コード | 意味 |
|------|---------|
| `0` | スキャン完了、`risk_score` ≤ 50(推奨事項 `SAFE` または `CAUTION`) |
| `1` | スキャン完了、`risk_score` > 50(推奨事項 `DO_NOT_INSTALL`) |
| `2` | エラー(不正な入力、読み取り不能なソース、内部障害) |
> 終了コードは`SAFE`と`CAUTION`を`0`にまとめます。これらを異なる方法で処理する場合(例:`CAUTION`では*警告*、`DO_NOT_INSTALL`では*ブロック*)、終了コードに頼るのではなく、JSON出力の`recommendation`フィールドを読み取ってください。
### 機械可読な出力
`--format json`はJSONレポートを生成します。`--output`/`-o`を指定しない場合、stdoutに書き込まれます:```bash
skillspector scan ./my-skill/ --format json
The top-level shape is (this example shows a full LLM-backed scan; with --no-llm, metadata.llm_requested is false):```json
{
"skill": { "name": "...", "source": "...", "scanned_at": "<ISO 8601>" },
"risk_assessment": { "score": 0, "severity": "LOW", "recommendation": "SAFE" },
"components": [ { "path": "...", "type": "...", "lines": 0, "executable": false, "size_bytes": 0 } ],
"issues": [ { "id": "...", "category": "...", "severity": "...", "confidence": 0.0, "location": { "file": "...", "start_line": 0 } } ],
"metadata": {
"has_executable_scripts": false,
"skillspector_version": "...",
"llm_requested": true,
"llm_available": true,
"inference_usage": [
{
"node": "semantic_security_discovery",
"request_kind": "structured_output",
"provider": "nv_inference",
"model": "azure/anthropic/claude-opus-4-6",
"model_source": "provider_response",
"usage_source": "provider_response",
"prompt_tokens": 1000,
"completion_tokens": 100,
"cached_tokens": 400,
"cache_write_tokens": 50,
"total_tokens": 1100
}
]
}
}
- `risk_assessment.severity` ∈ `LOW | MEDIUM | HIGH | CRITICAL`。
- `risk_assessment.recommendation` ∈ `SAFE | CAUTION | DO_NOT_INSTALL`。重大度からのマッピング: `LOW → SAFE`、`MEDIUM → CAUTION`、`HIGH`/`CRITICAL → DO_NOT_INSTALL`。
- `metadata.llm_error` は、LLM分析が要求されたが利用できなかった場合にのみ表示されます。
- `metadata.inference_usage` には、プロバイダーがトークンカウンターを公開している場合、LLM応答ごとに1つのサニタイズされたレコードが含まれます。使用量が利用できない場合は空のリストになります。SkillSpectorは欠落したトークンを推定することはありません。プロンプト合計にはキャッシュの読み取りと書き込みが含まれるため、ダウンストリームの価格設定でそれらのパーティションを安全に分離できます。
`model_source` は、独立して識別されたプロバイダーモデルと、応答IDが存在しないか曖昧な場合に使用された正確な要求モデルを区別します。
SkillSpectorは現在、Anthropicのプロンプトキャッシュ制御を送信しないため、そのスキャン要求は個別の5分間または1時間のキャッシュ書き込み層を選択できません。TTL固有の応答フィールドは、集約されたキャッシュ書き込みカウンターに防御的に正規化されます。
- 完全な来歴、キャッシュ会計、プライバシー、フェイルクローズド取り込み、およびダウンストリームの価格設定契約については、[推論使用量テレメトリ](https://github.com/nvidia/skillspector/blob/HEAD/docs/INFERENCE_USAGE.md)を参照してください。
- 問題ごとの完全な形状は、[models.py](https://github.com/nvidia/skillspector/blob/HEAD/src/skillspector/models.py)の`Finding.to_dict()`によって定義されます。上記のフィールドに依存し、追加のフィールドはベストエフォートとして扱ってください。
CI/IDEツールの場合、`--format sarif`はSARIF 2.1.0を出力します。
### 推奨ゲートマッピング
SkillSpectorをインストールゲートとして使用する場合、推奨事項をアクションにマッピングします:
| `recommendation` | 推奨アクション |
|------------------|------------------|
| `SAFE` | 許可 |
| `CAUTION` | ユーザーにプロンプト/警告 |
| `DO_NOT_INSTALL` | ブロック |
SkillSpectorはスコア帯と推奨事項を計算します。ゲートの厳格さ(例: CIで`CAUTION`がブロックするかどうか)は、統合ツールのポリシー決定です。
## 開発
### セットアップ
すべての`make`ターゲットは、仮想環境がすでに作成されアクティブ化されていることを前提としています。Makefileは、利用可能な場合は**uv**を使用し、それ以外の場合は**pip**を使用します。```bash
# Clone, create venv, activate, install dev dependencies
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
# or: python3 -m venv .venv && source .venv/bin/activate
make install-dev
# Run tests
make test
# Run tests with coverage
make test-cov
# Run linting
make lint
# Format code
make format
動作の仕組み
SkillSpectorは2段階の検出パイプラインを使用します:
ステージ1: 静的解析
- 11種類の静的アナライザーによる高速な正規表現ベースのパターンマッチング
- 危険な呼び出し(exec、eval、subprocessなど)を検出するASTベースの動作解析
- 依存関係の既知のCVEについてOSV.devによるライブ脆弱性検索
- スキル内のアナライザー対象ファイルをすべてスキャン
- 高い再現率(ほとんどの問題を検出)
- 中程度の精度(一部の誤検知あり)
有効なルートレベルのOpenSSF Model Signing署名(skill.oms.sig)は、コンポーネントインベントリにoms_signatureタイプとして保持されますが、静的解析およびLLMコンテンツ解析からは除外されます。OMSバンドルには必然的に長いbase64エンコードされたペイロード、署名、証明書フィールドが含まれます。汎用の難読化コードチェックは、これらのフィールドを隠された実行可能コンテンツとして誤分類する可能性があります。認識器は最小限のOMS DSSE/in-toto構造をチェックします。署名、証明書チェーン、透明性ログエントリ、署名者IDは検証しません。無効または認識されない署名ファイルは通常どおりスキャンされます。
ステージ2: LLM意味解析(オプション)
- コンテキストと意図を評価
- 誤検知をフィルタリング
- 人間が読める説明を提供
- 精度を約87%に向上
LLMプロンプトには、悪意のあるスキルが解析を操作するのを防ぐためのアンチ脱獄保護が含まれています。
ライブ脆弱性検索(SC4)
SC4はOSV.dev APIを使用して、依存関係を完全なオープンソース脆弱性データベース(PyPIおよびnpmの数万件のアドバイザリをカバー)と照合します。
- APIキー不要 — OSV.devは無料で認証不要です。
- バッチクエリ — すべての依存関係が単一のHTTP呼び出しでチェックされます。
- 自動フォールバック — OSV.devに到達できない場合(エアギャップ/オフライン)、組み込みの小規模なフォールバックリストが使用されます。
- キャッシュ — 結果はセッション中の冗長なAPI呼び出しを避けるため、メモリ内に1時間キャッシュされます。
このツールは、ライブ脆弱性データのためにapi.osv.devへのアウトバウンドHTTPSアクセスを必要とします。それが利用できない場合、検出結果は静的フォールバックリストに限定されます。
信頼モデルとデータ外部送信
SkillSpectorは多層防御であり、サンドボックスではありません。これに依存する前に、何ができて何ができないかを把握してください:
- スキャンしたスキルを実行することはありません。 すべての解析は静的(regex、Python AST、YARA)であり、オプションでファイルコンテンツのLLM評価が加わります — スキルのコードが実行されることはありません。
- LLM解析は、アナライザー対象ファイルのコンテンツを設定済みプロバイダーに送信します。 LLM解析が有効な場合(デフォルト)、ファイルコンテンツはアクティブな
SKILLSPECTOR_PROVIDERエンドポイントに送信されます。認識されたOMS署名ファイルは除外されます。--no-llmを使用すると、コンテンツをローカルに保持できます(静的解析のみ)。 - SC4は依存関係名をOSV.devに送信します。 サプライチェーンチェックは、スキルが宣言するパッケージ名とバージョンをOSV.devに照会して、既知のCVEを検索します。これはチェックの基本であり、
--no-llmでも実行されます。依存関係の座標(ファイルコンテンツではない)を送信し、APIキーは不要で、OSV.devに到達できない場合はバンドルされたリストにフォールバックします。 - ホストをサンドボックス化しません。 SkillSpectorはスキルをインストールする前に危険なパターンにフラグを立てます。インストールすることを選択したスキルを封じ込めたり隔離したりはしません。
制限事項
- 非英語コンテンツ: 他の言語のパターンを見逃す可能性があります
- 画像ベースの攻撃: 画像内のテキストを解析できません
- 暗号化/バイナリコード: コンパイル済みまたは暗号化されたコンテンツを解析できません
- 実行時動作: 静的解析のみで、動的実行はありません
- オフラインSC4:
api.osv.devへのネットワークアクセスがない場合、SC4は小規模な静的フォールバックリストを使用します
研究背景
「Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale」(Liu et al.、2026)の研究に基づく:
- データセット: 主要マーケットプレイスからの42,447個のスキル
- 脆弱性あり: 26.1%が少なくとも1つの脆弱性を含む
- 高重大度: 5.2%が悪意のある意図の可能性を示す
- 主要な発見: 実行可能スクリプトを含むスキルは脆弱である可能性が2.12倍高い
Python API統合```python
from skillspector import graph
Invoke the LangGraph workflow
result = graph.invoke({ "input_path": "/path/to/skill", "output_format": "json", # terminal, json, markdown, or sarif "use_llm": True, # False for static-only analysis })
Access results
print(f"Risk Score: {result['risk_score']}/100") print(f"Severity: {result['risk_severity']}") print(f"Recommendation: {result['risk_recommendation']}")
for finding in result["filtered_findings"]: print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")
## ライセンス
Apache License 2.0 - 詳細は [LICENSE](https://github.com/nvidia/skillspector/blob/HEAD/LICENSE) を参照してください。
## コントリビューション
コントリビューションを歓迎します!コントリビューションガイドラインをお読みいただき、プルリクエストを送信してください。
## サポート
- **問題**: [GitHub Issues](https://github.com/NVIDIA/skillspector/issues)