mcpField
V
verify-security

verify-security

github.com/aurite-aiセキュリティ4445 回インストール2 週間前に更新
リポジトリ

verify-security について

ソースコードと設定をローカルで検査し、セキュリティ上のアンチパターンや脆弱性の可能性を確認するスキルです。秘密情報、依存関係、入力処理、エラー情報、安全でない設定、機密データのログを対象とします。

主な機能

  1. 01ハードコードされた秘密情報の検出
  2. 02依存関係のバージョン固定確認
  3. 03外部入力処理のレビュー
  4. 04エラー詳細の露出を指摘
  5. 05セキュリティ関連の既定値を確認
  6. 06ログ内の機密データを検索

活用シーン

  1. 01リポジトリ内の認証情報の監査
  2. 02依存関係の宣言の確認
  3. 03入力処理とエラーレスポンスの点検

インストール

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

$npx skills add https://github.com/aurite-ai/agent-verifier --skill verify-security

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

詳細

セキュリティ検証

目的

セキュリティ上のアンチパターンや脆弱性がないか、コードを検証します。分析はすべてローカルで行われ、コードが端末の外に送信されることはありません。

使用するタイミング

ユーザーが次のように依頼したときに、このスキルを実行します。

  • 「エージェントのセキュリティを検証して」
  • 「セキュリティを検証して」
  • 「シークレットを確認して」
  • 「脆弱性をスキャンして」
  • 「セキュリティ監査をして」

注: パターン、品質、言語固有のチェックを含む完全な検証を行うには、ユーザーに 「エージェントを検証して」 と伝えるよう案内してください。

プロセス

ステップ 1:ファイルを特定する

分析対象のファイルを探します。

設定ファイル:

  • package.json、pyproject.toml、Cargo.toml — 依存関係
  • .env.example — 環境設定テンプレート(実際のシークレットに見える値があれば指摘)
  • .gitignore — .env と .env.local が無視されていることを確認(無視されていない場合は問題として指摘)
  • config.py、settings.py、config.ts — 設定

ソースファイル:

  • *.py、*.ts、*.js、*.go、*.rs — ソースコード
  • ファイル名に auth、api、client、secret、config が含まれるファイルを優先します。

除外対象:

  • node_modules/、.venv/、venv/、__pycache__/
  • *.test.*、*.spec.*、*_test.go
  • .env、.env.local、.env.*.local — 絶対に開かないでください。これらにはユーザーの実際のシークレットが含まれています。gitignore されているかどうかだけを確認します。
ステップ 2:セキュリティチェックを実行する
チェックの分類
  • [PATTERN] — 機械的なチェックです。記載どおりに適用します。
  • [HEURISTIC] — 判断が必要です。検出結果を明確に示します。

検出結果にはすべて、パターンの場合は [P]、ヒューリスティックの場合は [H] を付けます。


2.1 [PATTERN] ハードコードされたシークレット

次のパターンに一致する代入をスキャンします(大文字・小文字を区別しません)。

変数パターン不合格条件
API_KEY文字列リテラルが代入されている
SECRET文字列リテラルが代入されている
PASSWORD文字列リテラルが代入されている
TOKEN文字列リテラルが代入されている
PRIVATE_KEY文字列リテラルが代入されている
AWS_ACCESS_KEY_ID文字列リテラルが代入されている
AWS_SECRET_ACCESS_KEY文字列リテラルが代入されている

不合格の例:

# ❌ Issue
API_KEY = "sk-abc123..."
password = "hunter2"
OPENAI_API_KEY = "sk-proj-..."

# ✅ Pass (value loaded at runtime from env or a secrets manager, never a literal)
api_key = settings.api_key
password = secret_store.get("db-password")

次のパターンも指摘します:

  • 既知の API キーパターンに一致する文字列リテラル:
    • sk-...(OpenAI)
    • sk-ant-...(Anthropic)
    • AKIA...(AWS)
    • ghp_...(GitHub)
    • xoxb-...(Slack)

重大度:❌ 問題


2.2 [PATTERN] 依存関係のバージョン固定

Python(requirements.txt):

パターン重大度
package>=1.0❌ 問題
package>1.0❌ 問題
package(バージョンなし)❌ 問題
package==1.0.0✅ 合格
package~=1.0✅ 合格

Python(pyproject.toml):

[project.dependencies] と [tool.poetry.dependencies] を確認します。

  • バージョンが固定されていない、または >= のバージョン → ❌ 問題
  • ==、^、または ~ で固定されたバージョン → ✅ 合格

JavaScript/TypeScript(package.json):

パターン重大度
"package": "*"❌ 問題
"package": "latest"❌ 問題
"package": ">=1.0.0"⚠️ 警告
"package": "^1.0.0"✅ 合格
"package": "~1.0.0"✅ 合格
"package": "1.0.0"✅ 合格

2.3 [HEURISTIC] 入力検証

外部データの処理を確認します。

次を探します:

  • HTTP リクエストハンドラー(@app.route、router.get など)
  • ユーザー入力の処理(request.body、req.params、input())
  • ファイルのアップロード
  • ユーザー入力を使用するデータベースクエリ

次の場合は指摘します:

  • ユーザー入力がサニタイズされず、データベースクエリに直接渡されている
  • ユーザー入力からファイルパスが検証なしに構築されている
  • 外部データがスキーマ検証なしで JSON 解析されている

重大度:⚠️ 警告

指摘対象となるパターンの例:

# ⚠️ Warning - SQL without parameterization
query = f"SELECT * FROM users WHERE id = {user_id}"

# ⚠️ Warning - Path traversal risk
file_path = os.path.join(base_dir, user_filename)

# ✅ Pass - Parameterized query
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))

2.4 [HEURISTIC] エラーメッセージの露出

情報漏えいがないか、エラー処理を確認します。

次の場合は指摘します:

  • HTTP レスポンスにスタックトレースが返されている
  • データベースのエラーメッセージがユーザーに公開されている
  • エラーメッセージに内部パスやシステム情報が含まれている
  • 本番コードでデバッグモードが有効になっている

次を探します:

# ⚠️ Warning
except Exception as e:
    return {"error": str(e)}  # Exposes internal details

# ⚠️ Warning
app = Flask(__name__)
app.debug = True  # Debug in production

# ✅ Pass
except Exception as e:
    logger.error(f"Error: {e}")
    return {"error": "An error occurred"}

重大度:⚠️ 警告


2.5 [HEURISTIC] セキュアなデフォルト設定

安全でないデフォルト設定がないか、構成を確認します。

設定安全でない設定安全な設定
CORS*(すべて許可)特定のオリジン
SSL 検証verify=Falseverify=True または省略
デバッグモードdebug=Truedebug=False
Cookie のセキュリティsecure=Falsesecure=True
CSRF無効有効

例:

# ⚠️ Warning
requests.get(url, verify=False)
app.config["SESSION_COOKIE_SECURE"] = False
CORS(app, origins="*")

# ✅ Pass
requests.get(url)  # verify=True is default
app.config["SESSION_COOKIE_SECURE"] = True
CORS(app, origins=ALLOWED_ORIGINS)  # explicit allowlist

重大度:⚠️ 警告


2.6 [HEURISTIC] 機密データのログ記録

機密データをログに記録するステートメントがないか確認します。

ログに以下が含まれている場合は、問題として報告します:

  • パスワードまたはトークン
  • API キー
  • 個人を特定できる情報(PII)
  • クレジットカード番号
  • セッショントークン

次の項目を確認します:

# ⚠️ Warning
logger.info(f"User login: {username} with password {password}")
print(f"API response: {response.json()}")  # May contain tokens

# ✅ Pass
logger.info(f"User login: {username}")
logger.debug(f"Request to {url}")  # No sensitive data

重大度:⚠️ 警告


ステップ 3:レポートを生成する
# Security Verification Report

**Project:** [name or path]
**Date:** [current date]
**Files analyzed:** [count]

## Summary

✅ X checks passed | ⚠️ Y warnings | ❌ Z issues

## Secrets

- [x] No hardcoded secrets found
- [ ] ❌ Hardcoded secret at `[file:line]`

## Dependencies

- [x] All dependencies pinned
- [ ] ❌ Unpinned dependencies in `[file]`

## Input Validation

- [x] External input properly validated
- [ ] ⚠️ Potential injection at `[file:line]`

## Error Handling

- [x] Errors properly sanitized
- [ ] ⚠️ Information leakage at `[file:line]`

## Findings

> `[P]` = pattern-matched · `[H]` = heuristic

### ✅ Passing
- `[P]` No hardcoded API keys or secrets
- `[P]` Dependencies properly pinned

### ⚠️ Warnings
- `[H]` [Check]: [description]
  - **Location:** [file:line]
  - **Risk:** [what could go wrong]
  - **Suggestion:** [how to fix]

### ❌ Issues
- `[P]` [Check]: [description]
  - **Location:** [file:line]
  - **Rule:** [which rule violated]
  - **Fix:** [specific remediation]

## Recommendations

1. [Priority recommendation]
2. [Additional improvements]

パターン、品質、言語固有のチェックを含む完全な検証を行うには、「verify agent」と入力してください。

コメント