
CVE-2024-21762는 Fortinet의 FortiOS 및 FortiProxy 제품에서 SSL VPN 구성 요소에 존재하는 심각한 취약점입니다.
CVE-2024-21762는 Fortinet의 FortiOS 및 FortiProxy 제품에서 SSL VPN 구성 요소에 존재하는 심각한 취약점입니다. 이 취약점으로 인해 인증되지 않은 원격 공격자가 특수하게 조작된 HTTP 요청을 통해 대상 시스템에서 임의 코드 또는 명령을 실행할 수 있으며, 시스템이 완전히 제어될 수 있습니다.
위험성: 이 취약점으로 인해 공격자는 어떠한 인증도 필요 없이 원격으로 임의 코드를 실행하여 영향을 받는 장치를 완전히 제어할 수 있습니다. 이로 인해 민감한 데이터 유출, 서비스 중단, 나아가 추가적인 네트워크 공격까지 발생할 수 있습니다.
공격 방법: 공격자가 이 취약점을 악용하는 주요 수단은 특수하게 조작된 HTTP 요청을 전송하여 SSL VPN 구성 요소의 경계를 벗어난 쓰기(out-of-bounds write) 취약점을 트리거하는 것입니다. 구체적으로, 공격자는 정교하게 구성된 요청을 통해 메모리의 데이터를 조작하여 궁극적으로 원격 코드 실행을 달성할 수 있습니다.
방어 조치: 이 취약점으로 인한 공격을 방지하려면 FortiOS 및 FortiProxy를 공식적으로 제공되는 최신 보안 버전으로 즉시 업그레이드하는 것이 좋습니다. 또한 SSL VPN 기능을 비활성화하는 것도 임시 방어 조치가 될 수 있습니다.
CVE-2024-21762는 Fortinet FortiOS SSL VPN에서 발견된 고위험 취약점으로, 인증되지 않은 경계를 벗어난 쓰기 취약점에 해당합니다. 이 취약점은 원격 코드 실행(RCE)에 악용될 수 있어 기업 네트워크 보안에 위협이 됩니다.
FortiGate는 2024년 2월 여러 중·고위험 취약점을 수정하는 업데이트를 발표했습니다. 그중 이 글에서는 CVE-2024-21762의 악용 과정, 즉 이 취약점을 활용하여 원격 코드 실행을 달성하는 방법을 중점적으로 분석합니다.
다음 PoC 코드는 assetnote에서 제공한 것으로, 이 취약점을 악용하는 기본적인 단계를 보여줍니다.
# 간소화된 취약점 악용 코드 조각
ssl_do_handshake_ptr = b"%60%ce%42%00%00%00%00%00" # SSL 핸드셰이크 포인터
getcwd_ptr = b"%70%62%2c%04%00%00%00%00" # getcwd 함수 포인터
pivot_1 = b"%52%f7%fd%00%00%00%00%00" # pivot 명령어 세트 1
pivot_2 = b"%ac%c9%ab%02%00%00%00%00" # pivot 명령어 세트 2
rop = b"" # ROP 체인
rop += b"%c6%e2%46%00%00%00%00%00"
rop += b"%19%6f%4d%01%00%00%00%00"
# ... 나머지 ROP 체인 내용 생략
# 위조된 요청 데이터
body = (b"B"*1808 + b"=" + b"B"*1024 + b"&") * 20
data = b"POST /remote/hostcheck_validate HTTP/1.1\r\n"
data += b"Host: 192.168.1.229\r\n"
data += f"Content-Length: {len(body)}\r\n".encode("utf-8")
data += b"\r\n" + body
# 위조된 요청 전송
ssock1 = make_sock(TARGET, PORT)
ssock1.sendall(data)
FortiOS 7.4.2와 7.4.3의 바이너리 파일을 비교한 결과, 수정된 코드는 함수 sub_18F4980에 있습니다. 수정 사항은 주로 다음 두 가지에 집중되어 있습니다:
chunk 형식을 파싱할 때 chunk 길이에 대한 검증이 추가되었습니다. 디코딩된 길이가 16을 초과하면 불법으로 간주합니다.chunk trailer의 쓰기 로직이 수정되어 \r\n이 경계를 벗어나 쓰이는 것을 방지합니다.경계를 벗어난 쓰기 트리거:
chunk를 파싱할 때 길이 필드가 디코딩된 후 0이면 chunk trailer 읽기가 트리거됩니다.chunk trailer를 쓸 때 길이 필드에 따라 스택에 \r\n이 기록됩니다.0으로 구성된 경우 반환 주소 근처에 \r\n이 경계를 벗어나 기록되도록 트리거됩니다.스택 오버플로 및 하이재킹:
chunk 데이터를 통해 스택의 반환 주소를 덮어써 프로그램 제어 흐름을 하이재킹할 수 있습니다.ROP 체인을 통한 하이재킹이 가능하지만, FortiGate 메인 프로그램의 /bin/sh는 명령을 직접 실행할 수 있는 기능이 없으므로 다른 악용 가능한 함수를 찾아야 합니다. 예를 들어, 위조된 구조체 포인터를 통해 SSL_do_handshake를 활용한 추가 공격을 수행할 수 있습니다.
기본 구성(웹 모드 비활성화)에서도 이 취약점은 여전히 악용될 수 있습니다.

CVE-2024-21762는 비교적 높은 복잡도를 가진 취약점으로, 그 악용 과정은 FortiOS의 코드 로직과 메모리 레이아웃에 대한 깊은 이해가 필요합니다. 전통적인 CTF 문제와 비교할 때, 실제 취약점 악용은 더 복잡한 컨텍스트와 구조 분석이 필요합니다.
저자가 제공한 더 자세한 중국어 분석 기사는 다음에서 확인할 수 있습니다: 원문 주소