CVE-2026-60004: Gitea diffpatch API로 Git Hook 심고 셸 명령 실행하는 RCE 원리

CVE-2026-60004는 Gitea의 diffpatch API로 악성 패치를 전송해 실행 가능한 Git 훅(hook)을 심고, Gitea 서비스 계정 권한으로 임의의 셸 명령을 실행하는 원격 코드 실행(RCE) 취약점입니다. 기본 설정에서 공개 계정 등록을 허용하는 인스턴스라면 인증되지 않은 방문자도 계정 생성과 저장소 확보만으로 공격이 가능해 위험도가 더욱 큽니다.

CVE-2026-60004 핵심 요약 및 영향 범위

이 취약점은 Gitea와 이를 기반으로 한 Forgejo 인스턴스에서 발생하며, 공격자가 저장소 쓰기 권한을 확보하는 순간 시스템 권한 탈취로 이어지는 심각한 결함입니다. CISA의 Known Exploited Vulnerabilities(KEV) 카탈로그에 등재됐고 실제 악용 사례까지 확인된 만큼, 해당 버전을 운영 중인 조직은 지금 당장 조치가 필요합니다.

취약점의 상세 기술 정보는 아래 표와 같습니다.

항목 상세 내용
취약점 식별자 CVE-2026-60004
심각도 (CVSS 3.1) 9.8 (Critical)
취약 버전 Gitea 1.17 이상 1.27.1 미만
수정 버전 Gitea 1.27.1
약점 분류 CWE-94
핵심 영향 Gitea OS 사용자 권한의 임의 셸 명령 실행

diffpatch API RCE 작동 원리: Git Hook 설치 메커니즘

문제의 출발점은 services/repository/files/patch.go 영역의 취약한 처리 과정입니다. 공격자는 Gitea의 diffpatch API 엔드포인트를 악용해 특수하게 조작한 패치를 전송하고, 서버 내 저장소에 실행 가능한 Git 훅을 강제로 설치합니다.

공격은 다음 순서로 진행됩니다.

  1. 충돌 유도: 동일한 패치를 두 번 제출해 add/add 충돌을 인위적으로 만들어 냅니다.
  2. 3-way 폴백 트리거: Git의 3-way 폴백 메커니즘이 작동하면서, 비록 작업이 --cached 옵션으로 수행되더라도 인덱스 경로를 체크아웃하는 동작이 일어납니다.
  3. 훅 설치: 베어 클론(Bare Clone) 환경에서 저장소 루트는 $GIT_DIR이 됩니다. 이 과정에서 hooks/post-index-change라는 이름의 실행 가능 파일이 생성되며, 실제 활성화된 Git 훅으로 설치됩니다.
  4. 명령 실행: Git이 인덱스를 작성하는 과정에서 설치된 post-index-change 훅을 호출하고, 이때 공격자가 심어 둔 임의의 셸 명령이 Gitea 서비스 계정 권한으로 실행됩니다.

공격 전제 조건 및 위험 요소

공격이 성립하려면 다음과 같은 기술적, 환경적 조건이 갖춰져야 합니다.

1. 기술적 요구 사항

  • Git 버전: Git 2.32 이상 버전이 설치돼 있어야 합니다.
  • API 설정: diffpatch 라우트가 활성화돼 있어야 합니다.
  • 파일시스템: 쓰기와 실행이 가능한 임시 파일시스템 환경이 필요합니다.

2. 권한 및 진입 경로

가장 핵심적인 전제 조건은 저장소 쓰기 권한입니다. 권한 확보 경로는 두 가지로 나뉩니다.

  • 기존 사용자: 이미 쓰기 권한을 가진 협력자나 관리자 계정을 탈취한 경우입니다.
  • 무인증 방문자: 인스턴스 기본 설정에서 ‘공개 계정 등록’이 허용돼 있다면 외부 공격자가 직접 계정을 등록하고 저장소를 만들기만 하면 됩니다. 필요한 쓰기 권한이 즉시 확보됩니다.

실제 악용 사례 및 보안 위협 분석

CVE-2026-60004는 이론상으로만 존재하는 취약점이 아닙니다. 실제 환경에서 공격에 쓰이고 있습니다. CISA는 2026년 8월 25일 이 취약점을 KEV 카탈로그에 등재했고, 미국 연방 기관에는 8월 28일까지 패치를 완료하라고 명령했습니다.

실제 보고된 위협 사례는 다음과 같습니다.

  • 악성 페이로드 배포: 일부 인스턴스를 겨냥해 크립토마이닝(Cryptocurrency-miner)과 유사한 성격의 드로퍼를 배포하려는 시도가 확인됐습니다.
  • 자동화 공격: 공개된 Nuclei 템플릿 등을 활용한 자동화 공격이 이어지고 있으며, 사례에 따라 최초 접촉 후 약 3초에서 11초 만에 익스플로잇 체인이 완료될 만큼 공격 속도가 빠릅니다.
  • 2차 피해 가능성: runZero의 분석에 따르면 공격자가 호스트 서버의 완전한 RCE에 성공할 경우 시스템 시크릿과 자격 증명이 노출될 수 있으며, Gitea에 연결된 다운스트림 빌드 파이프라인으로 위험이 번질 가능성이 큽니다.

운영 및 보안 담당자 대응 가이드

이 취약점은 심각도가 CVSS 9.8인 데다 공개된 PoC 스크립트(gitea_diffpatch_rce_poc.py)까지 있어 공격 진입 장벽이 낮습니다. 운영자라면 다음 순서대로 즉시 대응하는 것이 좋습니다.

1. 즉각적인 업데이트

가장 확실한 해결책은 Gitea를 1.27.1 버전 이상으로 즉시 업그레이드하는 것입니다. 이 버전에는 보안 수정 사항이 적용돼 있습니다.

2. 긴급 완화 조치

당장 업데이트하기 어렵다면 다음 설정으로 위험을 일시적으로 낮출 수 있습니다.

  • Git 훅 비활성화: Gitea 설정 파일에서 DISABLE_GIT_HOOKS 옵션을 true로 설정해 훅 기반의 실행을 차단합니다.
  • 가입 설정 변경: 외부인의 무분별한 계정 생성을 막으려면 공개 계정 등록 옵션을 꺼 두세요.

3. 침해 지표(IoC) 점검 및 모니터링

이미 침해됐을 가능성을 염두에 두고 다음 사항을 점검해 보시기 바랍니다.

  • 로그 분석: /api/v1/repos/{owner}/{repo}/diffpatch 엔드포인트에 비정상적인 호출 기록이 남아 있는지 확인합니다.
  • 파일 시스템 점검: 저장소 내 .git/hooks 디렉터리에 post-index-change 같은 무단 실행 파일이 생겨 있는지 살펴봅니다.

댓글 남기기