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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
gitea-restore-file-open — Gitea restore-repo file:// 로컬 파일 포함(CWE-73) 취약점에 대한 개념 증명으로, 신뢰할 수 없는 덤프 외부의 심볼릭 링크 대상을 릴리스 첨부 파일로 복사합니다. | Kitploit
도구/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) 취약점에 대한 개념 증명으로, 신뢰할 수 없는 덤프 외부의 심볼릭 링크 대상을 릴리스 첨부 파일로 복사합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - gitea-restore-file-open

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  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는 컨테이너 내부에 증인을 심고, 덤프를 빌드하고, 심볼릭 링크를 배치한 다음, 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를 참조하세요. 루프백 랩 전용. 보증 없음.

도구 다운로드