GitLab AI Gateway & vLLMにおけるRCE/認証バイパス:AIインフラの信頼境界再設計

Tech

[Author: Senior CSIRT Engineer] [Knowledge_Cutoff: 2024-05] [Focus: AI Infrastructure Security, RCE Mitigation, Supply Chain Security] [Priority: High – Critical Vulnerability Patching]

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

GitLab AI Gateway & vLLMにおけるRCE/認証バイパス:AIインフラの信頼境界再設計

【脅威の概要と背景】

AI Gatewayの認可バイパス(CVE-2024-4543等)とvLLMのJinja2テンプレート悪用によるRCE(CVE-2024-34359)が特定されました。これらはAI連携を急ぐ企業インフラにおいて、未認証の攻撃者がモデル実行権限を奪取し、内部データへアクセスする重大なリスクをもたらします。

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

graph TD
    Attacker["攻撃者"] -->|1. 不正なAuthorizationヘッダー| AI_Gateway["GitLab AI Gateway"]
    AI_Gateway -->|2. 認可バイパス| Internal_LLM["内部LLMエンジン"]
    Attacker -->|3. 悪意あるchat_templateの注入| vLLM["vLLM Server"]
    vLLM -->|4. Jinja2テンプレート展開| RCE["OSコマンド実行"]
    RCE -->|5. 資格情報奪取| Cloud_Env["クラウド基盤"]

【安全な実装と設定】

1. vLLMにおけるテンプレート実行の制限

vLLMの脆弱性(CVE-2024-34359)は、モデルのtokenizer_config.jsonに含まれるchat_template(Jinja2)が適切にサンドボックス化されていないことに起因します。

誤用例(脆弱な設定): 信頼できないソース(Hugging Faceの公開リポジトリ等)からモデルを直接読み込み、デフォルト設定でサービングする。

# 脆弱な起動例

python -m vllm.entrypoints.openai.api_server --model /path/to/untrusted-model

安全な代替案(要塞化): カスタムテンプレートを明示的に指定し、モデル側の設定を上書き、または読み込みを拒否します。

# 安全な起動例:信頼できるテンプレートを強制適用

python -m vllm.entrypoints.openai.api_server \
    --model /path/to/model \
    --chat-template ./safe_templates/llama3_template.jinja \
    --disable-log-requests

2. AI Gatewayの認証保護(GitLab)

GitLab AI Gatewayのバイパスを防ぐには、インスタンス側のパッチ適用に加え、ネットワーク層での制限が必須です。

推奨される構成(Terraform/IAMポリシー例): AI Gatewayへのアクセスを特定のGitLab RailsインスタンスのIPおよびサービスアカウントに限定します。

# セキュリティグループの制限例

resource "aws_security_group_rule" "allow_gitlab_rails" {
  type              = "ingress"
  from_port         = 50052
  to_port           = 50052
  protocol          = "tcp"
  source_security_group_id = aws_security_group.gitlab_rails.id
  description       = "Only allow traffic from GitLab Rails to AI Gateway"
}

【検出と緩和策】

1. 検出ポイント(SIEM/EDR)

  • vLLMプロセスからの不審な子プロセス生成: vllm プロセスを親として whoami, curl, sh 等が起動していないか監視。

  • Jinja2 特有のペイロード: ログ内の {{, config.__class__, mro 等の文字列を検知。

  • AI Gateway ログ: HTTP 401/403 エラーの急増と、その直後の成功レスポンス(バイパス試行の兆候)。

2. 応急的な緩和策(Workaround)

  • 外部通信の遮断: vLLMインスタンスからの外部(インターネット)へのアウトバウンド通信をセキュリティグループ/FWで遮断。

  • 読み取り専用ファイルシステム: モデル実行環境のコンテナを --read-only で実行し、攻撃者によるバックドア設置を困難にする。

【実務上の落とし穴】

  • 可用性への影響: テンプレート制限を厳しくしすぎると、一部の高度なプロンプトエンジニアリング(マルチモーダル処理等)が動作しなくなる「可用性のトレードオフ」が発生します。

  • シャドーAIの存在: 開発者が公式のAI Gatewayを通さず、ローカルや勝手に立てたGPUサーバーでvLLMを動かしている場合、組織の統制外でRCEリスクが放置されるリスクがあります。

【まとめ】

組織のCSIRTおよびインフラ担当者が今すぐ実施すべき事項:

  1. 即時アップデート: GitLab (v17.0.1+, v16.11.2+) および vLLM (v0.4.2+) への更新。

  2. テンプレートの検証: 使用中の全LLMモデルの tokenizer_config.json 内に、不審なJinja2コードが含まれていないか静的スキャンを実施。

  3. 最小権限の徹底: AI Gatewayをインターネットに直接さらさず、内部ネットワークかつ認証必須の構成に強制移行。


参考文献:

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

コメント

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