広く使用されているオープンソースのセルフホスト型Gitサービス「Gogs」において、認証済みユーザーであれば誰でも基盤サーバー上でリモートコード実行(RCE)を可能にするゼロデイ脆弱性が発見されました。
この脆弱性はRapid7の研究者Jonah Burgessが発見したもので、CVSSv4スコアは9.4(Critical)と評価されており、開示時点ではパッチが提供されていません。
引数インジェクション(CWE-88)として追跡されているこの脆弱性は、Gogsの「マージ前にリベース」マージ操作に存在します。
攻撃者は--execフラグを含む悪意のあるブランチ名でプルリクエストを作成することで、サーバーが実行するgit rebaseコマンドに直接インジェクションすることができます。
Rapid7によると、git rebaseはリプレイされた各コミットの後にsh -cで任意のシェルコマンドを実行する--execフラグを受け入れるため、悪意のあるブランチ名によってGogsサーバープロセスのユーザーとしてコードが実行されます。
根本的な原因はinternal/database/pull.go内のMerge()関数にあり、プルリクエストのベースブランチ名を--セパレーター(後続の引数がフラグとして解釈されることを防ぐPOSIX慣例)なしにgit rebaseへ直接渡しています。
安全なgit-module APIを通じて堅牢化されたGogsの他の呼び出し箇所とは異なり、このコードパスは生のprocess.ExecDirを使用しており、既存のすべての保護を完全に回避しています。
この脆弱性が特に危険なのは、悪用の敷居が極めて低い点です。管理者権限は不要で、他のユーザーとのやり取りも必要なく、攻撃者は自身のアカウント内だけで完結して操作できます。
Gogsはデフォルトでオープン登録が有効(DISABLE_REGISTRATION = false)かつリポジトリ作成数の制限なし(MAX_CREATION_LIMIT = -1)で出荷されているため、未認証の攻撃者はアカウントを登録し、リポジトリを作成し、リベースマージを有効化するだけで、完全なエクスプロイトチェーンを単独で実行できます。
LinuxとWindowsの両ターゲットに対して攻撃全体を自動化するMetasploitモジュールが公開されており、エクスプロイトを数秒で完了させます。Linuxでは、ペイロードはブランチ名へのスペース禁止というGitの制限を回避するために${IFS}を活用します。
このエクスプロイトは、バイナリ、Docker、ソースを問わず、すべてのサポート対象プラットフォーム(Linux、macOS、Windows)においてGogs 0.14.2および0.15.0+dev(コミットb53d3162)に影響することが確認されています。
悪用に成功すると、攻撃者はGogsサーバープロセスユーザーとして任意のコマンド実行権限を取得し、深刻な二次被害をもたらします。
インターネットに公開されているGogsインスタンスをShodanで検索すると、1,141件以上の露出したデプロイメントが見つかりますが、企業、大学、オープンソースプロジェクトのプライベートVPNや内部ネットワークへのデプロイを含む実際のインストールベースはさらに大幅に大きいとされています。
防御担当者は、以下に一致するエラーエントリについてGogsサーバーのログを監視してください。
その他の痕跡として、リポジトリ一覧における--で始まる悪意のあるブランチ名、HTTP 500エラーを返す破損したリポジトリのgit状態、および悪用後にユーザーのアプリケーション設定に残留するmsf_<hex>という名前の予期しないAPIトークンが挙げられます。
Rapid7は2026年3月17日にGogsメンテナーへ脆弱性を報告しましたが、複数回のフォローアップにもかかわらず、2026年5月28日の開示日時点で修正は提供されていません。Gogsを使用している組織は直ちに以下の対応を行うべきです。
この脆弱性は、CVE-2024-39933、CVE-2024-39932、CVE-2024-39930など、Gogsにおける引数インジェクション問題の繰り返しのパターンに続くものであり、これらはすべて他のコードパスではパッチが適用されたものの、Merge()関数は引き続き脆弱なままでした。
翻訳元: https://cyberpress.org/gogs-0-day-execute-code-servers/