AI基盤を狙う新標的:GitLab AI GatewayとvLLMにおける深刻な脆弱性と防御戦略

Tech

{ “theme”: “Vulnerability_Advisory_AI_Infrastructure”, “priority”: “CRITICAL”, “author”: “CSIRT_Draft_Bot”, “version”: “1.0”, “cve_identifiers”: [“CVE-2024-10654”, “CVE-2024-55562”], “target_audience”: “Infrastructure_Security_Engineer” }

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

AI基盤を狙う新標的:GitLab AI GatewayとvLLMにおける深刻な脆弱性と防御戦略

【脅威の概要と背景】

AI統合が進む開発環境と推論基盤が、深刻な脆弱性に直面しています。GitLab AI Gatewayの認証バイパス(CVE-2024-10654)と、vLLMのチャットテンプレート処理におけるリモートコード実行(RCE: CVE-2024-55562)は、攻撃者に内部AI機能の悪用やホストOSの完全制御を許す恐れがあります。

【攻撃シナリオの可視化】

graph TD
    subgraph "Scenario A: GitLab AI Gateway"
    A1["攻撃者"] -->|偽造JWTトークン送信| B1["AI Gateway"]
    B1 -->|認証チェック回避| C1["内部AI機能・プロンプトへの不正アクセス"]
    end

    subgraph "Scenario B: vLLM (RCE)"
    A2["攻撃者"] -->|悪意のあるJinja2テンプレート注入| B2["vLLM API Server"]
    B2 -->|テンプレートレンダリング| C2{"任意コード実行"}
    C2 -->|OSコマンド| D2["ホストOSの支配 / モデル窃取"]
    end

GitLabの脆弱性は、特定の構成下でAIプロンプトやモデルへの未認可アクセスを可能にします。一方、vLLMの脆弱性は、入力を処理するテンプレートエンジンの不備を突き、API経由でシステム権限を奪取する極めて危険なものです。

【安全な実装と設定】

1. vLLMにおける安全なテンプレート管理

vLLMでは、モデルに付随するチャットテンプレート(Jinja2)が任意コード実行の起点となります。信頼できないモデルの自動読み込みを制限する必要があります。

❌ 脆弱な起動構成 (Bash)

# 信頼できないリモートコードやテンプレートを無制限に許可

python -m vllm.entrypoints.openai.api_server \
    --model some-untrusted-model/llama \
    --trust-remote-code

✅ 安全な代替案 (Bash)

# 信頼済みモデルのみを使用し、リモートコード実行を明示的に禁止


# チャットテンプレートを検証済みのローカルファイルで固定する

python -m vllm.entrypoints.openai.api_server \
    --model /path/to/validated-local-model \
    --chat-template /path/to/secure_template.jinja \
    --disable-log-requests

2. GitLab AI Gatewayの保護

GitLabインスタンスとAI Gateway間の通信を最新のパッチレベルに保ち、認証を強化します。

✅ 対策コード (Docker/GitLab Update)

# GitLab AI Gatewayを修正済みバージョンへ更新(例:v1.17.2以降)

docker pull registry.gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/model-gateway:v1.17.2

# GitLab本体のセキュリティパッチ適用(17.6.1, 17.5.2, 17.4.4以上)

sudo apt-get update && sudo apt-get install gitlab-ee

【検出と緩和策】

  • ログ分析 (vLLM): APIリクエストの chat_template フィールドに __subclasses__popen などのPythonイントロスペクションキーワードが含まれていないか、SIEMで監視(Jinja2 Injection攻撃の兆候)。

  • ネットワーク隔離: vLLMやAI Gatewayを、インターネットから直接アクセス可能なセグメントに置かず、WAFやリバースプロキシを介して特定のクライアントIPからのみ通信を許可する。

  • 実行環境の隔離: vLLMプロセスを、特権を持たないユーザーで実行し、gVisorやKata Containersなどのサンドボックス環境で稼働させる。

【実務上の落とし穴】

  • 可用性とのトレードオフ: --trust-remote-code を無効化すると、独自のアーキテクチャを持つ最新モデル(例:新しいカスタムレイヤーを含むモデル)がロードできなくなる場合があります。この場合、コードの事前監査が必須となります。

  • 誤検知のリスク: 開発者がデバッグ目的で複雑なJinja2テンプレートを送信する場合、セキュリティフィルターによって正当なリクエストがブロックされる可能性があります。

【まとめ】

組織として直ちに実施すべき3つの優先事項:

  1. 即時アップデート: GitLab AI GatewayおよびGitLab本体を、認証バイパスが修正された最新バージョンへ更新する。

  2. vLLMの構成見直し: --trust-remote-code の使用を極力避け、外部から供給されるチャットテンプレートをそのまま実行しないよう設定を固定する。

  3. 最小権限の徹底: AI推論コンテナに対し、ホストネットワークや特権権限を与えないランタイム設定を適用する。


参考文献:

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました