> ## Content Index
> Fetch the complete content index at: https://linuxroom.net/llms.txt
> Use this file to discover other available public pages before exploring further.

# Forgejo 16.0.4 및 15.0.8 버전에서 저장소 템플릿 취약점 수정
- URL: https://linuxroom.net/forgejo-critical-security-fix-1604-1508/
- Published: 2026-09-11T01:57:00.000Z
- Updated: 2026-09-11T01:57:00.000Z
- Author: 0xCD
- Tags: News

Forgejo가 `16.0.4`와 `15.0.8` 버전을 출시하면서 저장소 템플릿 기능에 숨어 있던 치명적인 보안 문제를 수정했습니다.

 문제가 되는 환경에서는 악의적으로 만들어진 템플릿 저장소가 Forgejo 서버의 파일을 읽거나 서버에서 임의의 프로세스를 실행하는 원격 코드 실행으로 이어질 수 있었습니다. Forgejo를 직접 구축(Self-Hosted) 해서 운영한다면 반드시 업데이트 해야 합니다.

## 저장소 템플릿이 공격 지점이 된 이유

![Forgejo 저장소 템플릿 취약점](https://linuxroom.net/content/images/2026/09/image-43.png)

Forgejo 저장소 템플릿 취약점

 Forgejo의 저장소 템플릿은 이미 준비된 파일과 설정을 바탕으로 새 저장소를 빠르게 만드는 기능입니다. 유저는 템플릿을 복사한 뒤 새 프로젝트에 맞게 이름이나 설명 같은 내용을 바꿀 수 있습니다.

 여러 팀이 같은 기본 구조로 저장소를 시작할 때 유용하지만, 서버가 외부에서 가져온 파일을 처리하고 새 Git 저장소로 초기화한다는 점에서 일반적인 파일 복사보다 복잡한 경로를 거칩니다.

 이번에 발견된 취약점은 바로 그 처리 순서에서 발생했습니다. Forgejo는 템플릿 저장소를 복제한 뒤 기존 `.git` 디렉터리를 제거하고, `.forgejo/template`에 지정된 파일을 대상으로 변수 확장을 수행합니다. 

 변수 확장은 파일 안의 치환 대상 값을 새 저장소의 이름이나 설명에 맞게 바꾸는 단계입니다. 문제는 이 과정에서 파일 내용이 새 `.git`디렉터리를 만들어 내도록 악용될 수 있었다는 데 있습니다.

## 삭제된 디렉터리가 다시 살아난 과정

![Git 저장소의 생성 과정의 보안 취약점 공격](https://linuxroom.net/content/images/2026/09/image-44.png)

Git 저장소의 생성 과정의 보안 취약점 공격

 Git은 작업 디렉터리 안의 `.git`을 해당 위치의 저장소 메타데이터로 인식합니다. 메타데이터에는 커밋과 브랜치, 원격 저장소 정보가 기록되므로 새 저장소를 초기화할 때 예상하지 못한 `.git`이 남아 있으면 처리 대상과 권한 경계가 달라질 수 있습니다. 

 Forgejo는 처음에 템플릿의 `.git`을 지웠지만, 변수 확장이 끝나기 전에 공격자가 새로운 `.git`디렉터리를 만들어 두면 이 방어를 우회할 수 있었습니다.

 그 상태에서 새 Git 저장소 초기화가 진행되면, 악성 템플릿이 심어 둔 디렉터리를 Git이 채택할 수 있습니다. 

 결과적으로 서버가 의도하지 않은 경로를 읽고 명령을 실행할 수 있는 조건이 만들어집니다. 공격자가 저장소 생성 권한이나 템플릿 등록과 관련된 접근권을 확보했을 때 특히 위험한 유형이죠. 단순히 웹 화면에 이상한 파일을 올리는 문제와 달리, 서버 프로세스가 파일을 해석하는 절차 자체가 해커의 공격이 됩니다.

## 이번 수정은 어디에서 막았나

![Forgejo 취약점 수정](https://linuxroom.net/content/images/2026/09/image-45.png)

Forgejo 취약점 수정

 Forgejo는 변수 확장이 모두 끝난 다음 작업 디렉터리 안에 존재하는 .git 폴더를 다시 제거하도록 수정했습니다. 즉, 처음 복제 직후 한 번만 정리하는 방식에서 벗어나, 공격자가 중간 단계에서 만든 디렉터리까지 확인한 뒤 Git 저장소를 초기화합니다. 이 순서 변경은 템플릿 파일의 정상적인 변수 치환 기능은 유지하면서, 초기화 시점에 남아 있는 Git 메타데이터를 신뢰하지 않도록 하는 조치입니다.

 수정 버전은 `16.0.4`와 `15.0.8`입니다. 두 버전은 서로 다른 유지보수 계열을 사용하는 운영자를 위해 제공됩니다. 따라서 구형 계열을 사용한다는 이유로 다음 큰 버전까지 기다릴 필요는 없습니다. 현재 설치된 계열에 맞는 최신 보안 수정판으로 올리는 것이 현실적인 대응입니다.

[원문 뉴스 : LWN.net](https://lwn.net/Articles/1093671/?ref=linuxroom.net)

### 🐧 Linuxroom의 생각 :

 Forgejo(포지오)는 직접 서버에 설치해서 사용하는 오픈소스 Git 호스팅 소프트웨어입니다. 쉽게 말해 GitHub나 GitLab같은 서비스를 내 서버에 직접 구축 가능하게 해주는 프로젝트죠. 

![Forgejo 공식 홈페이지에 게시된 이미지 (출처 : Forgejo)](https://linuxroom.net/content/images/2026/09/image-46.png)

Forgejo 공식 홈페이지에 게시된 이미지 (출처 : Forgejo)

 Forgejo는 에스페란토어로 '대장간'을 뜻하는 단어에서 유래한 이름입니다. 기존의 오픈소스 프로젝트였던 Gitea(기티)에서 갈라져 나온(Fork) 프로젝트예요.

 이 프로젝트에서 무슨일이 일어났었냐면, 보통 문서를 작성할때, 템플릿을 만들어 두고 가져다 쓰는 경우가 많은데요. Forgejo에서도 `저장소 템플릿` 이라는 편리한 기능이 존재합니다.

 쉽게 말하면, 붕어빵 틀처럼 새 프로젝트를 만들 때 미리 준비된 틀을 복사해 와서 프로젝트의 이름이나 설명만 자동으로 딱 맞게 바꿔주는 기능이죠.

 이번 취약점은 서버가 템플릿을 복사해서 새 틀로 만드는 작업 순서의 빈틈을 노렸습니다. 원래대로라면, 서버가 템플릿을 가져오고 기존 정보(.git 폴더)를 삭제하고 글자(프로젝트 이름이나 설명등)를 바꾸면 새 프로젝트가 완성되는 형태였는데요.

 공격자는 글자를 바꾸는 단 사이에 몰래 가짜 정보 (.git 폴더)를 새로 만들어 넣도록 템플릿을 교묘하게 조작하는 방식으로 공격을 시도합니다. 

 결과적으로, 서버는 공격자가 만들어 둔 가짜 정보 폴더를 진짜 정보 폴더인줄 알고 읽어버려, 이를 통해 서버 안의 파일을 몰래 읽거나 서버에 악성 코드 등을 실행할 수 있게 된 것이죠.

 이번 버전 업데이트의 취약점 해결 방법은 간단히 말하면

> 작업을 다 끝내고 마지막에 한번 더 확인해서 싹 지우자. 

 라는 형태로 작업 순서를 바꾸어서, 글자 바꾸기 작업이 전부 끝난 뒤에, 공격자가 중간에 몰래 만들어 둔 가짜 .git 폴더까지 최종 단계에서 한번 더 지워버린 후에 새 프로젝트를 제작하도록 변경했습니다.

 만약에 Forgejo 서버를 직접 운영중이시라면, 지금 바로 최신 업데이트를 적용하시고, 보안 사고를 사전에 예방하시기 바랍니다 😄

---

#### ※ 각주

\[1\] Forgejo: Git 저장소를 웹에서 호스팅하고 협업 기능을 제공하는 오픈소스 소프트웨어입니다.  
  
\[2\] 저장소 템플릿: 미리 준비한 파일 구조와 설정으로 새 Git 저장소를 만드는 기능입니다.  
  
\[3\] 원격 코드 실행: 공격자가 네트워크를 통해 서버에서 임의의 명령이나 프로그램을 실행하는 취약점입니다.  
  
\[4\] Git 메타데이터: 커밋, 브랜치, 원격 저장소 정보처럼 Git이 작업을 관리하기 위해 저장하는 내부 정보입니다.  
  
\[5\] 변수 확장: 파일 속의 특정 표식을 실제 저장소 이름이나 설명 같은 값으로 치환하는 처리입니다.  
  
\[6\] .git 디렉터리: Git이 해당 폴더를 저장소로 인식하게 만드는 특별한 디렉터리입니다.  
  
\[7\] 유지보수 계열: 같은 주 버전 안에서 보안 수정과 버그 수정을 계속 제공하는 버전 묶음입니다.