4月28日、Wizの研究チームが「GitHub RCE Vulnerability: CVE-2026-3854 Breakdown」と題した記事を公開した。この記事では、GitHubの内部Git infrastructure に存在した深刻なリモートコード実行脆弱性について詳しく紹介されている。以下に、その内容を紹介する。
たった1回のgit pushでGitHubサーバーを完全制御
Wiz Researchが発見したCVE-2026-3854は、GitHub.comとGitHub Enterprise Server(GHES)の両方に影響する深刻な脆弱性だ。この脆弱性の恐ろしさは、認証済みユーザーが標準的なgitクライアントで1回のgit pushコマンドを実行するだけで、GitHubのバックエンドサーバー上で任意のコマンドを実行できる点にある。
特筆すべきは、この脆弱性がAIを活用してクローズドソースバイナリから発見された最初の重大な脆弱性の一つである点だ。
GitHub.com上では、この脆弱性により共有ストレージノード上でリモートコード実行が可能となった。研究チームは、影響を受けるノード上で他のユーザーや組織に属する数百万の公開・非公開リポジトリにアクセス可能であることを確認している。GitHub Enterprise Serverでは、同じ脆弱性により完全なサーバー侵害が可能で、ホストされているすべてのリポジトリと内部シークレットへのアクセスが可能となる。
GitHubは報告から6時間以内にGitHub.com上の問題を修正し、GitHub Enterprise Serverのサポート対象バージョンすべてにパッチをリリースした。しかし、記事執筆時点で88%のGHESインスタンスが依然として脆弱な状態だという。
AIが変えたセキュリティ研究の風景
研究チームがGitHubの内部git infrastructureに注目した理由は明確だ。GitHubは世界最大のコードホスティングプラットフォームで、数億のリポジトリを抱える。その内部git infrastructure―すべてのgit pushを処理するパイプライン―は、インターネット上で最もセキュリティが重要なシステムの一つである。
従来、GitHub Enterprise Serverのような大量のコンパイル済みブラックボックスバイナリの抽出と監査には、現実的ではない時間と手作業が必要だった。しかし状況は変化した。IDA MCPを用いた自動逆アセンブリなど、AI拡張ツールを活用することで、これまでコスト的に困難だった作業が可能になったのだ。
AIにより、GitHubのコンパイル済みバイナリを迅速に分析し、内部プロトコルを再構築し、パイプライン全体でユーザー入力がサーバーの動作に影響を与える箇所を体系的に特定できた。
脆弱性の核心:X-Statヘッダーインジェクション
GitHubの内部アーキテクチャは以下のように構成されている:
- babeld - gitプロキシで、すべてのgit操作のエントリーポイント
- gitauth - 内部認証サービス。認証情報を検証し、セキュリティポリシーを返す
- gitrpcd - 内部RPCサーバー。
X-Statヘッダーを解析し、環境をセットアップ - pre-receive hook - セキュリティポリシーを強制するコンパイル済みGoバイナリ
これらのコンポーネント間の重要なリンクが**X-Stat**ヘッダーだ。セキュリティクリティカルなフィールドをセミコロン区切りのkey=valueペアとして運ぶ。内部サービスは;で分割してマップに格納するが、last-write-wins(後勝ち)セマンティクスを使用する。
脆弱性は、babeldがgit push optionsの値をセミコロンをサニタイズせずにX-Statヘッダーに直接コピーすることで発生する。攻撃者がpush optionにセミコロンを含む値を送信すると、新しい攻撃者制御のフィールドが作成される。
例:
X-Stat: ...; push_option_0=x;large_blob_rejection_enabled=bool:false; ...
これにより、以下のような重要なフィールドが上書き可能となる:
| フィールド | 用途 |
|---|---|
| rails_env | hook実行パスの制御(サンドボックス vs 直接実行) |
| custom_hooks_dir | カスタムhookスクリプト検索のベースディレクトリ |
| repo_pre_receive_hooks | 実行するpre-receive hookのJSON定義 |
RCEへのエスカレーション
リモートコード実行への道筋は3段階のインジェクションで構成される:
ステップ1 - サンドボックスのバイパス。非productionのrails_env値をインジェクトして、サンドボックス化されたproductionパスから非サンドボックスパスに切り替える
ステップ2 - hookディレクトリのリダイレクト。custom_hooks_dirをインジェクトしてhookスクリプト検索のベースディレクトリを制御
ステップ3 - パストラバーサル付きhook定義のインジェクション。repo_pre_receive_hooksにパストラバーサルシーケンスを含むhookエントリをインジェクト
実際の攻撃は以下のようになる:
git push -o '<injected fields>' origin master
remote: uid=500(git) gid=500(git) groups=500(git) ← gitサービスユーザーとしてRCE
GitHub.comでの影響範囲
GitHub Enterprise ServerでのRCE確認後、研究チームはGitHub.comでも同様の攻撃が可能かテストした。初期では失敗したが、さらなる逆エンジニアリングにより、enterprise modeを制御するboolean フラグを特定。このフラグもX-Statヘッダー経由でインジェクション可能で、最終的にGitHub.com上でもRCEを達成した:
remote: ██████████████████████████.github.net ← GitHub.com infrastructure内部
さらに深刻なのは、GitHub.comのマルチテナント環境での影響だ。コード実行によりgitユーザー権限を取得すると、そのノード上の他のユーザーや組織に属するすべてのリポジトリにアクセス可能となる。研究チームは2つの侵害ノードから数百万のリポジトリエントリを確認した。
GitHub greatly appreciates the collaboration, professionalism, and partnership that Wiz has shown throughout this process. A finding of this caliber and severity is rare, earning one of the highest rewards available in our Bug Bounty program
Alexis Wales, GitHub CISO
対応状況と推奨事項
GitHub.com: 既に修正済み。ユーザーのアクションは不要。
GitHub Enterprise Server: 即座のアクションが必要
- GHES バージョン3.19.3以降へのアップグレード必須
- 影響バージョン: 3.19.1以下
- 修正バージョン: 3.14.24、3.15.19、3.16.15、3.17.12、3.18.6、3.19.3
この脆弱性は、AIがセキュリティ研究に与える影響の大きさを示すと同時に、複雑な分散システムにおける信頼境界の重要性を改めて浮き彫りにした事例である。標準的なgitコマンドという日常的な操作から、システム全体の完全制御につながる攻撃チェーンの巧妙さは、現代のセキュリティ脅威の高度化を物語っている。
詳細はGitHub RCE Vulnerability: CVE-2026-3854 Breakdownを参照していただきたい。