Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/abraxas/gitea-restore-file-open
Vulnerability AnalysisExploitationInformation GatheringSecurity VirtualizationWeb SecurityPenetration TestingLabs & Practice
GitHubabraxas/gitea-restore-file-open

gitea-restore-file-open

Gitea restore-repo file:// 로컬 파일 포함(CWE-73) 취약점에 대한 개념 증명으로, 신뢰할 수 없는 덤프 외부의 심볼릭 링크 대상을 릴리스 첨부 파일로 복사합니다.

저장소 보기
156일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - gitea-restore-file-open

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  gitea-restore-file-open

분석 문서: https://abraxaslabs.tech/research/gitea-restore-file-open

gitea-restore-file-open

Gitea 1.27.3 - Gitea

CVE-2026-59765는 OpenWithClient에 hostmatcher HTTP 클라이언트를 추가했습니다. file:// 분기는 해당 클라이언트를 무시하고 os.Open을 호출합니다. 덤프 복원에는 DownloadFunc가 없습니다. 이어서 gitea_uploader.go가 재작성된 file:// URL을 엽니다. os.Open은 덤프 측 심볼릭 링크를 따라갑니다. 경로 결합은 덤프 내부에 머무르지만, 심볼릭 링크는 그렇지 않습니다.

운영자가 신뢰할 수 없는 덤프를 복원하면 심볼릭 링크의 대상이 릴리스 첨부 파일로 복사됩니다. Gitea uid 권한으로 실행되므로, 이는 서비스 계정이 읽을 수 있는 모든 파일이 됩니다.

ID아직 CVE 없음
CWECWE-73
CVSSMedium: 4.2 CVSS:3.1/AV:L/AC:L/PR:H/UI:R/S:U/C:H/I:N/A:N
제품Gitea
영향 범위v1.27.3(146cc3e)까지; 로컬 운영자 gitea restore-repo
인증신뢰할 수 없는 덤프에 대한 로컬 운영자 복원
라이선스GNU Affero GPL v3.0
랩127.0.0.1 전용

공격자가 할 수 있는 일

덤프 내부 경로 결합 하위에 심볼릭 링크를 포함한 신뢰할 수 없는 덤프("백업" 디렉터리, 신뢰할 수 없는 원격지로부터의 복원)를 관리자에게 건네줍니다. 복원 시 대상 파일이 복원된 저장소의 릴리스 첨부 파일로 복사됩니다. 해당 저장소를 읽을 수 있는 사람은 누구나 이를 다운로드할 수 있습니다.

덤프 작성자가 app.ini를 지정하면 이는 자격 증명 탈취입니다(INTERNAL_TOKEN, SECRET_KEY, JWT, DB 비밀번호). 랩 오라클은 app.ini가 아닌 미리 심어둔 증인 파일이었습니다. 이는 OS LPE가 아닙니다. 인증되지 않은 공격도 아닙니다. 덤프 루트 경로 결합 탈출도 아닙니다. GitHub/GitLab/Gitea로부터의 실시간 마이그레이션은 DownloadFunc를 설정하며 공격자의 file://을 os.Open하지 않습니다.

발견 경위

복원 맵 두 개가 남은 테이블 위에 놓여 있었습니다. 나는 먼저 명백한 쪽을 랩에서 실험했습니다.

발견 8은 덤프 루트 경로 결합 탈출이었습니다. release.yml에 절대 경로 DownloadURL을 넣고, FilePathJoinAbs가 순진한 filepath.Join(base, "/etc/passwd")처럼 덤프 접두사를 버리기를 기대했습니다. 1.27.3에서는 그렇지 않습니다. 각 sub는 filepath.Clean("/"+s)를 거친 뒤 filepath.Join(base, cleaned)가 됩니다. /tmp/dump + /tmp/GITEA-JOIN-OUTSIDE의 복제 결합은 /tmp/dump/tmp/GITEA-JOIN-OUTSIDE로 유지되었습니다. 복원은 덤프 하위의 file://을 재작성했고 open ...: no such file or directory로 실패했습니다. 이 태그에서는 경로 결합 탈출이 아닙니다.

발견 9가 실제로 성립한 것입니다. 나는 덤프 외부에 증인 파일을 심고, 덤프 내부 경로 결합 위치에 심볼릭 링크를 두고, gitea restore-repo를 실행했습니다. 복원 rc=0. 복원된 릴리스 첨부 파일에는 GITEA-FILE-OPEN-WITNESS가 담겨 있었습니다.

이미 기록된 잘못된 시도들: 절대 경로 DownloadURL을 통한 덤프 루트 경로 결합 탈출; 실시간 마이그레이션 file:// LFI; X-Gitea-Internal-Auth(복원은 /api/internal이 아닌 Gitea uid로 실행되는 CLI임); 복원 HTTP를 원격 비인증으로 취급하는 것(CVSS는 로컬, 높은 권한, 사용자 상호작용); 리버스 셸. 모두 쇼에 불과합니다.

랩

cd lab
./run.sh

오직 http://127.0.0.1:18137만 대상으로 합니다. Compose는 lab/dump를 읽기 전용으로 마운트합니다. run.sh는 컨테이너 내부에 witness를 심고, dump를 빌드하고, 심볼릭 링크를 배치한 다음, gitea restore-repo를 실행합니다.

restore-rc=0 Restore repo labadmin/restored successfully
download status=200 snippet=GITEA-FILE-OPEN-WITNESS
SUCCESS GITEA-RESTORE-FILE-OPEN

수정 사항

OpenWithClient에서 file://을 제거하거나, 덤프 심볼릭 링크를 따라가지 않도록 거부하고, 신뢰할 수 없는 덤프를 복원하지 않도록 합니다. 복원된 첨부 파일에는 덤프 외부의 증거물이 포함되어서는 안 됩니다.

참고 자료

  • github.com/go-gitea/gitea 태그 v1.27.3
  • uri.go · gitea_uploader.go · FilePathJoinAbs
  • 인접 패치: CVE-2026-59765
  • CWE-73

라이선스

GNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 실험실 전용입니다. 보증은 제공되지 않습니다.

도구 다운로드