概要
- Legitチームが GitLab Duo における 複数の深刻な脆弱性 を発見
- 隠しコメント だけで プライベートソースコード漏洩 や HTMLインジェクション が可能
- 攻撃チェーンは OWASP Top 10 for LLMs 2025 の5項目に該当
- GitLabは 迅速にパッチを適用 し、脆弱性を修正
- AIアシスタントの 安全な運用の重要性 を強調
GitLab Duoにおける脆弱性の発見と概要
- Legitリサーチチームによる GitLab Duo の脆弱性発見
- GitLab Duo はAnthropicのClaudeを搭載したAIアシスタント
- 開発者向けに コード提案、 セキュリティレビュー、 マージリクエスト分析 を支援
- 本来は安全性向上のためのAIが 逆に悪用可能 というリスク
- リモートプロンプトインジェクション により ソースコード窃取、 他ユーザーへの悪意ある提案、 ゼロデイ情報漏洩 が可能
隠しプロンプトによるGitLab Duoの操作(LLM01)
- ソースコード内 や MR説明文・コメント、 コミットメッセージ などに 隠し命令 を埋め込み可能
- GitLab Duoは ページ全体の文脈 を分析するため、 どこに埋め込んでも影響
- これにより 攻撃者の指示通り にAIが動作
KaTeX・Base16・不可視テキストによる検知回避(LLM08)
- ASCII Smuggler や Base16エンコード、 KaTeXの白文字 などでプロンプトを不可視化
- GitLabのUI上で 目立たない形で命令を埋め込み
- それでも Duoは隠し命令を検出・実行
信頼できないAI出力の危険性(LLM09)
- Duoの コード提案を操作 し、 悪意あるJavaScriptパッケージ を含める
- 悪意あるURL を「安全」と表示し、ユーザーを フィッシングサイト に誘導
- マージリクエスト の安全性を偽装し、 レビュワーを誤誘導
HTMLインジェクションによるWeb攻撃ベクトル化(LLM05)
- Duoの回答は Markdown形式 で表示、 カスタムラベル付きURL も利用可能
- ストリーミングMarkdownレンダリング の仕組みで HTMLタグが早期に解釈
- ラベル部分に生HTML を注入し、 <img>タグ などを挿入可能
- DOMPurify によるサニタイズも、 <img>や<a>タグ はデフォルトで除去されない
- <img>タグなどを利用し、 攻撃者サーバーへの自動リクエスト 発生
プライベートソースコードへのアクセス悪用(LLM02)
- Duoは 被害者ユーザーと同等の権限 で動作
- プライベートリポジトリ や 限定的なMR にもアクセス可能
- 攻撃者は 隠しプロンプトでDuoにソースコード抽出・Base64エンコード・<img>タグ埋め込み を指示
- 被害者がDuoを利用すると、 ソースコードが攻撃者サーバーに送信
実際の攻撃シナリオ例
- 攻撃者が 公開プロジェクトのMR説明文 に隠しプロンプトを埋め込み
- 被害者がDuoに コードレビューや分析を依頼
- Duoが 隠し命令を実行し、<img>タグ付きの回答を生成
- 被害者のブラウザが攻撃者サーバーに機密情報を送信
機密Issue・ゼロデイ情報の漏洩リスク
- Duoは プロジェクトIssue にもアクセス可能
- 内部ディスカッション や 未公開の脆弱性情報 も漏洩対象
- 隠しプロンプト でDuoに 機密Issue内容の抜き出し・Base64化・HTML埋め込み を指示可能
- GitLab従業員やコントリビューター のゼロデイ情報も標的に
GitLabの対応とパッチ内容
- 2025年2月12日、 脆弱性報告後に迅速な対応
- HTMLインジェクションおよびプロンプトインジェクション 両方を修正
- duo-ui!52で 安全でないHTMLタグのレンダリング禁止 (外部ドメインへの<img>や<form>等)
- 現時点で本攻撃チェーンは利用不可
- GitLabの 透明性と迅速な協力 に感謝
結論と教訓
- AIアシスタントの深い統合 は 利便性と同時に攻撃面の拡大 をもたらす
- 無害に見えるプロジェクト内容 にも 悪意ある命令が潜む可能性
- AIの出力だけでなく入力も厳重に管理 する必要性
- LLMがユーザー制御コンテンツを処理する場合、常に不正入力を前提に設計
- 文脈認識型AIの強力さ と リスク を再認識
参考:対象となったOWASP Top 10 for LLMs 2025
- LLM01: Prompt Injection
- LLM02: Sensitive Information Disclosure
- LLM05: Insecure Output Handling (HTML Injection)
- LLM08: Steganography/Obfuscation
- LLM09: Insecure Code Generation