위협 피드

CVE-2026-60004 — Gitea에서 코드 주입으로 서버 명령 실행이 가능해지는 취약점

CVE-2026-60004는 Gitea의 diffpatch 엔드포인트에 있는 코드 주입(CWE-94, CVSS 9.8, KEV)으로, 1.27.1에서 수정되었습니다. 공개 가입이 쓰기 권한 조건을 충족시키는 이유.

게시 2026-09-05 업데이트 2026-10-04 최종 확인 2026-09-05 6분 읽기
이 페이지에서

악용이 확인된(CISA KEV 등재) 취약점에 대한 브리핑입니다. 무슨 일이 일어나는지, 무엇이 영향을 받는지, 무엇을 해야 하는지를 방어자의 관점에서 정리했으며, 재현 절차는 포함하지 않습니다.

보안 권고 요약
CVE
CVE-2026-60004
심각도
치명적 (CVSS 9.8, v3.1; NVD에 기록된 점수는 CVE 번호 부여 기관이 제시한 것입니다)
분류
코드 주입 (CWE-94)
영향
악성 Git 훅이 설치됨 → Gitea OS 사용자 권한으로 명령 실행
영향 버전
벤더 권고 기준 Gitea 1.17 – 1.27.0. 1.27.1에서 수정
악용
CISA KEV 등재(2026년 8월 25일 추가, 기한 8월 28일). 랜섬웨어 캠페인 사용 여부는 "Unknown"으로 기록됨
가능성
EPSS 0.868 (2026-09-05 기준 당사 피드), 최상위 등급
9.8
CVSS v3.1
1.27.1
패치된 릴리스
0.868
EPSS (악용 추정)
KEV
실제 공격에서 악용됨

"권한 필요"를 안심 요소로 읽지 마십시오

해석 A (CISA의 설명)

"저장소 쓰기 권한을 가진 공격자" — 조건부로 들림

해석 B (CVSS 벡터)

PR:N — 권한 필요 없음

↓ 벤더 권고가 두 해석을 모두 설명합니다

공개 가입이 켜져 있을 때

가입 → 저장소 생성 → 공격에 필요한 쓰기 권한을 스스로 부여

필요한 권한을 회원 가입으로 얻을 수 있다면, 권한 요구 조건은 공격자에게 계정 생성이라는 한 단계를 추가할 뿐입니다.

"그래도 권한 X가 필요하다"는 점에서 안심하는 것은 취약점을 잘못 판단하는 흔한 방식입니다. 중요한 질문은 누가 그 권한을 갖고 있는가가 아니라 그 권한을 외부에서 얻을 수 있는가입니다. 공개 가입, 초대 없는 회원 가입, 기본으로 부여되는 권한은 획득 경로가 있는 권한이므로, 실질적인 조건이라고 볼 수 없습니다.

이는 흔한 보안 실수는 가정의 실패의 항목 ②와 같은 문제입니다. 또한 설정 파일이 아니라 HTTP를 통해 가입 경로를 직접 확인하십시오 (인증과 권한 부여의 차이).

결함의 내용

벤더 보안 권고 기준
경로
diffpatch 엔드포인트가 공유 임시 클론에서 패치 적용을 잘못 처리함
결과
악성 Git 훅(hooks/post-index-change)이 설치될 수 있음
실행 조건
Git이 인덱스를 기록할 때 훅이 Gitea OS 사용자 권한으로 실행됨
접근 가능 항목
애플리케이션 시크릿, 데이터베이스 자격 증명, OAuth 토큰, 마운트된 저장소
전제 조건
벤더는 악용에 Git 2.32 이상, diffpatch 경로 활성화, 쓰기 및 실행이 가능한 임시 파일 시스템이 필요하다고 설명함

업데이트 후에도 심어진 Git 훅은 남아 있으므로, 업데이트가 끝이 아닙니다

이 취약점은 서버에 실행 가능한 무언가를 남깁니다. 업데이트는 그것을 설치하는 경로를 막지만, 이미 설치된 것을 제거하지는 않습니다.

Git 훅은 정상적인 원격 실행 지점으로 설계되어 있어, 일단 존재하면 의심스럽게 보이지 않습니다. 정상적인 유지보수와 백도어를 구분하는 것은 누가, 누구의 허가로 만들었는지, 그리고 기록에 남아 있는지뿐입니다. 결함을 수정한 뒤에는 공격자가 남겼을 수 있는 것을 반드시 확인하십시오. 이 단계를 건너뛰지 마십시오.

해야 할 일

1

1.27.1 이상으로 업데이트 (가장 중요한 조치)

벤더 권고는 영향 범위를 1.17 – 1.27.0으로, 수정 버전을 1.27.1로 제시합니다. 여기서 시작하십시오. 자체 호스팅 인스턴스는 누군가 대신 업데이트해 주지 않습니다. 먼저 CVE 대응 플레이북에 따라 실행 중인 버전을 확인하십시오.

2

가입 설정을 실제로 확인

앞서 설명한 것처럼, 공개 가입이 켜져 있으면 권한 조건이 사실상 사라집니다. 설정 값만 읽지 말고 로그아웃한 상태에서 가입 페이지를 열어 실제로 어떻게 동작하는지 보십시오. 내부 인스턴스라면 가입을 닫고, 인증에만 의존하지 말고 네트워크 계층에서도 접근을 제한하십시오.

3

인식하지 못하는 훅과 파일 찾기

업데이트 후 저장소 훅 디렉터리에서 직접 넣지 않은 스크립트, 예상하지 못한 실행 파일, Gitea 프로세스에서 나가는 낯선 트래픽이 있는지 확인하십시오. 질문은 "업데이트했는가"가 아니라 **"무엇이 남아 있는가"**입니다.

4

침해가 의심되면 접근 가능한 항목을 노출된 것으로 간주

벤더가 접근 가능하다고 밝힌 항목은 애플리케이션 시크릿, 데이터베이스 자격 증명, OAuth 토큰입니다. 점검으로 결론을 내릴 수 없다면 "모르겠다"는 "아무 일도 없었다"가 아닙니다. 이들을 교체하십시오. 키 관리는 .env와 API 키의 위험성에서 다룹니다.

5

선택 자체를 다시 검토 (서두르지 않아도 됨)

직접 운영하면 업데이트도 직접 해야 하는 책임이 따릅니다. 장단점은 자체 호스팅 Git과 GitHub, 어느 쪽이 더 안전한가에서 확인할 수 있습니다. 이것은 이전을 권하는 논거가 아닙니다. 업데이트를 지속적으로 적용할 수 있는지를 기준으로 결정하라는 논거입니다.

이 사이트의 견해: CVSS와 KEV는 서로 다른 것을 측정하므로 둘 다 읽어야 합니다

이 사례는 CVSS, EPSS, KEV를 이용한 CVE 분류에서 다룬 내용을 보여주는 실제 사례가 되었습니다. CVSS는 기술적으로 얼마나 심각한지, CISA 등재는 현장에서 어떻게 쓰이고 있는지, EPSS는 악용 가능성을 추정한다는 점에서 세 가지는 서로 다른 측정값입니다.

여기서 CVSS의 PR:N과 CISA의 "쓰기 권한 필요"는 모순처럼 보였습니다. 둘 중 하나만 읽었다면 "권한이 필요하니 나중에 해도 된다"고 결론 내렸을 수 있습니다. 불일치는 대개 데이터의 오류가 아니라 어떤 전제를 놓쳤다는 신호입니다. 이 경우 답은 벤더 보안 권고에 있었습니다(공개 가입).

1차 출처

  • Gitea 보안 권고 GHSA-rcr6-4jqh-j84m — github.com (영향 1.17–1.27.0 / 1.27.1에서 수정 / 권한 조건과 공개 가입과의 관계 / 접근 가능 항목 / 전제 조건)
  • NIST NVD, "CVE-2026-60004" — nvd.nist.gov (CVSS v3.1 9.8, 벡터, CWE-94; 상태 Analyzed)
  • CISA Known Exploited Vulnerabilities Catalog — cisa.gov (2026년 8월 25일 추가, 기한 8월 28일, 랜섬웨어 캠페인 사용 "Unknown")
  • Gitea, "Release of 1.27.1" — blog.gitea.com

모두 2026년 9월 5일에 확인했습니다. 이 사이트에는 재현 절차와 개념 증명(PoC) 코드 링크를 게시하지 않습니다.

다음으로 읽을 글

FAQ

QCVE-2026-60004에서는 무슨 일이 일어납니까?
A

벤더의 보안 권고에 따르면 diffpatch 엔드포인트가 패치 적용을 잘못 처리하여 악성 Git 훅(hooks/post-index-change)이 설치될 수 있습니다. 이 훅은 Git이 인덱스를 기록할 때 Gitea OS 사용자 권한으로 실행됩니다. 벤더는 접근 가능해지는 항목으로 애플리케이션 시크릿, 데이터베이스 자격 증명, OAuth 토큰, 마운트된 저장소를 들고 있습니다.

Q인증이 필요합니까? CVSS는 권한이 필요 없다고 하고, CISA는 저장소 쓰기 권한이 필요하다고 합니다.
A

두 설명은 모두 맞으며 서로 충돌하지 않습니다. 벤더 권고는 저장소 쓰기 권한이 필요하다고 밝힌 뒤, 공개 가입이 활성화된 경우 인증되지 않은 사용자가 계정을 등록하고 저장소를 만들어 그 권한을 얻을 수 있다고 설명합니다. 즉, 필요한 권한을 누구나 얻을 수 있다면 사실상 요구 조건이 아니며, CVSS 벡터도 이를 반영하고 있습니다.

Q어떤 버전이 영향을 받으며, 어떻게 수정합니까?
A

벤더 권고는 영향 범위를 1.17부터 1.27.0까지로, 패치된 릴리스를 1.27.1로 제시합니다. 수정 방법은 1.27.1 이상으로 업데이트하는 것입니다. 자체 호스팅 Gitea는 스스로 업데이트하지 않으므로, 방치된 기간만큼 노출 상태도 길어집니다.

Q업데이트하면 모든 것이 끝납니까?
A

업데이트는 가장 중요한 조치이지만 작업의 전부는 아닙니다. 이 취약점이 남기는 것은 서버에 남은 실행 가능한 아티팩트, 즉 Git 훅입니다. 업데이트는 훅을 설치하는 경로를 막을 뿐, 이미 설치된 것을 제거하지는 않습니다. 업데이트 후에는 인식하지 못하는 훅이나 파일이 있는지 확인하고, 등록 설정이 의도한 대로인지 점검하십시오. 침해가 의심된다면 벤더가 접근 가능하다고 밝힌 시크릿, 데이터베이스 자격 증명, OAuth 토큰을 노출된 것으로 보고 교체하십시오.