
CICD-Goat-Vapt-Writeup — Updated!
OWASP CICD-Goat 전체 VAPT 분석 보고서 — 9개의 CTFd 플래그 캡처, OWASP Top 10 CI/CD 보안 위험에 매핑된 치명적(critical) 4건 및 높음(high) 5건의 발견 사항(CVE-2024-23897 포함), PoC, 수정 방안 및 면접 대비 요약 포함.
CICD-Goat VAPT 라이트업
OWASP CICD-Goat — 의도적으로 취약하게 구성된 CI/CD 환경(Jenkins, Gitea, GitLab, CTFd) — 에 대한 전체 취약점 평가 및 침투 테스트로, OWASP Top 10 CI/CD 보안 위험에 대해 엔드투엔드로 매핑되었습니다.
🧭 다른 저장소와의 관계
| 저장소 | 내용 |
|---|---|
| CICD-Goat-Vapt-Writeup (이 저장소) | OWASP CICD-Goat에 대한 전체 VAPT 라이트업 — CVE-2024-23897을 포함한 16개의 발견 사항, OWASP Top 10 CI/CD 보안 위험에 매핑, PoC 및 면접에 바로 활용 가능한 요약 포함 |
| From-Dev-To-Attacker | 나의 대표 현장 일지 — 개발자의 시각에서 작성한 취약점 패턴에 관한 67개의 독창적 라이트업으로, 소득세, 은행, 소매, 전자상거래, 화물 물류, 교육 등 기업 도메인 전반의 영향 프레이밍 포함 |
| From-Pentester-To-Red-Teamer | 웹/API 침투 테스트에서 레드 팀으로 전환하기 위한 나의 체계적인 24개월 로드맵 — 단계, 실습, 자격증, 그리고 진행 상황을 공개적으로 추적 |
| AppSec-From-The-Trenches | 침투 테스트 도구 및 방법론 참고 자료 — Burp Suite, Nmap, Metasploit, Hydra, Hashcat 등을 실제로 사용하는 방법과 나의 WAPT 방법론 |
| API-From-The-Trenches | 심층 API 보안 시리즈 — OWASP API Top 10 커버리지, BOLA, JWT 공격, GraphQL 테스트, 전체 방법론 |
| Bug-Bounty-Hunting-Companion | 실제로 공개된 버그 바운티 보고서를 재현 가능한 체크리스트로 정리 |
| DarkWeb-From-The-Trenches | 위협 인텔리전스 및 다크 웹 OSINT 방법론 — 자격 증명 유출 모니터링, 랜섬웨어 추적, 사전 계약 TI |
| .pcap-Arsenal | 웹/API/네트워크 계층 분석 및 학습을 위해 프로토콜별로 정리된 패킷 캡처 |
| Pentest-Engagement-Playbook | 컨설턴트 수준의 범위 설정, ROE, 심각도 근거, 경영진 보고 템플릿 — 계약을 뒷받침하는 고객 대면 운영 플레이북 |
이 저장소가 존재하는 이유
대부분의 CI/CD 보안 라이트업은 순수하게 이론에 머물거나("파이프라인 오염 실행"을 설명하는 슬라이드) 순수하게 CTF 플래그만 쫓거나("여기 플래그가 있고, 다음으로"라는 한 줄) 하는 식입니다. 이 저장소는 둘 다 지향하지 않습니다. 아래의 모든 발견 사항은 완전히 검증되고 PoC로 뒷받침된 취약점이며, 특정 OWASP CI/CD-SEC 위험 범주에 매핑되어 있고, 면접이나 실제 고객 보고서에서 실제로 설명하고 싶은 방식으로 작성되었습니다 — 막다른 길, 잘못된 가정, 그리고 그것들이 어떻게 바로잡혔는지까지 포함하여.
AppSec/DevSecOps/CI-CD 보안 면접을 준비 중이거나, CI/CD 툴체인과 관련된 모의해킹(pentest) 프로젝트를 준비 중이거나, 아니면 "Poisoned Pipeline Execution"이나 "Insufficient Credential Hygiene"이 실제 통신 상에서 어떻게 나타나는지 구체적이고 실습 중심으로 살펴보고 싶다면 — 이 문서는 바로 당신을 위해 작성되었습니다.
대상 환경
| 항목 | 값 |
|---|---|
| 대상 | OWASP CICD-Goat — 로컬 Docker Compose 배포 |
| 프로젝트 유형 | 승인된 자기주도 학습 랩 (그레이박스) |
| 기술 스택 | Jenkins 2.332.1, Gitea 1.16.5, GitLab 15.11.13-ee, CTFd, Docker Compose |
| 범위 | localhost:3000 (Gitea), :8080/:50000 (Jenkins), :4000 (GitLab), :8000 (CTFd), :8008 (prod-sim) |
| 방법론 | Phase 0–3 (범위 설정 → 핑거프린팅 → 취약점 식별 → 익스플로잇) |
전체 교전 규칙: docs/00-engagement-overview.md.
⚠️ 이 저장소의 모든 테스트는 테스터 본인의 로컬·일회용·의도적으로 취약한 Docker Compose 랩을 대상으로 수행되었습니다. 프로덕션 시스템, 공유 인프라, 제3자 데이터는 일절 관련되지 않았습니다. 직접 시도하기 전에 공식 저장소에서 본인의 CICD-Goat 사본을 먼저 구동하십시오.
결과 요약
| ID | 제목 | 심각도 | OWASP CI/CD 매핑 | CTFd 플래그 |
|---|---|---|---|---|
| F-010 | Jenkins 빌드 콘솔 로그의 시크릿 노출 → 자격 증명 탈취 → 무단 저장소 쓰기 | CRITICAL | CICD-SEC-6, -4, -2 | flag1, flag2 |
| F-013 | 안전하지 않은 자동 병합 로직이 코드 리뷰를 우회함 (PR 전체 단어 차이 휴리스틱) | CRITICAL | CICD-SEC-1, -5 | flag10 |
| F-016 | CVE-2024-23897 — 컨트롤러에서의 Jenkins CLI 임의 파일 읽기 | CRITICAL | CICD-SEC-7 | flag8 |
| F-017 | GitLab 공유 러너 등록 토큰 → 인스턴스 전체 CI/CD 시크릿 탈취 | CRITICAL | CICD-SEC-2, -6 | flag11 |
| F-019 | 에이전트 레이블 재정의를 통한 Jenkins 컨트롤러 노드 코드 실행 | CRITICAL | CICD-SEC-5, -4 | flag5 |
| F-018 | 분리된 파이프라인 저장소 + 브랜치 제외 필터 우회 | HIGH | CICD-SEC-4, -6 | flag3 |
| F-020 | 공유 에이전트 파일시스템이 FreeStyle 작업 자격 증명을 노출 | HIGH | CICD-SEC-6, -5 | flag6 |
| F-021 | Checkov SAST 설정 재정의로 탐지되지 않는 IaC 오구성 가능 | HIGH | CICD-SEC-1, -8 | flag7 |
| F-014 | CI/CD 파이프라인 변수에서 파생된 Flask 세션 시크릿 키 | HIGH | CICD-SEC-6 | flag11 (F-017 경유) |
추가로 findings/informational/에 6개의 정보성/보조 발견 사항(긍정 통제, RBAC 경계 확인, 경미한 정보 노출)이 있습니다.
발견 사항들이 어떻게 연결되는가
여러 발견 사항은 독립적이지 않습니다 — 하나가 다른 하나를 직접 가능하게 하거나 완성합니다. 면접에서 단일 발견 사항보다 더 인상적인 부분이 바로 이 부분입니다:
11개 CTFd 챌린지 중 9개 해결 및 플래그 검증 완료 — 전체 챌린지 교차 참조를 참조하십시오. 지속적인 공격에도 접근 제어 경계가 유지된 사례(Dormouse/flag9)도 솔직하게 문서화되어 있습니다.
전체 목차
아래의 모든 파일은 직접 링크되어 있습니다 — 폴더 트리는 파일들이 어떻게 구성되어 있는지 보여줄 뿐입니다.