DEEP DIVE REPORT

CVE-2026-60004: Gitea diffpatch API를 통한 Git Hook 설치형 RCE, 1.27.1에서 수정

SecurityDesk
2026.09.12 조회 2

Gitea에서 원격 코드 실행(RCE) 취약점 CVE-2026-60004가 확인됐다. diffpatch API를 통해 악성 patch를 보내면 저장소에 실행 가능한 Git hook이 설치되고, Git이 인덱스 작성 과정에서 이 hook을 호출하면서 Gitea 서비스 계정으로 임의의 셸 명령이 실행되는 구조다. CISA Known Exploited Vulnerabilities(KEV) 카탈로그 등재로 실제 악용이 확인된 상태이며, 공개 PoC도 존재한다. 이 글은 이 취약점의 영향 범위, 작동 원리, 그리고 운영 환경에서 어떤 순서로 대응해야 하는지를 정리한다.

개요

개요 인포그래픽
CVE-2026-60004 cvelistV5 record에 따르면 Gitea 1.17 이상 1.27.1 미만 버전이 Git hook 설치를 통한 diffpatch API의 RCE에 노출된다. Gitea 보안 공지(GHSA-rcr6-4jqh-j84m)는 저장소에 쓰기 권한만 있으면 Gitea OS 계정으로 임의 셸 명령 실행이 가능하다고 설명하며, 1.27.1에서 PR #38637과 #38638으로 수정됐다는 것이 1.27.1 릴리스 노트에 명시되어 있다.

이 취약점이 일반 취약점과 다른 점은 CISA KEV 카탈로그에 등재되어 있다는 사실이다. KEV 등재는 실제 악용이 확인됐다는 신호로, "아직 일어나지 않은 사고"가 아니라 "일어날 수 있는 사고"로 운영 우선순위를 끌어올려야 한다. 또한 공개 PoC가 제공되어 있어 악용 가능성은 실존 수준이며, 기본 공개 등록(open registration)이 켜진 인스턴스라면 공격자가 인증 없이도 악용 전제 조건을 충족할 수 있다. 이 조건이 성립하는 환경은 긴급 대응 대상이다.

영향 범위

  • 대상 버전: CPE 기준 gitea:gitea의 1.17부터 1.27.1 미만 (versionStartIncluding 1.17, versionEndExcluding 1.27.1). 1.27.1에서 수정됨.
  • 고위험 환경: 기본 공개 계정 등록이 허용된 인스턴스. 인증되지 않은 방문자도 계정 등록과 저장소 생성만으로 필요한 저장소 쓰기 권한을 확보할 수 있다.
  • 침해 성공 시 영향: runZero 분석에 따르면 공격자는 Gitea 프로세스 권한으로 호스트 서버에 대한 완전한 RCE를 달성할 수 있으며, 시스템 시크릿과 자격 증명 노출 및 Gitea에 연결된 다운스트림 빌드 파이프라인으로의 위험 전이까지 우려된다.

기술적 분석

공격 체인은 다음과 같이 이어진다. 저장소 쓰기 권한을 가진 공격자가 diffpatch API 엔드포인트에 악성 patch를 전송하면, 취약한 처리 구간인 services/repository/files/patch.go 영역에서 patch 적용 과정에 실행 가능한 Git hook이 저장소에 설치된다. Git은 인덱스(index)를 작성하는 과정에서 해당 hook을 자동으로 호출하고, 이로 인해 저장소에서 제어하는 내용으로 Gitea 서비스(운영체제) 계정에 대해 임의의 셸 명령이 실행된다. CISA KEV 기록 역시 "쓰기 권한이 있는 공격자가 diffpatch API에 악성 patch를 보내 실행 가능한 Git hook을 심고 Gitea 서비스 계정으로 셸 명령을 실행한다"는 같은 흐름을 기술한다.

핵심 전제 조건은 저장소 쓰기 권한이다. 이 조건이 충족되는 경로는 환경에 따라 두 갈래다. 기본 공개 등록이 허용된 환경에서는 계정 등록과 저장소 생성만으로 충족되므로, 공격 진입 장벽이 사실상 없다. 반면 공개 등록이 제한된 환경에서는 기존 계정의 권한이 남용되거나, 과도하게 넓은 저장소 쓰기 권한이 악용되는 경로가 필요하다. 어느 쪽이든, Gitea 인스턴스에 쓰기 권한을 부여한 계정·조직 전체가 잠재적 공격 표면으로 간주해야 한다는 운영적 의미가 있다.

공개 PoC·익스플로잇 분석

보안 공지(GHSA-rcr6-4jqh-j84m)에는 gitea_diffpatch_rce_poc.py가 함께 제공된다. 이 PoC의 전제 조건과 입증 범위를 정리하면 다음과 같다.

  • 출처: Gitea 공식 보안 공지에서 함께 공개된 스크립트.
  • 전제 조건: 기존 Gitea 계정 보유, 해당 계정이 저장소를 생성할 수 있는 테스트 인스턴스 대상.
  • 입증 범위: 테스트 인스턴스 대상으로 안내되어 있다. 프로덕션 환경에서의 실제 침해 성공 여부는 현재 근거 범위에서 확인되지 않는다.
  • 운영상 의미: PoC가 "테스트용"이라는 사실만으로 위험이 낮아지지는 않는다. 악용 체인(저장소 생성 → patch 전송 → hook 실행)이 공개되어 재현 가능하다는 의미이며, KEV 등재와 함께 보면 악용이 실제로 진행됐을 가능성이 있다. 따라서 PoC가 존재한다는 점은 "조심할 대상"에서 "이미 대응해야 할 대상"으로 기준을 올려야 한다는 조건부 판단을 뒷받침한다.

확인이 필요한 한계

  • 공식 CVSS 점수와 Gitea 벤더 심각도 등급은 현재 근거에 포함되어 있지 않아, 수치 기준으로 우선순위를 분리해 제시하지 못한다. 이 값이 공개되면 우선순위 서술의 정확도를 높일 수 있다.
  • KEV 등재 사실은 확인되나, 공격 주체와 실제 침해 범위는 자료에 없어 확정적 사실로 서술할 수 없다.
  • PoC는 테스트 인스턴스 대상이므로, 프로덕션 환경에서의 실제 침해 성공 여부는 이 근거 범위에서는 확인 불가하다.
  • 1.27.1 이후 버전의 무결성(다른 취약점 존재 여부)는 이 취약점의 분석 범위 밖이다.

대응 방안

즉시 조치

점검 시에는 두 가지를 먼저 확인하면 된다. 첫 번째는 운영 중인 Gitea 버전이 1.17 이상 1.27.1 미만인지 여부, 두 번째는 공개 계정 등록이 허용되어 있는지 여부다. 버전이 해당 범위에 들고 공개 등록이 켜져 있다면, 공격자가 별도 인증 없이 쓰기 권한을 확보할 수 있어 사실상 공개 RCE 경로로 해석할 수 있다. 반대로 공개 등록이 닫혀 있다면 전제 조건이 저장소 쓰기 권한으로 축소되므로, 해당 권한이 실제로 누구에게 있는지(계정, 저장소 권한 설정) 점검하는 것으로 시작점을 좁힐 수 있다. 이 둘의 조합에 따라 긴급도 판단이 달라진다.

  • 패치가 가능한 인스턴스는 즉시 1.27.1로 업그레이드한다. 1.27.1 릴리스 노트에 따르면 이 취약점은 1.27.1에서 수정됐다.

참고자료

함께 읽으면 좋은 글

본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9