CVE-2024-21762 - FortiOS SSL VPN 경계 외 쓰기(Out-of-Bounds Write)
개요
| 필드 | 값 |
|---|
| CVE | CVE-2024-21762 |
| 권고(Advisory) | FG-IR-24-015 |
| CVSS | 9.8 (Critical) |
| CWE | CWE-787 (Out-of-bounds Write) |
| CISA KEV | 예 - 실제 환경에서 적극적으로 악용됨 |
| 공격 벡터 | 네트워크 (비인증) |
| 영향받는 구성 요소 | sslvpnd (SSL VPN 데몬) |
설명
FortiOS SSL VPN의 경계 외 쓰기 취약점으로 인해 원격의 비인증 공격자가 특수하게 조작된 HTTP 요청을 통해 임의 코드 또는 명령을 실행할 수 있습니다. 이 취약점은 sslvpnd 내부의 HTTP 청크 전송 인코딩(chunked transfer encoding) 파서에 존재합니다. 데몬이 Transfer-Encoding: chunked 헤더가 포함된 POST 요청을 수신하면 청크 크기를 제대로 검증하지 못해 힙(heap)에서 경계 외 쓰기가 발생합니다.
영향을 받는 버전
안전 점검 방법론
이 스크립트는 동일한 유효한 엔드포인트(/remote/logincheck)에 대해 일반 POST 요청과 Transfer-Encoding: chunked가 포함된 POST 요청에 대한 서버 응답을 비교합니다.
- 일반 POST (
Content-Length 포함): 서버가 요청을 처리하고 HTTP 응답(200 OK)을 반환합니다.
- 청크 POST (
Transfer-Encoding: chunked 포함): 취약한 버전에서는 sslvpnd가 청크 인코딩을 처리하지 못하고 응답 없이 연결을 종료합니다(0바이트).
이러한 차등 동작은 실제 경계 외 쓰기를 트리거하지 않고도 취약점을 확인할 수 있게 해줍니다.
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> Connection closed (0 bytes) <-- VULNERABLE
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> HTTP/1.1 200 OK (N bytes) <-- PATCHED
사용법
python cve_2024_21762_safecheck.py <host> <port>
예시
$ python cve_2024_21762_safecheck.py 10.0.0.1 8443
[*] Target: 10.0.0.1:8443
[*] CVE-2024-21762 - Out-of-Bounds Write in sslvpnd (CVSS 9.8)
[*] Method: Compare normal POST vs chunked POST response
[*] Test 1: Normal POST to /remote/logincheck
Response: HTTP/1.1 200 OK
Size: 722 bytes
[*] Test 2: Chunked POST to /remote/logincheck
Response: empty (connection closed by server)
============================================================
[!] VULNERABLE to CVE-2024-21762
Normal POST works but chunked TE causes connection
drop -> sslvpnd cannot handle chunked TE
Severity: CRITICAL (CVSS 9.8)
CISA KEV: Yes (actively exploited in the wild)
============================================================
가능한 결과
| 결과 | 의미 |
|---|
VULNERABLE | 일반 POST는 응답하지만 청크 POST는 연결을 끊음 |
PATCHED | 두 요청 모두 HTTP 응답을 받음 |
INCONCLUSIVE | 두 요청 모두 응답을 받지 못함 (속도 제한 활성화 상태, 나중에 재시도) |
참고 사항
- 이 점검은 취약점을 악용하지 않습니다. 단지 HTTP 파서의 차등 동작만 감지합니다.
- 대상은
/remote/logincheck에 대한 여러 POST 요청 후 속도 제한(rate limiting)을 활성화할 수 있습니다. INCONCLUSIVE 결과가 나오면 몇 분 기다린 후 재시도하세요.
- 일부 타사 스크립트(예: BishopFox 점검)는
/remote/VULNCHECK를 엔드포인트로 사용합니다. 해당 경로는 모든 FortiGate 버전에서 예상된 403을 반환하지 않아 신뢰할 수 없는 결과를 초래할 수 있습니다. 이 스크립트는 알려진 유효한 SSL VPN 엔드포인트인 /remote/logincheck를 사용합니다.
참조