mcpField
G
gitlab-vulnerability

gitlab-vulnerability

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

gitlab-vulnerability について

gitlab-vulnerabilityは、glab apiを通じてGitLabプロジェクトの脆弱性を管理するスキルです。検出結果の確認、状態変更、データ出力により、セキュリティレビューとトリアージを支援します。

主な機能

  1. 01プロジェクトの脆弱性一覧と絞り込み
  2. 02脆弱性とスキャナー検出結果の確認
  3. 03脆弱性の確認・却下・解決
  4. 04検出状態への差し戻し
  5. 05脆弱性データの出力と統計確認

活用シーン

  1. 01新たに検出された高重大度脆弱性のトリアージ
  2. 02重大度や状態別の脆弱性集計
  3. 03誤検知や許容リスクの記録
  4. 04CVEまたはパイプライン検出結果の確認

インストール

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

$npx skills add https://github.com/grandcamel/gitlab-assistant-skills --skill gitlab-vulnerability

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

詳細

脆弱性スキル

glab api の生エンドポイント呼び出しを使用した、GitLab のセキュリティ脆弱性管理です。

クイックリファレンス

操作コマンドパターンリスク
脆弱性の一覧表示glab api projects/:id/vulnerabilities-
脆弱性の取得glab api projects/:id/vulnerabilities/:vuln_id-
脆弱性の確認glab api projects/:id/vulnerabilities/:vuln_id/confirm -X POST⚠️
脆弱性の却下glab api projects/:id/vulnerabilities/:vuln_id/dismiss -X POST -f ...⚠️
脆弱性の解決glab api projects/:id/vulnerabilities/:vuln_id/resolve -X POST⚠️
検出済みに戻すglab api projects/:id/vulnerabilities/:vuln_id/revert -X POST⚠️
検出結果の一覧表示glab api projects/:id/vulnerability_findings-

リスク凡例:- 安全 | ⚠️ 注意 | ⚠️⚠️ 警告 | ⚠️⚠️⚠️ 危険

このスキルを使用するタイミング

必ず使用する場合:

  • ユーザーが「脆弱性」、「セキュリティの問題」、「CVE」に言及した場合
  • ユーザーがセキュリティスキャンの結果を表示したい場合
  • ユーザーが「SAST」、「DAST」、「依存関係スキャン」、「コンテナスキャン」に言及した場合
  • ユーザーがセキュリティ検出結果を却下または解決したい場合
  • ユーザーがセキュリティダッシュボードについて尋ねた場合

使用しない場合:

  • ユーザーがセキュリティスキャンを実行したい場合(gitlab-ci を使用)
  • ユーザーがセキュリティ設定を構成したい場合(プロジェクト設定を使用)
  • ユーザーが一般的なイシュー追跡を行いたい場合(gitlab-issue を使用)

API の前提条件

必須のトークンスコープ: read_api または api

権限:

  • 脆弱性の読み取り:Developer 以上
  • 脆弱性の管理:Developer 以上

GitLab のティア: 脆弱性管理機能をすべて利用するには Ultimate が必要です

脆弱性の状態

状態説明
detected新規で、未レビューの脆弱性
confirmed実際の脆弱性であると確認済み
dismissed誤検知、または修正しないものとしてマーク済み
resolved修正済みで、存在しなくなった脆弱性

深刻度レベル

深刻度説明
critical最も深刻度が高く、直ちに対応が必要
high大きなリスク
medium中程度のリスク
low軽微なリスク
info情報提供目的の検出結果
unknown深刻度が未判定

利用可能なコマンド

プロジェクトの脆弱性を一覧表示
# List all vulnerabilities
glab api projects/123/vulnerabilities --method GET

# Filter by state
glab api "projects/123/vulnerabilities?state=detected" --method GET

# Filter by severity
glab api "projects/123/vulnerabilities?severity=critical,high" --method GET

# Filter by multiple criteria
glab api "projects/123/vulnerabilities?state=detected&severity=critical,high" --method GET

# With pagination
glab api projects/123/vulnerabilities --paginate

# Using project path
glab api "projects/$(echo 'mygroup/myproject' | jq -Rr @uri)/vulnerabilities"
脆弱性の詳細を取得
# Get specific vulnerability
glab api projects/123/vulnerabilities/456 --method GET
脆弱性を確認

検出された脆弱性を、確認済み(実際のセキュリティ上の問題)としてマークします。

# Confirm vulnerability
glab api projects/123/vulnerabilities/456/confirm --method POST
脆弱性を却下

脆弱性を却下(誤検知または受容したリスク)としてマークします。

# Dismiss as false positive
glab api projects/123/vulnerabilities/456/dismiss --method POST \
  -f comment="False positive - this code path is not reachable"

# Dismiss as acceptable risk
glab api projects/123/vulnerabilities/456/dismiss --method POST \
  -f comment="Accepted risk - mitigated by network controls"

# Dismiss with dismissal reason (if available)
glab api projects/123/vulnerabilities/456/dismiss --method POST \
  -f comment="Not applicable to our use case" \
  -f dismissal_reason="used_in_tests"
脆弱性を解決

脆弱性を解決済み(修正済み)としてマークします。

# Resolve vulnerability
glab api projects/123/vulnerabilities/456/resolve --method POST
検出済みの状態に戻す

脆弱性を検出済みの状態に戻します。

# Revert to detected
glab api projects/123/vulnerabilities/456/revert --method POST
脆弱性の検出結果を一覧表示

検出結果は、セキュリティスキャナーからの生の結果です。

# List all findings
glab api projects/123/vulnerability_findings --method GET

# Filter by severity
glab api "projects/123/vulnerability_findings?severity=critical,high" --method GET

# Filter by scanner
glab api "projects/123/vulnerability_findings?scanner=sast" --method GET

# Filter by pipeline
glab api "projects/123/vulnerability_findings?pipeline_id=789" --method GET

# With pagination
glab api projects/123/vulnerability_findings --paginate
セキュリティダッシュボード(グループレベル)
# Get security statistics for group
glab api groups/456/vulnerability_exports --method POST \
  -f export_format="csv"

# Get group vulnerability statistics
glab api "groups/456/vulnerability_statistics" --method GET

一般的なワークフロー

ワークフロー 1:新しい脆弱性のトリアージ
project_id=123

# Get all detected (new) vulnerabilities
glab api "projects/$project_id/vulnerabilities?state=detected" --paginate | \
  jq -r '.[] | "[\(.severity)] \(.title) - \(.id)"'

# Review critical/high first
glab api "projects/$project_id/vulnerabilities?state=detected&severity=critical,high" | \
  jq -r '.[] | "ID: \(.id)\nTitle: \(.title)\nSeverity: \(.severity)\nScanner: \(.scanner.name)\nLocation: \(.location | @json)\n---"'
ワークフロー 2:セキュリティレポートの生成
project_id=123

# Summary by severity
echo "=== Vulnerability Summary ==="
glab api "projects/$project_id/vulnerabilities" --paginate | \
  jq -r 'group_by(.severity) | map({severity: .[0].severity, count: length}) | .[] | "\(.severity): \(.count)"'

# Summary by state
echo ""
echo "=== By State ==="
glab api "projects/$project_id/vulnerabilities" --paginate | \
  jq -r 'group_by(.state) | map({state: .[0].state, count: length}) | .[] | "\(.state): \(.count)"'

# Summary by scanner
echo ""
echo "=== By Scanner ==="
glab api "projects/$project_id/vulnerabilities" --paginate | \
  jq -r 'group_by(.scanner.name) | map({scanner: .[0].scanner.name, count: length}) | .[] | "\(.scanner): \(.count)"'
ワークフロー 3:誤検知を一括で却下
project_id=123

# Dismiss all info-level findings from specific scanner
glab api "projects/$project_id/vulnerabilities?severity=info&state=detected" --paginate | \
  jq -r '.[].id' | while read vuln_id; do
    echo "Dismissing $vuln_id"
    glab api projects/$project_id/vulnerabilities/$vuln_id/dismiss --method POST \
      -f comment="Bulk dismissed - info level findings"
  done
ワークフロー 4:重大な脆弱性の追跡
project_id=123

# List critical vulnerabilities with details
glab api "projects/$project_id/vulnerabilities?severity=critical" --paginate | \
  jq -r '.[] | {
    id: .id,
    title: .title,
    state: .state,
    detected_at: .detected_at,
    scanner: .scanner.name,
    identifiers: [.identifiers[]?.name] | join(", ")
  }'
ワークフロー 5:CVE の確認
project_id=123
cve="CVE-2021-44228"

# Search for specific CVE
glab api "projects/$project_id/vulnerabilities" --paginate | \
  jq -r ".[] | select(.identifiers[]?.name == \"$cve\") | \"ID: \(.id), State: \(.state), Title: \(.title)\""
ワークフロー 6:脆弱性のエクスポート
project_id=123

# Export to JSON
glab api "projects/$project_id/vulnerabilities" --paginate > vulnerabilities.json

# Export to CSV format
glab api "projects/$project_id/vulnerabilities" --paginate | \
  jq -r '["id","title","severity","state","scanner","detected_at"],
         (.[] | [.id, .title, .severity, .state, .scanner.name, .detected_at]) | @csv' > vulnerabilities.csv
ワークフロー 7:パイプラインの結果を比較
project_id=123

# Get findings from specific pipeline
pipeline_id=789
glab api "projects/$project_id/vulnerability_findings?pipeline_id=$pipeline_id" | \
  jq -r '.[] | "\(.severity): \(.name)"'

スキャナーの種類

スキャナーレポートの種類説明
sastSAST静的アプリケーションセキュリティテスト
dastDAST動的アプリケーションセキュリティテスト
dependency_scanning依存関係スキャンサードパーティ製依存関係の脆弱性
container_scanningコンテナスキャンコンテナイメージの脆弱性
secret_detectionシークレット検出コード内にハードコードされたシークレット
coverage_fuzzingカバレッジファジングファジングテストの結果
api_fuzzingAPI ファジングAPI ファジングの結果

トラブルシューティング

問題原因解決策
403 ForbiddenUltimate が必要、またはアクセス権がありませんGitLab のプランと権限を確認します
結果が空スキャンが実行されていませんCI でセキュリティスキャナーを設定して実行します
脆弱性が古い最近のパイプラインがありませんセキュリティジョブを含む新しいパイプラインを実行します
却下できないすでに却下または解決済みです現在の状態を確認します
スキャナーの種類が見つからないスキャナーが設定されていませんCI 設定にスキャナーを追加します

ベストプラクティス

  1. 定期的にトリアージする:新しい脆弱性を頻繁に確認します
  2. 却下の理由を記録する:理由を説明するコメントを必ず追加します
  3. 重大な問題を追跡する:重大度が「Critical」または「High」の脆弱性を注意深く監視します
  4. イシューと連携する:確認済みの脆弱性についてイシューを作成します
  5. 可能な場合は自動化する:CI を使用して、新たに検出された重大な脆弱性がある場合に失敗するようにします

関連ドキュメント

コメント