COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
Rapid7이 발견한 Gogs RCE 제로데이(CVSS 9.4)는 인증된 사용자가 브랜치명 하나로 서버를 장악할 수 있으며, 보고 70일이 지나도 패치가 없습니다. 아시아 1,894대 포함 2,400대 이상 노출 중입니다.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2026년 3월 17일, Rapid7 수석 연구원 Jonah Burgess는 자체 호스팅 Git 서비스 Gogs에서 인증된 사용자라면 누구든 서버를 완전히 장악할 수 있는 제로데이를 발견했다. 유지관리자는 열흘 뒤 수신을 확인했지만, 그것이 마지막이었다. 이후 수차례 후속 연락을 보내도 응답이 없었고, 보고 70일이 지난 2026년 5월 28일 Rapid7은 패치 없는 상태로 취약점을 공개했다. CVSSv4 기준 9.4점. Metasploit 자동화 모듈과 함께.
Gogs는 Go로 작성된 경량 오픈소스 Git 서비스다. 47,500개의 GitHub 스타를 보유한 이 도구의 핵심 강점은 단순함이다. 별도 데이터베이스 없이도 동작하고, 라즈베리 파이처럼 저사양 서버에서도 구동된다. 데이터를 외부 클라우드에 맡기지 않으려는 금융, 공공, 방산 분야가 주요 사용자다.
그 가벼움의 이면에 문제가 있다. Shadowserver 집계 기준 인터넷에 노출된 Gogs 서버는 2,400대를 넘으며, 이 중 약 1,894대가 아시아에 집중돼 있다. 아시아 집중 비율이 전체의 약 79%에 이른다는 수치는 이 지역 조직의 자체 호스팅 선호와 맞닿아 있다.
이번 제로데이의 핵심은 "Rebase before merging" 기능에 있다. Gogs 소스코드의 internal/database/pull.go에 위치한 Merge() 함수가 원인이다. 이 함수는 pull request의 베이스 브랜치명을 git rebase 명령에 그대로 전달한다. 입력값 검증이 없고, POSIX 표준의 -- 구분자도 없다.
공격자가 해야 할 일은 단순하다. --exec=touch${IFS}/tmp/rce_proof 같은 브랜치명을 만들고 pull request를 생성한다. 관리자가 해당 PR에서 "Rebase before merging" 옵션으로 병합을 승인하는 순간, Git은 --exec를 브랜치명이 아닌 플래그로 해석한다. 이후 Git이 커밋을 하나씩 재연하면서 공격자가 지정한 명령을 서버 프로세스 권한으로 반복 실행한다. CWE-88 분류의 아규먼트 인젝션(Argument Injection)이다.
전제 조건이 거의 없다는 점이 이 취약점을 특히 위험하게 만든다. Gogs는 기본값으로 오픈 회원가입을 허용한다(DISABLE_REGISTRATION = false). 리포지토리 생성 수량 제한도 없다(MAX_CREATION_LIMIT = -1). 공격자는 인터넷에 노출된 Gogs 서버에 계정을 만들고, 리포지토리를 생성하고, 악성 브랜치명이 포함된 pull request를 여는 것만으로 공격을 준비한다. 관리자 권한도, 기존 리포지토리 접근 권한도 필요 없다.
Rapid7은 취약점 공개와 함께 Metasploit 모듈(exploit/multi/http/gogs_git_hooks_rce)을 배포했다. Linux와 Windows 대상 모두를 지원하는 이 모듈은, Rapid7이 직접 밝혔듯 "초 단위로 자동화 가능한(trivial and automatable in seconds)" 공격을 가능하게 한다.
| 항목 | 내용 |
|---|---|
| CVSS | 9.4 Critical (CVSSv4) |
| CVE | 미할당 |
| 패치 | 없음 (최신 버전 0.14.2 포함) |
| 공격 조건 | 기본 설정 서버의 인증 계정 1개 |
| Metasploit | 공개됨 (자동화 공격 가능) |
CVE 번호가 없다는 사실은 단순한 행정적 누락이 아니다. 대부분의 조직이 쓰는 취약점 관리(VM) 솔루션은 CVE를 기준으로 스캔한다. CVE 없는 취약점은 자동화된 레이더에서 완전히 벗어난다. Gogs를 운영하는 조직이 이 취약점을 인지하려면 보안 블로그나 Rapid7 권고문을 직접 추적해야 한다.
이번이 Gogs의 첫 번째 미패치 사태가 아니다. 2026년 5월 공개된 이 제로데이보다 앞서, SonarSource는 2024년에 Gogs에서 4개의 아규먼트 인젝션 계열 취약점(, , , )을 발견했다. 이 취약점들 역시 2026년 현재까지 패치되지 않은 상태다. 동일한 공격 원리가 2년 넘게 방치된 채로 누적되고 있는 것이다. Gogs의 GitHub 리포지토리에는 현재 929개의 미해결 이슈와 58개의 미처리 pull request가 쌓여 있다.
SonarSource는 동일한 공격 벡터를 Gitea에서 검토했을 때 이미 패치가 완료된 것을 확인했다. Gitea는 Gogs에서 포크된 프로젝트로, 500명 이상의 기여자가 적극적으로 유지관리하고 있다.
성공적인 RCE는 서버 하나의 문제가 아니다. Gogs 서버 프로세스 권한으로 실행되는 공격자는 해당 인스턴스의 모든 리포지토리에 접근할 수 있다. 비공개 리포지토리, 다른 팀의 코드, 그리고 코드베이스에 저장된 API 토큰과 SSH 키가 한꺼번에 노출된다.
2FA 시크릿까지 Gogs 데이터베이스에 저장돼 있다면 계정 탈취에도 쓰인다. 더 나아가 CI/CD 파이프라인과 연동된 Git 서버라면, 공격자는 탈취한 SSH 키와 API 토큰으로 배포 파이프라인에 접근해 빌드 단계에 악성코드를 삽입할 수 있다. 클라우드 자격증명, 쿠버네티스 설정, 배포 스크립트가 그 경로에 놓여 있다.
아시아 집중 노출 데이터는 국내 환경과 무관하지 않다. 국내에서도 데이터 주권 요건이나 비용 절감을 이유로 Gogs를 자체 호스팅하는 조직이 존재한다. 공급망 침해 경로가 본문에서 설명한 것과 동일하게 적용된다. CVE가 없어 자동 탐지가 불가능하고, 공개된 Metasploit 모듈로 대규모 자동 스캔이 가능한 상황에서 Gogs 인스턴스는 파악되지 않은 내부망의 공격 진입점이 될 수 있다. Rapid7이 70일간 응답을 기다린 사이, 패치는 아직 존재하지 않는다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.