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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
gitea-artifact-v4-readall — Gitea Actions artifact v4 DoS에 대한 Proof-of-concept 및 실습 환경: parseProtobufBody의 무제한 io.ReadAll로 인해 job token이 과대한 CreateArtifact 본문을 POST할 수 있습니다. | Kitploit
도구/GitHubGitHub/abraxas/gitea-artifact-v4-readall
Vulnerability AnalysisExploitationSecurity VirtualizationWeb SecurityLabs & Practice
GitHubabraxas/gitea-artifact-v4-readall

gitea-artifact-v4-readall

Gitea Actions artifact v4 DoS에 대한 Proof-of-concept 및 실습 환경: parseProtobufBody의 무제한 io.ReadAll로 인해 job token이 과대한 CreateArtifact 본문을 POST할 수 있습니다.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
115일 전아직 검토되지 않음
공유

Abraxas Labs - gitea-artifact-v4-readall

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  gitea-artifact-v4-readall

gitea-artifact-v4-readall

Gitea 1.27.3 - Gitea

job_summary.go는 이미 io.LimitReader를 사용해 MaxJobSummarySize(1 MiB)로 제한하고 있습니다. artifact v4의 parseProtobufBody는 제한 없이 io.ReadAll(ctx.Req.Body)를 수행합니다. CreateArtifact, Finalize, List, Get, Delete 모두 이 경로를 거칩니다. 임의의 사용자 PAT만으로는 충분하지 않습니다. 실행 중인 Actions job token이 필요합니다. Fork-PR job은 1.27.3에서 여전히 NeedApproval 상태입니다.

Job-summary는 LimitReader를 배웠습니다. Artifact v4는 그것을 복사하지 않았습니다. 실행 중인 job이 12 MiB CreateArtifact를 POST하면 Gitea가 전부 버퍼링합니다.

ID아직 CVE 없음
CWECWE-400
CVSSMedium: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
제품Gitea
영향받는 버전Actions가 활성화된 v1.27.3(146cc3e)까지
인증실행 중인 Actions job token
라이선스GNU Affero GPL v3.0
랩127.0.0.1 전용

공격자가 할 수 있는 일

실행 중인 Actions job(자신의 저장소 또는 이미 NeedApproval을 통과한 fork-PR)에서 임의로 큰 v4 CreateArtifact 본문을 POST하여 Gitea가 전부 버퍼링하도록 강제할 수 있습니다. 같은 인스턴스의 job-summary는 이미 1 MiB를 초과하는 모든 것을 거부합니다.

이는 Gitea 프로세스에 대한 메모리 압박입니다. 랩에서는 누락된 제한(12 MiB -> 200)을 입증했습니다. 프로세스를 죽이지는 못했습니다. RCE가 아닙니다. 인증되지 않은 공격도 아닙니다. 실행 중인 job 없이 탈취한 사용자 PAT만으로는 이 경로에 도달하지 못합니다.

발견 방법

GHSA 물결 이후 남은 맵에는 Actions 본문 처리도 포함되어 있었습니다. Fork-PR job은 1.27.3에서 여전히 NeedApproval 상태이므로, 이는 인증 없는 fork-PR 우회가 아닙니다. 저는 Actions API가 요청 본문을 읽는 방식을 살펴보았습니다. Job-summary에는 제한이 있습니다. Artifact v4에는 없습니다.

gitea/act_runner:0.2.13을 띄우고, job token이 존재하도록 hold 워크플로를 심은 뒤, 12 MiB CreateArtifact를 POST했습니다. HTTP 200 ok와 signedUploadUrl이 반환되었습니다. 그다음 8 MiB job-summary: 400 invalid summary. GET /api/v1/version은 여전히 200. Gitea는 계속 살아 있었습니다. 랩의 mem_limit은 1g입니다. 본문은 12 MiB로 제한했으므로 호스트가 실험이 되지 않도록 했습니다. 호스트 executor 전용. docker.sock 없음.

이미 기록된 잘못된 방향들: job token 없는 CreateArtifact(401은 버그가 아님); 프로세스 킬 / OOM(SUCCESS는 12 MiB -> 200인 반면 8 MiB summary -> 400); signedUploadUrl을 RCE로 취급; fork-PR 인증 없음; 리버스 셸. 전부 쇼일 뿐입니다.

랩

cd lab
./run.sh

오직 http://127.0.0.1:18135만 대상으로 합니다. compose 내부의 ROOT_URL은 http://gitea:3000/이므로 runner가 등록할 수 있습니다.

v4-create status=200 sent=12582912
v4-unbounded-readall=1
job-summary status=400 sent=8388608 invalid summary cap=MaxJobSummarySize=1048576
gitea-still-up status=200
SUCCESS GITEA-ARTIFACT-V4-READALL

수정 방법

parseProtobufBody를 proto 크기 제한으로 io.LimitReader로 감싸면 됩니다. MaxJobSummarySize와 같은 패턴입니다. 12 MiB CreateArtifact는 8 MiB job-summary가 이미 실패하는 것과 같은 종류의 방식으로 실패해야 합니다.

참고 자료

  • github.com/go-gitea/gitea 태그 v1.27.3
  • artifactsv4.go · job_summary.go · MaxJobSummarySize
  • CWE-400

라이선스

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

도구 다운로드