
더팩트
공효진, 15년만 MBC 컴백...영원한 '공블리' [TF사진관]

위키트리
자체 호스팅 깃(Git) 플랫폼 Gitea가 저장소 쓰기 권한만 있으면 서버 셸을 장악당할 수 있는 치명적 원격코드실행(RCE) 결함을 패치했다. 일반 저장소 쓰기 권한을 가진 사용자가 조작된 패치를 두 차례 제출하는 방식으로 깃 훅(Git hook)을 심어 Gitea 서비스 계정 권한으로 셸 명령을 실행할 수 있는 구조다. CVE-2026-60004로 등록된 이 결함은 CVSS 점수 9.8을 받았다. Gitea 1.17 버전부터 1.27.1 이전 모든 버전이 영향을 받으며 1.27.1에서 수정됐다. 문제는 Gitea가 기본값으로 회원가입을 열어두고 있어, 기존 계정이 없는 외부인도 별도 절차 없이 취약점을 악용할 조건을 스스로 만들 수 있다는 점이다.
취약점은 POST /api/v1/repos/{owner}/{repo}/diffpatch 엔드포인트에 있다. 이 API는 사용자가 제출한 패치를 공유 베어(bare) 임시 클론 안에서 적용하는 기능을 한다. 문제가 된 버전은 이 과정에서 git apply 명령을 --index, --recount, --cached, --binary 옵션과 함께 호출한다. 서버의 깃 버전이 2.32 이상이면 여기에 3자 병합(three-way merge) 폴백 옵션인 -3까지 추가된다.
공격자는 동일한 패치를 두 차례 제출해 add/add 충돌을 인위적으로 발생시킨다. 이때 3자 병합 폴백이 작동하면서, --cached 옵션을 썼음에도 인덱스에 올라간 경로가 실제로 체크아웃되는 오류가 생긴다. 임시 클론이 베어 저장소이기 때문에 그 루트 디렉터리는 곧 $GIT_DIR, 즉 깃의 내부 관리 디렉터리와 같다. 결국 hooks/post-index-change 경로에 실행 파일이 놓이면 이 파일이 실제 깃 훅으로 활성화된다. 깃이 인덱스를 갱신하는 과정에서 이 훅을 그대로 실행하면서 공격자가 넣은 명령이 서버에서 돌아가게 된다.
보안 연구자 샤이 로드(Shai Rod, 활동명 NightRang3r)가 이 결함을 보고했으며, Gitea는 보안 권고에서 그를 신고자로 명시했다. 공개된 개념증명(PoC) 코드는 정상 계정으로 로그인해 비공개 저장소를 만든 뒤 악성 패치를 두 차례 보내는 방식으로 동작한다. 별도의 외부 콜백 연결이 필요 없다는 점이 특징이다. 훅이 실행된 명령의 결과를 깃 오브젝트에 저장하고 이를 담은 브랜치를 생성하기 때문에, 공격자는 인증된 스마트 HTTP(Smart HTTP)로 저장소를 내려받기만 해도 실행 결과를 그대로 확인할 수 있다.
침해가 성공하면 공격자는 Gitea 서비스를 구동하는 운영체제 계정 권한을 그대로 얻는다. Gitea는 격리 방식에 따라 애플리케이션·환경변수 비밀값, 마운트된 저장소, 데이터베이스 자격증명과 데이터, OAuth 자격증명, 접근 가능한 내부 서비스까지 노출될 수 있다고 설명했다. 사이버시큐리티뉴스(CyberSecurityNews)는 해당 결함이 CWE-94(코드 생성 오용, 흔히 코드 인젝션으로 불림)로 분류된다고 전하며 app.ini 설정 파일과 통합 자격증명 등도 유출 대상에 포함될 수 있다고 보도했다. 다만 The Hacker News에 따르면 Gitea의 7월 28일(현지시각) 보안 권고는 실제 공격에 악용된 사례가 있는지는 밝히지 않았다.
이번 결함이 특히 위험한 이유는 Gitea 자체의 기본 설정 때문이다. 취약한 API 호출은 reqToken() 검증을 거쳐 로그인한 사용자만 접근할 수 있도록 돼 있다. 그러나 Gitea는 기본값으로 회원가입을 열어두고, 이메일 인증이나 관리자 승인을 요구하지 않는다. 신규 가입자를 제한 계정으로 분류하지도 않고 저장소 생성 개수에도 기본 제한을 두지 않는다. 이 때문에 설정을 손대지 않은 인스턴스라면 외부인이 계정과 저장소를 새로 만들어 곧바로 취약점을 악용할 수 있다.
The Hacker News는 회원가입을 막으면 외부인이 새로 계정을 만들어 접근하는 경로는 차단할 수 있지만, 결함 자체가 고쳐지는 것은 아니며 이미 저장소 쓰기 권한을 가진 기존 사용자로부터는 보호되지 않는다고 짚었다. 공격이 성립하려면 저장소 쓰기 권한, 깃 2.32 이상, diffpatch 라우트 활성화, 쓰기와 실행이 가능한 임시 파일시스템이라는 조건이 모두 맞아야 한다. 하지만 기본 회원가입 정책만으로 첫 번째 조건인 쓰기 권한 확보는 사실상 누구나 가능하다는 점이 문제로 지적됐다.
Gitea는 임시 클론 방식을 베어에서 비베어(non-bare)로 바꾸는 방식으로 결함을 고쳤다. 수정된 코드의 주석에는 --index 옵션을 쓰는 깃 명령이 작업 트리(working tree)에 영향을 줄 수 있다는 경고가 명시됐다. 이 수정은 7월 26일(현지시각) 병합·백포트됐고, 1.27.1 버전은 7월 27일(현지시각) 배포됐다. Gitea는 같은 날 클라우드 인스턴스는 자동으로 업그레이드된다고 밝혔다. 보안 권고는 하루 뒤인 7월 28일(현지시각) 공개됐다.
눈에 띄는 점은 이 수정 내역이 릴리스 노트에서 “refactor: git patch apply”라는 이름으로 기타(MISC) 항목에 분류돼 있었다는 사실이다. 보안(SECURITY) 항목이 아니어서 일반 사용자가 변경 내역만 보고는 보안 패치임을 알아차리기 어려웠던 셈이다. The Hacker News는 7월 29일(현지시각) 기준으로 이번 결함이 1.27.1 출시 전후 실제로 악용됐는지를 확인해 준 1차 소스는 없다고 전했다. 사이버시큐리티뉴스는 관리자들에게 즉시 1.27.1로 업그레이드하고, 패치 전까지는 diffpatch 기능 접근을 제한하거나 비활성화하고 공개 회원가입을 끄는 한편 저장소 쓰기 권한과 서비스 계정 권한을 다시 점검하며 관련 로그를 모니터링하라고 권고했다.

관심 없음
{카테고리}에 관심 없음