
GitLab 임의 파일 읽기 익스플로잇
이 스크립트는 GitLab Community Edition(CE) 및 Enterprise Edition(EE)에 대해 원격 코드 실행을 제공합니다. 이 CVE는 임의 파일 읽기로, GitLab secrets.yaml 파일을 다운로드하여 Rails secret_key_base를 추출할 수 있게 합니다. 이를 통해 GitLab이 내부적으로 A/B 테스트에 사용하는 experimentation_subject_id 쿠키를 직접 서명하여 코드 실행을 얻을 수 있습니다. 쿠키에 포함된 페이로드에는 GitLab 인스턴스에서 코드를 실행할 수 있게 하는 역직렬화 취약점이 포함되어 있습니다.
임의 파일 읽기 취약점은 GitLab EE/CE 8.5 이상에 존재합니다. 이는 12.9.1, 12.8.8 및 12.7.8에서 수정되었습니다. 그러나 RCE는 취약한 experimentation_subject_id 쿠키가 도입된 버전 12.4.0 이상에만 영향을 미칩니다.
12.8.1에서 테스트됨
이 모듈은 python 3.9로 테스트되었으며 다음 종속성이 필요합니다:
pipenv가 설치되어 있다면 pipenv install 및 pipenv shell을 실행하여 pipenv 가상 환경에서 셸을 빠르게 시작할 수 있습니다.
$ ./cve_2020_10977.py --help
usage: cve_2020_10977.py [-h] --url URL -u USERNAME -p PASSWORD [--cmd CMD]
optional arguments:
-h, --help show this help message and exit
--url URL Target URL
-u USERNAME, --username USERNAME
Gitlab username
-p PASSWORD, --password PASSWORD
Gitlab password
--cmd CMD Command to execute
로컬 개발이나 익스플로잇 테스트를 용이하게 하기 위해 Makefile이 포함되어 있습니다. 이 CVE에 취약한 로컬 GitLab 버전을 빠르게 띄우기 위해 docker 및 docker-compose에 의존합니다.
make up
로컬 GitLab 인스턴스와 debian 인스턴스를 띄워 리버스 셸을 더 쉽게 테스트할 수 있게 합니다. GitLab 인스턴스는 localhost의 5580 포트에서 사용할 수 있습니다. 이 추가 이미지를 사용하면 docker 네트워크 내에서 접근 가능한 IP를 얻을 수 있습니다. docker 컨테이너에서 localhost에 접근할 수 있게 만드는 것도 가능하지만, 내 생각에는 그럴 가치가 없고 --privileged 사용을 권장하고 싶지 않습니다.
다음 명령으로 RHOST debian 인스턴스에 쉽게 연결할 수 있습니다:
make shell
이를 통해 nc -lnvp 9000으로 리버스 셸을 준비할 수 있습니다.
이 작업이 끝나면 익스플로잇을 테스트할 준비가 된 것입니다. 다음을 실행하면 됩니다:
make exploit
이 명령은 익스플로잇을 실행하지만 RCE를 수행하지는 않으며, 대신 GitLab Rails 시크릿을 출력합니다.
make exploit-rce
위에서 언급한 RCE 페이로드를 이 CVE와 연계하여 리버스 셸을 얻습니다.
즐겁게 해킹하세요!