인증된 일반 사용자가 셀프호스팅 Git 서버를 장악하는 9.4점 결함, 그리고 교차 테넌트 침해


목차

  1. 요약 (TL;DR)
  2. 취약점 분석 — --exec 인자 주입
  3. 공격 시나리오 — 무권한 계정에서 서버 장악까지
  4. 영향 범위와 노출 규모
  5. 포렌식 흔적과 탐지
  6. 완화 권고 (패치 부재 상황)
  7. 한국 관점 — 셀프호스팅 Git의 사각지대
  8. 결론
  9. 참고 문헌

요약 (TL;DR)

2026년 5월 28일, Rapid7은 인기 셀프호스팅 Git 서비스 Gogs에서 인증된 일반 사용자가 서버에서 임의 코드를 실행할 수 있는 Critical 취약점을 공개했다. CVE 식별자는 아직 부여되지 않았으나 Rapid7은 CVSS 9.4로 산정했다.

핵심은 Gogs의 "Rebase before merging" 병합 동작에서 발생한다. 공격자가 악성 브랜치명으로 풀 리퀘스트를 생성하면, 해당 브랜치명이 git rebase 명령의 --exec 플래그로 주입되어 각 커밋 재생 후 임의 셸 명령이 실행된다. 관리자 권한도, 타 사용자와의 상호작용도 필요 없다.

더 심각한 점은 본 취약점이 2026년 3월 17일 메인테이너에게 보고되었음에도 발행 시점 기준 미패치 상태이며, Rapid7이 Linux·Windows 양쪽을 자동 공격하는 Metasploit 모듈까지 공개했다는 것이다. 즉, 무기는 공개되었고 패치는 없다.

Key Judgments

# 판단 신뢰도
KJ-1 본 결함은 사용자 입력(브랜치명)이 셸 명령 인자로 그대로 전달되는 전형적 인자 주입(argument injection)이며, 인증 외 별도 전제 조건이 사실상 없다. High
KJ-2 미패치 + 공개 Metasploit 모듈의 조합은 실전 악용 장벽을 거의 제거한다. 노출 인스턴스는 즉시 위험에 노출된다. High
KJ-3 단일 서버를 공유하는 환경에서 교차 테넌트(cross-tenant) 침해가 가능하다 — 한 사용자가 타인의 비공개 저장소를 읽을 수 있다. High
KJ-4 기본 설정(회원가입·저장소 생성 허용) 인스턴스가 가장 위험하다. 완화는 가능하나 근본 패치를 대체하지 못한다. Medium-High
KJ-5 셀프호스팅 Git은 소스코드·자격증명·CI 파이프라인의 단일 신뢰 지점이므로, 본 결함은 공급망 침해의 교두보가 될 수 있다. Medium-High

1. 취약점 분석 — --exec 인자 주입

Gogs는 Go로 작성된 경량 셀프호스팅 Git 서비스로, GitHub의 자체 호스팅 대안으로 널리 쓰인다. 본 취약점은 PR을 병합할 때 git rebase를 사용하는 "Rebase before merging" 옵션에서 발생한다.

git rebase는 한 브랜치의 커밋 시퀀스를 다른 베이스 브랜치 위에 재생하여 선형 히스토리를 만드는 동작이다. 이때 git rebase각 커밋 재생 후 셸 명령을 실행하는 --exec 플래그를 인자로 받을 수 있다. Gogs는 병합 시 사용자가 제어하는 브랜치명을 충분한 정제(sanitization) 없이 git rebase 호출에 전달한다. 따라서 공격자가 브랜치명에 --exec 형태의 페이로드를 삽입하면, 병합 과정에서 해당 명령이 서버 호스트에서 실행된다.

연구자 Jonah Burgess(Rapid7): "임의의 인증 사용자가 악성 브랜치명으로 PR을 생성해 'Rebase before merging' 시 --exec 플래그를 git rebase에 주입함으로써 서버에서 RCE를 달성할 수 있다."

영향 플랫폼은 Windows·Linux·macOS 등 지원되는 모든 플랫폼이다.


2. 공격 시나리오 — 무권한 계정에서 서버 장악까지

본 취약점의 위험성은 전제 조건이 거의 없다는 데 있다.

시나리오 전제 공격 경로
① 기본 설정 인스턴스 회원가입·저장소 생성 허용(기본값) 계정 생성 → 저장소 생성(자동 소유자) → 설정에서 rebase 병합 토글 1회 → 익스플로잇 체인 단독 실행
② 쓰기 권한 보유자 rebase 병합이 이미 활성화된 저장소에 write 권한 직접 익스플로잇 실행
③ 저장소 생성 제한 환경 rebase 병합이 켜진 임의 저장소에 write 권한 해당 저장소를 경유해 실행

특히 ①은 *"등록 사용자가 저장소를 만들면 자동으로 소유자가 되고, rebase 병합 활성화는 설정의 토글 하나"*라는 점에서, 타 사용자와의 상호작용 없이 전체 익스플로잇 체인을 단독 운용할 수 있다.

성공 시 공격자는 서버 침해, 인스턴스 내 모든 저장소 접근, 자격증명 덤프, 네트워크 내 타 시스템으로의 이동, 호스팅된 저장소 코드 변조가 가능하다. 무엇보다 동일 공유 서버에 호스팅된 타 사용자의 비공개 저장소를 읽는 교차 테넌트 데이터 침해로 이어진다.


3. 영향 범위와 노출 규모

  • 추정 노출 인스턴스: 인터넷에 직접 노출된 Gogs 인스턴스는 약 1,141대로 추정된다. 다만 대부분의 배포가 VPN·내부망 뒤에 있어 실제 규모는 더 클 것으로 평가된다.
  • 무기화 수준: Rapid7은 Linux·Windows 표적을 대상으로 전체 익스플로잇 체인을 자동화하는 Metasploit 모듈을 공개했다. 모듈은 두 가지 모드를 지원한다 — (a) 공격자 계정에 임시 저장소를 생성·실행·삭제하는 기본 모드, (b) 이미 write·merge 권한을 가진 저장소를 표적으로 하는 모드.
  • 패치 상태: 2026-03-17 메인테이너 보고에도 불구하고 발행 시점 기준 미패치.

4. 포렌식 흔적과 탐지

Rapid7에 따르면 공격 흔적은 모드에 따라 다르다.

  • 자체 저장소 생성·삭제 모드: 서버 로그에 남는 흔적은 사실상 HTTP 500 오류 한 건뿐이다. 사후 분석 시 정상 오류와 구분이 어렵다.
  • 기존 저장소 악용 모드: 추가 아티팩트가 남아 상대적으로 탐지 가능성이 높다.

따라서 탐지 권고는 다음과 같다.

  1. PR 병합 이벤트와 연계된 비정상 HTTP 500 패턴 모니터링
  2. 비정상적 브랜치명(특수문자·--exec 유사 토큰 포함) 생성 이벤트 경보
  3. Gogs 프로세스에서 파생된 예기치 않은 셸·자식 프로세스 행위 탐지
  4. 신규 계정 → 저장소 생성 → rebase 토글 → 병합으로 이어지는 단시간 연쇄 행위 추적

5. 완화 권고 (패치 부재 상황)

근본 패치가 없는 상황에서 Rapid7이 권고한 임시 완화는 다음과 같다.

  1. 회원가입 제한app.ini에서 DISABLE_REGISTRATION = true로 설정해 미신뢰 사용자의 계정 생성을 차단한다.
  2. 저장소 생성 제한app.ini에서 MAX_CREATION_LIMIT = 0으로 설정해 사용자의 자체 저장소 생성을 막는다.
  3. rebase 병합 설정 감사 — rebase 병합이 활성화된 저장소를 전수 점검하고, 불필요한 활성화를 해제한다.
  4. 네트워크 격리 — 인터넷 직접 노출을 제거하고 VPN·내부망·접근통제 뒤로 이동한다.
  5. 대안 검토 — 패치 제공이 불확실한 경우, 유지보수가 활발한 Forgejo·Gitea 등으로의 마이그레이션을 중장기 과제로 검토한다(단, Gitea 계열도 별도 취약점 이력이 있으므로 버전 점검 필수).

6. 한국 관점 — 셀프호스팅 Git의 사각지대

국내 스타트업·연구실·중소 SI 환경에서 Gogs·Gitea류 셀프호스팅 Git은 "가볍고 무료라서" 광범위하게 쓰이지만, 다음 사각지대가 존재한다.

  • 자산 인벤토리 누락 — "내부용 Git"이라는 인식 때문에 보안 자산 목록·취약점 스캔 대상에서 빠지는 경우가 많다.
  • CI/CD 신뢰 연쇄 — Git 서버는 소스코드뿐 아니라 배포 키·웹훅·CI 러너 토큰의 신뢰 기점이다. 서버 장악은 곧 빌드 파이프라인 오염으로 번질 수 있다.
  • 교차 테넌트 위험 — 한 서버에 여러 팀·프로젝트가 공존하는 공용 인스턴스에서, 본 결함은 한 팀이 타 팀의 비공개 코드를 탈취하는 경로가 된다.

권고: 국내 운영 주체는 인터넷 노출 여부와 무관하게 자사 Gogs 인스턴스를 즉시 인벤토리에 포함하고, §5의 완화책을 적용한 뒤 패치 동향을 추적할 것.


7. 결론

본 취약점은 새로운 공격 기법이 아니라, 사용자 입력을 셸 인자에 신뢰한 고전적 실수다. 그러나 (1) 인증 외 전제 조건이 없고, (2) 공개 Metasploit 모듈이 존재하며, (3) 근본 패치가 없다는 삼중 조건이 겹치면서 실전 위험도는 매우 높다.

셀프호스팅 Git은 조직의 가장 민감한 자산 — 소스코드, 자격증명, 배포 파이프라인 — 의 단일 신뢰 지점이다. 이런 시스템을 "내부용이라 괜찮다"는 가정 아래 방치하는 것이 가장 큰 위험이다. 패치가 나올 때까지, 노출 제거와 설정 강화는 선택이 아니라 필수다.


참고 문헌 (References)

[1] Ravie Lakshmanan, "Critical Gogs RCE Vulnerability Lets Any Authenticated User Execute Arbitrary Code", The Hacker News, 2026-05-28. https://thehackernews.com/2026/05/critical-gogs-rce-vulnerability-lets.html

[2] Jonah Burgess, "Authenticated RCE via Argument Injection in Gogs (Unfixed)", Rapid7, 2026-05. https://www.rapid7.com/blog/post/ve-authenticated-rce-via-argument-injection-gogs-unfixed/

[3] Rapid7, "Metasploit module — Gogs git rebase argument injection RCE", GitHub PR #21515. https://github.com/rapid7/metasploit-framework/pull/21515

[4] Atlassian, "Merging vs. Rebasing", Git Tutorials. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

[5] Git Documentation, "git-rebase — --exec option". https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---execltcmdgt


© 2026 Dennis Kim (김호광) · 본 문서는 독립 CTI 아카이브(TLP:GREEN) 공개를 목적으로 작성됐다. 문의: [email protected] · GitHub: gameworkerkim/CYBER-THREAT-INTELLIGENCE-REPORT