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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
forgejo-restore-file-open — Forgejo 16.0.5 - 높음 - 원격 - 파일 읽기 - restore-repo가 dump 측 file://를 attachments로 따라감 | Kitploit
도구/GitHubGitHub/abraxas/forgejo-restore-file-open
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration TestingLabs & Practice
GitHubabraxas/forgejo-restore-file-open

forgejo-restore-file-open

Forgejo 16.0.5 - 높음 - 원격 - 파일 읽기 - restore-repo가 dump 측 file://를 attachments로 따라감

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - forgejo-restore-file-open

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

forgejo-restore-file-open

분류: 파일 읽기 도달 범위: 로컬

Forgejo 16.0.5 (8d24b7d) - Forgejo

신뢰할 수 없는 덤프에 대한 forgejo restore-repo는 릴리스 자산 URL을 raw filepath.Join(baseDir, download_url)로 재작성하고 file:// 접두사를 붙인다. uri.Open은 여전히 해당 경로를 os.Open한다. 빈 --units는 릴리스를 복원한다. Gitea 1.27.0은 localFileURL을 추가하고 이스케이프 항목을 건너뛰었다. 그 헬퍼는 여기에 없다.

신뢰할 수 없는 덤프에 대한 운영자 복원은 forgejo uid가 열 수 있는 호스트 파일을 릴리스 첨부 파일로 복사한다.

ID아직 CVE 없음
분류파일 읽기
도달 범위로컬 (신뢰할 수 없는 덤프에 대한 운영자 forgejo restore-repo)
CWECWE-22 / CWE-73
CVSS높음: 7.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
제품Forgejo
영향받음v16.0.5 (8d24b7d)까지; 로컬 운영자 복원
인증신뢰할 수 없는 덤프에 대한 로컬 운영자 복원
라이선스GNU Affero GPL v3.0
랩127.0.0.1 전용

공격자가 할 수 있는 일

운영자에게 덤프 디렉터리를 건네거나(또는 이미 INTERNAL_TOKEN과 서버가 읽을 수 있는 경로를 보유). 유닛에는 releases / release_assets가 포함된다.

권한메서드 / 싱크정찰 / 무결성 / 가용성랩 입증 또는 추론
덤프 밖으로 ..를 통해 forgejo uid가 열 수 있는 호스트 파일 읽기release.yml download_url: ../FORGEJO-FILE-WITNESS.txt; 복원이 조인하고, uri.Open이 os.Open하며, 바이트가 witness.txt로 저장됨정찰 (호스트 파일 기밀성)랩 입증. 첨부 본문은 FORGEJO-RESTORE-FILE-OPEN-WITNESS. 덤프 내 미끼 INSIDE-DUMP-NOT-HOST는 제공되지 않음
덤프 내부에 심은 심볼릭 링크로 동일한 결과조인된 경로가 baseDir 아래에 유지됨; os.Open이 링크를 따라감정찰uri.Open file -> os.Open에서 추론. 랩은 심볼릭 링크가 아닌 ..를 사용
PR 패치에 동일한 싱크pull_request.yml PatchURL이 같은 방식으로 재작성된 후 uri.Open으로 repo/pulls/<n>.patch에 기록됨정찰restore.go GetPullRequests에서 추론. 랩은 릴리스만 복원
복원된 저장소의 독자가 호스트 파일을 다운로드GET /<owner>/<repo>/releases/download/<tag>/<name>정찰복원된 공개 저장소에서 labadmin Basic으로 랩 입증
일반적인 호스트 파일: app.ini, INTERNAL_TOKEN, SECRET_KEY, DB 비밀번호forgejo uid가 설정 트리를 읽을 수 있음정찰추론. 랩 증인은 실제 비밀이 아닌 덤프 옆에 심은 파일

여기서 차단된 것: 라이브 POST /repos/migrate file:// LFI (DownloadFunc 설정됨; PR PatchURL은 클론 HTTP 베이스에 대해 접두사 검사됨). 절대 DownloadURL 덤프 루트 조인 이스케이프 (Go filepath.Join("/dump", "/etc/passwd")는 /dump/etc/passwd로 유지됨). 비인증 HTTP 복원 (CLI / 내부 토큰 전용). 백업 dump가 app.ini를 패킹 (설계상 비밀, 아카이브 모드 0600). OS LPE 아님. 원격 LFI 아님.

발견 방법

두 가지 복원 아이디어가 있었다. Gitea 절대 조인을 머릿속에서 먼저 랩했다. Go filepath.Join은 Python os.path.join처럼 절대 두 번째 인수를 버리지 않는다. 작동하는 입력은 상대 경로 ..이다. Gitea의 localFileURL은 이 트리에 없다.

이미 기록된 잘못된 시도: 절대 DownloadURL을 통한 덤프 루트 조인 이스케이프; 라이브 migrate file:// LFI; X-Forgejo-Internal-Auth (복원은 /api/internal이 아닌 forgejo uid로서의 CLI); 복원 HTTP를 원격 비인증으로 취급; 리버스 셸. 쇼에 불과.

랩

python3 forgejo-restore-file-open-Abraxas-Labs.py

또는:

cd lab
./run.sh

오직 http://127.0.0.1:19340만 대상으로 한다. 이미지 codeberg.org/forgejo/forgejo:16.0.5. 증인 FORGEJO-RESTORE-FILE-OPEN-WITNESS.

IOC asset name='witness.txt' ...
IOC download status=200 bytes=34 snippet=b'FORGEJO-RESTORE-FILE-OPEN-WITNESS\n'
SUCCESS forgejo-restore-file-open how=live ..-join file:// os.Open FORGEJO-RESTORE-FILE-OPEN-WITNESS

수정

EvalSymlinks 후 조인된 경로를 baseDir 아래에 가둔다 (Gitea PR 38215 localFileURL). ..를 거부한다. 덤프 측 심볼릭 링크를 덤프 밖으로 따라가지 않는다. 덤프 루트 기반 헬퍼를 제외하고 uri.Open에서 file://를 제거한다.

참고

  • codeberg.org/forgejo/forgejo 태그 v16.0.5
  • restore.go · uri.go
  • Gitea의 동일 클래스: gitea-restore-file-open
  • CWE-22 · CWE-73

라이선스

GNU Affero GPL v3.0. LICENSE 참조. 루프백 랩 전용. 보증 없음.

도구 다운로드