SJ blog
security
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

GitHub CVE-2026-3854:git push 1回でサーバー完全制圧——セルフホストの88%が影響圏

git pushのオプション値をサービスヘッダーに未サニタイズで渡していたコマンドインジェクション(CVSS 8.7)がGitHub.comとEnterprise Server全バージョンに影響。プッシュアクセスさえあれば全リポジトリ・全シークレットを奪える。Enterprise Server向けパッチが4月29日公開済み。

一言結論

CVE-2026-3854はgit pushのオプション値が内部サービスヘッダーに未サニタイズで渡されるコマンドインジェクションで、リポジトリへのプッシュアクセス権を持つ攻撃者がGitHub Enterprise Server全体を完全に制圧できる。セルフホストGHESの88%がパッチ未適用と推計されており、今すぐアップグレードが必要。

何が起きたのか

2026年4月29日、Help Net Securityが報告したデータによると、セルフホスト型のGitHub Enterprise Server(GHES)の88%がCVE-2026-3854のパッチを未適用の状態にある。

この脆弱性はWizのセキュリティ研究者が2026年3月4日にバグバウンティ経由でGitHubに報告したもので、GitHubは2時間以内にGitHub.comへの修正をデプロイし、Enterprise Server向けには複数バージョンに渡るパッチを順次公開した。しかし、自己管理型のインスタンスを運用する組織での適用率はいまだ低いままだ。

脆弱性の仕組み:push optionが凶器になる

git pushには--push-option(または-o)フラグを使って任意の文字列を送信できる。これはCI/CDパイプラインのトリガーや独自の操作に使われる機能だ。

# 通常の使い方
git push origin main -o ci.skip=true
git push origin main -o merge_request.create

CVE-2026-3854の根本原因は、このpush optionの値が内部サービスへのヘッダーとして未サニタイズのまま渡されていたことにある。

通常のフロー:
  git push (option: "ci.skip=true")

  GitHubバックエンド

  内部サービスへのヘッダー: "X-Push-Option: ci.skip=true"

攻撃のフロー:
  git push (option: "ci.skip=true\r\nX-Injected-Header: malicious-value")

  GitHubバックエンド(サニタイズなし)

  内部サービスへのヘッダーが分裂・挿入される
      → コマンドインジェクション成立

研究者は1回のgit pushこのインジェクションを成立させることができた。

影響範囲

環境必要な権限最大の影響
GitHub.comリポジトリへのプッシュアクセス共有ストレージノードでRCE
GitHub Enterprise Cloudリポジトリへのプッシュアクセス同上
GitHub Enterprise Serverリポジトリへのプッシュアクセスサーバー完全制圧(全リポジトリ+全シークレット)

GitHub Enterprise Serverが最も深刻だ。単一のインスタンスが組織の全コードベースとCI/CDシークレット(デプロイキー、クラウド認証情報、証明書等)を保持しているため、サーバー乗っ取りは組織全体のサプライチェーン侵害に直結する。

GHES完全制圧時の影響:
  ☠ 全リポジトリの読み取り・改ざん
  ☠ 全GitHubアクションのシークレット窃取
  ☠ 全デプロイキー(本番サーバーへのアクセス)
  ☠ 全webhook設定(外部サービス連携の乗っ取り)
  ☠ 全組織メンバーのアクセス制御操作

パッチ適用状況とタイムライン

2026-03-04: Wizがバグバウンティ経由でGitHubに報告
2026-03-04: GitHubが2時間以内にGitHub.comへ修正デプロイ
2026-03-04: GitHubが法証分析を開始(GitHub.com上での悪用なし確認)
2026-04-xx: GHES向けパッチを複数バージョンで公開
2026-04-29: Help Net Securityがセルフホストの88%が未パッチと報告

GHES向けパッチは以下のバージョンで提供されている。

修正済みバージョン:
  3.14.24
  3.15.19
  3.16.15
  3.17.12
  3.18.6
  3.19.3

今すぐ行うべき対応

GHES管理者向け:バージョン確認とアップグレード

# 現在のGHESバージョン確認(管理コンソール or API)
curl -u "admin:$ADMIN_TOKEN" \
  https://github.example.com/api/v3/meta \
  | jq .installed_version

# アップグレード手順はGitHub Docsを参照:
# https://docs.github.com/en/enterprise-server@3.19/admin/upgrading-your-instance/

パッチ適用済みバージョンへのアップグレードが唯一の根本対策だ。

緩急に応じた暫定対策

アップグレードまでの間、以下を検討する。

# push optionを組織レベルで無効化(可能な場合)
# GHESの管理コンソール → Policies → Push options → Disabled

# ネットワーク境界を強化(信頼済みIPのみpushを許可)
# Load Balancer / ファイアウォールで443/22を制限

GitHub.com / GitHub Enterprise Cloud利用者

GitHub.comへの修正は3月4日に完了しており、追加対応は不要だ。Wizとの協力による法証調査で、実際の悪用がなかったことが確認されている。

なぜセルフホストの適用率が低いのか

GHESのアップグレードは組織の承認フローや計画されたメンテナンス窓に依存するため、GitHub.comほど即座には適用されない。しかし今回のCVEは以下の理由から通常より速い対応が求められる。

  1. 攻撃要件が低い: 外部コントリビューターを受け入れているリポジトリなら、組織外の人間がプッシュアクセスを持てる
  2. 影響が壊滅的: サーバー全体の制圧はサプライチェーン攻撃の起点になる
  3. 88%が未適用: 公開情報として「GHESが狙い目」と広まっている
# 外部コントリビューターがプッシュアクセスを持つリポジトリを確認
gh api graphql -f query='
  query {
    organization(login: "YOUR_ORG") {
      repositories(first: 100) {
        nodes {
          name
          collaborators(affiliation: OUTSIDE) {
            nodes { login }
          }
        }
      }
    }
  }
'

注意点・未確認情報

  • GitHub.comでの悪用なし(Githubの法証調査ベース)。GHES環境での悪用有無は非公開
  • 88%という未適用率はHelp Net Securityの推計であり、GitHubの公式データではない
  • 具体的なエクスプロイトコードは未公開(Wizが責任ある開示を実施)

まとめ

  • CVE-2026-3854はgit pushのpush optionをヘッダーに未サニタイズで渡すコマンドインジェクション(CVSS 8.7)
  • プッシュアクセス権があれば GitHub Enterprise Serverを完全制圧できる
  • GHESのパッチ適用済みバージョン(3.14.24以上等)への即時アップグレードが必要
  • セルフホストGHESの88%が未適用——この数字が知れ渡る前に対処する

参考リンク