gemini-cli-security について
Gemini CLI Security Extensionを基にした、コードと依存関係を検査するClaude Code向けスキルです。一般的な脆弱性に加え、LLM固有のリスクも検出し、CI向けの形式で結果を出力できます。
主な機能
- 01コード脆弱性の分析
- 02OSV.devによる依存関係スキャン
- 03シークレットとインジェクションの検出
- 04認証とデータ処理の検査
- 05LLM安全性リスクの検出
- 06Markdown・JSONレポート
活用シーン
- 01プルリクエストのマージ前にコードを確認
- 02既知のCVEについて依存関係を監査
- 03LLMアプリのプロンプトインジェクションリスクを確認
- 04CI/CDパイプラインにセキュリティ検査を追加
MCP 対応
元の拡張機能は2種類のMCPサーバーパターンを使いますが、このスキルはWebFetch、Grep、BashなどのClaude Codeネイティブツールで置き換えています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill gemini-cli-securityインストール後、Claude Code で/gemini-cli-securityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
commands/gemini-cli-security.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/gemini-cli-security.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md詳細
Gemini CLI セキュリティスキル
Gemini CLI Security Extension(github.com/gemini-cli-extensions/security)を基にした、AI を活用したセキュリティ分析スキルです。TypeScript/JavaScript の CVE データセットにおいて、適合率 90%、再現率 93%で、コードと依存関係の脆弱性を検出します。 - コードの脆弱性分析(/security:analyze パターン) - OSV.dev による依存関係のスキャン(/security:scan-deps パターン) - ハードコードされた認証情報とシークレットの検出 - インジェクション攻撃の検出(XSS、SQL、コマンド、SSRF、テンプレート) - 弱い暗号化と安全でないデシリアライズの検出 - 認証およびセッション管理の不備の検出 - LLM 固有のリスク:プロンプトインジェクション、安全でない出力処理 - CI/CD パイプライン統合向けの JSON 出力形式 - PR を自動分析するための GitHub Actions 統合パターン概要
このスキルは、Gemini CLI Security Extension の分析手法を agent-studio フレームワーク向けに応用したものです。元の拡張機能は、セキュリティ分析サーバーと OSV-Scanner 統合という 2 つの MCP サーバーパターンを使用して、2 つのベクトルをカバーします。このスキルでは、Claude Code のネイティブツール(OSV.dev API 用の WebFetch、静的分析パターン用の Grep/Bash)を使って、同等の分析を実行します。
ソースリポジトリ:https://github.com/gemini-cli-extensions/security
ライセンス:Apache 2.0
性能:適合率 90%、再現率 93%(OpenSSF CVE ベンチマーク、TypeScript/JavaScript)
使用するタイミング
- プルリクエストをマージする前に、持ち込まれた脆弱性を検出する場合
- 新しいコード変更のセキュリティレビューを行う場合
- 既知の CVE データベースに照らして依存関係を監査する場合
- プロンプトインジェクション防御のレビューが必要な、LLM 統合アプリケーションの場合
- CI/CD パイプラインのセキュリティゲートの一部として使用する場合
絶対原則
NO PRODUCTION CODE WITHOUT SECURITY ANALYSIS FOR AUTH/SECRETS/EXTERNAL-INPUT HANDLERS
認証、ハードコードされた値、外部入力、または AI モデルの出力を扱うすべてのコードパスは、本番環境へのデプロイ前に必ず分析する必要があります。
脆弱性の対象範囲
カテゴリ 1:シークレット管理
| パターン | 検出方法 |
|---|---|
| ハードコードされた API キー | Grep によるキーのパターン検索+エントロピー分析 |
| ハードコードされたパスワード | 認証情報キーワードの検出 |
| ソース内の秘密鍵 | PEM ブロック/base64 キーの検出 |
| 暗号化キー | 対称鍵の定数パターン |
カテゴリ 2:インジェクション攻撃
| 攻撃の種類 | 例 |
|---|---|
| SQL インジェクション | クエリ内での文字列連結 |
| XSS | HTML/JS 出力に含まれる、エスケープされていないユーザーコンテンツ |
| コマンドインジェクション | ユーザーが制御する引数を用いたシェル実行 |
| SSRF | サーバーリクエストでの、ユーザーが制御する URL |
| テンプレートインジェクション | テンプレートエンジンへの未サニタイズのユーザー入力 |
カテゴリ 3:認証の不備
| 不備 | 検出方法 |
|---|---|
| セッションの回避 | 認証ミドルウェアの欠如 |
| 弱いトークン | 予測可能なトークン生成 |
| 安全でないパスワードリセット | トークンを使用しない、またはメールのみでのリセット |
| MFA 強制の欠如 | 2FA チェックのない認証フロー |
カテゴリ 4:データの取り扱い
| 問題 | 検出方法 |
|---|---|
| 弱い暗号化 | シークレットへの MD5/SHA1 の使用、DES/RC4 の使用 |
| ログ内の機密データ | ログ出力文に含まれる PII/認証情報のパターン |
| PII の不適切な取り扱い | 暗号化されていない PII の保存または送信 |
| 安全でないデシリアライズ | 安全でない pickle/eval/deserialize 呼び出し |
カテゴリー 5:LLM の安全性(新規)
| リスク | 検出 |
|---|---|
| プロンプトインジェクション | サニタイズされていないユーザーコンテンツが LLM のプロンプトに挿入される |
| 安全でない出力処理 | 検証されていない LLM の出力が exec/eval/shell で使用される |
| 安全でないツール連携 | チェックされていない LLM 提供のパラメーターを使ったツール呼び出し |
使用方法
呼び出し
// From an agent
Skill({ skill: 'gemini-cli-security' });
// With arguments via Bash integration
Skill({ skill: 'gemini-cli-security', args: 'src/ --scan-deps' });
ワークフローの実行
# Analyze code in a directory
node .claude/skills/gemini-cli-security/scripts/main.cjs --target src/
# Scan dependencies for CVEs
node .claude/skills/gemini-cli-security/scripts/main.cjs --scan-deps
# JSON output for CI integration
node .claude/skills/gemini-cli-security/scripts/main.cjs --target . --json
# Scoped analysis with natural language
node .claude/skills/gemini-cli-security/scripts/main.cjs --target src/auth/ --scope "focus on token handling and session management"
出力形式
デフォルト出力(Markdown レポート):
## Security Analysis Report
### CRITICAL
- [AUTH-001] Hardcoded API key found in src/config.ts:42
Pattern: `const API_KEY = "sk-..."`
Remediation: Move to environment variable
### HIGH
- [INJ-002] SQL injection risk in src/db/users.ts:87
Pattern: String concatenation in query builder
Remediation: Use parameterized queries
### Dependencies
- [email protected] → CVE-2021-23337 (HIGH) - Prototype pollution
Fix: Upgrade to [email protected]+
JSON 出力(--json フラグ):
{
"findings": [
{
"id": "AUTH-001",
"severity": "CRITICAL",
"category": "secrets",
"file": "src/config.ts",
"line": 42,
"description": "Hardcoded API key",
"remediation": "Move to environment variable"
}
],
"dependencies": [
{
"package": "lodash",
"version": "4.17.15",
"cve": "CVE-2021-23337",
"severity": "HIGH",
"fix": "4.17.21"
}
],
"summary": {
"critical": 1,
"high": 2,
"medium": 3,
"low": 0,
"precision": 0.9,
"recall": 0.93
}
}
OSV.dev による依存関係スキャン
このスキルは OSV.dev API(認証不要)と連携して、依存関係をチェックします。
// OSV.dev batch query endpoint
WebFetch({
url: 'https://api.osv.dev/v1/querybatch',
prompt: 'Extract vulnerability IDs, severity, and affected versions for these packages',
});
対応エコシステム:npm、PyPI、RubyGems、Maven、Go、Cargo、NuGet、Packagist
GitHub Actions との連携
元の拡張機能は、GitHub Actions を介して PR 分析をサポートしています。このスキルには、同等のワークフローテンプレートが含まれています。
# .github/workflows/security.yml
name: Security Analysis
on: [pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run security analysis
run: node .claude/skills/gemini-cli-security/scripts/main.cjs --target . --json
実装に関する注意事項
MCP サーバーではなくネイティブツールを使用する理由: 元の拡張機能は 2 つの MCP サーバー(セキュリティ分析サーバーと OSV-Scanner バイナリ)を使用します。このスキルでは、代わりにネイティブの Claude Code ツールを使用します。
- 依存関係の CVE 検索では、OSV.dev にパブリック REST API があるため、OSV-Scanner の代わりに WebFetch を使用します
- パターンベースの検出では、セキュリティ分析サーバーの代わりに Grep/Bash を使用します
- この方法なら、バイナリのインストールやセッションの再起動なしですぐに動作します
ソースからの相違点:元の拡張機能ではコード分析に Gemini AI を使用しますが、このスキルでは拡張機能のベンチマークに記載されているパターンベースの検出手法を使用します。AI 分析コンポーネントは、組み込みの AI 呼び出しではなく、呼び出し元のエージェント(security-architect)が提供できます。
割り当てられたエージェント
| エージェント | 役割 |
|---|---|
security-architect | 主担当:包括的なセキュリティ監査 |
developer | 支援:コミット前のセキュリティチェック |
code-reviewer | 支援:PR レビューのセキュリティ層 |
メモリープロトコル(必須)
開始前:
.claude/context/memory/learnings.md を読みます
完了後:
- 新しい脆弱性パターンを発見した場合 ->
.claude/context/memory/learnings.md - スキャンに関する問題があった場合 ->
.claude/context/memory/issues.md - 対象範囲に関する決定をした場合 ->
.claude/context/memory/decisions.md
中断を想定してください。メモリーに記録されていないことは、起きていないことと同じです。