Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-35616 — CVE-2026-35616 탐지 툴킷으로, FortiClient EMS의 사전 인증 API 우회 취약점을 탐지합니다. 취약한 버전 식별 및 수정 지침을 제공하는 Python 스캐너와 Nmap NSE 스크립트가 포함되어 있습니다. | Kitploit
도구/GitHubGitHub/keraattin/cve-2026-35616
Vulnerability ScannersVulnerability AnalysisExploitationInformation GatheringWeb SecurityNetwork SecurityPenetration TestingAuthentication
GitHubkeraattin/cve-2026-35616

CVE-2026-35616

CVE-2026-35616 탐지 툴킷으로, FortiClient EMS의 사전 인증 API 우회 취약점을 탐지합니다. 취약한 버전 식별 및 수정 지침을 제공하는 Python 스캐너와 Nmap NSE 스크립트가 포함되어 있습니다.

저장소 보기
12175개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-35616 - FortiClient EMS 사전 인증 API 우회를 통한 RCE

CVE-2026-35616 CVSS 9.1 CISA KEV CWE-284

요약

Fortinet FortiClient EMS 7.4.5 및 7.4.6의 치명적인 인증 우회 취약점으로 인해 완전히 인증되지 않은 원격 공격자가 단일 HTTP 헤더(X-SSL-CLIENT-VERIFY)를 스푸핑하여 API 인증을 우회할 수 있습니다. 이 결함은 Django 미들웨어가 신뢰할 수 있는 리버스 프록시뿐만 아니라 사용자 제어 헤더의 클라이언트 인증서 메타데이터를 신뢰하기 때문에 발생합니다. 이를 통해 공격자는 전체 관리 API에 접근할 수 있으며, 나아가 기업 전체의 관리 대상 엔드포인트에서 임의 코드 실행이 가능해집니다.

2026년 3월 31일부터 활발히 악용됨. 2026년 4월 6일 CISA KEV에 등재됨.


목차

  • 빠른 사실
  • FortiClient EMS란 무엇인가?
  • 취약점 심층 분석
    • 아키텍처
    • 취약점 발생 지점
    • 공격 흐름
  • 영향 분석
  • 영향받는 버전
  • 악용 타임라인
  • 탐지
    • Python 스캐너
    • Nmap NSE 스크립트
    • 수동 검증
  • 침해 지표
  • 조치 방안
  • 참고 자료
  • 작성자

빠른 사실

필드세부 정보
CVE IDCVE-2026-35616
공급업체Fortinet
제품FortiClient Enterprise Management Server (EMS)
영향받는 버전7.4.5, 7.4.6
영향받지 않는 버전7.2.x 브랜치, 7.4.4 및 이전 버전
CVSS v3.19.1 (치명적)
CWECWE-284 - 부적절한 접근 제어
공격 경로네트워크
인증불필요
사용자 상호작용없음
악용 성숙도실제 환경에서 악용됨
CISA KEV2026년 4월 6일 등재 (마감: 2026년 4월 9일)
패치핫픽스 제공됨; 7.4.7에서 완전 수정
발견자Simo Kohonen (Defused Cyber), Nguyen Duc Anh

FortiClient EMS란 무엇인가?

FortiClient Enterprise Management Server (EMS)는 Fortinet의 중앙 집중식 엔드포인트 관리 플랫폼입니다. 조직 전체에 FortiClient 에이전트를 배포, 구성 및 모니터링하기 위한 명령 및 제어 계층 역할을 합니다. Fortinet 관리 환경에서 모든 엔드포인트를 관리하는 두뇌라고 생각하면 됩니다:

  • 엔드포인트에 보안 정책 및 VPN 프로필 푸시
  • 엔드포인트 규정 준수 및 상태 점검 관리
  • 소프트웨어 업데이트 및 패치 배포
  • ZTNA(제로 트러스트 네트워크 액세스)를 위한 FortiGate 방화벽과 통합
  • 엔드포인트 원격 측정, 인증서 및 자격 증명 저장 및 관리

공격자가 EMS에 대한 관리 권한을 획득하면 본질적으로 조직 내 모든 관리 대상 엔드포인트의 키를 소유하게 됩니다.


취약점 심층 분석

아키텍처

FortiClient EMS는 내부적으로 비교적 표준적인 웹 애플리케이션 스택을 사용합니다:

+----------------+          +----------------+          +----------------+
|   브라우저 /   |  HTTPS   |    Apache      |   WSGI   |    Django      |
|   API 클라이언트 | -------> |   (mod_ssl)    | -------> |    백엔드      |
+----------------+          +----------------+          +----------------+

상호 TLS(mTLS)가 구성되면 Apache의 mod_ssl이 클라이언트 인증서 검증을 처리합니다. 인증서 검증 후 Apache는 검증 결과를 신뢰할 수 있는 WSGI 환경 변수를 통해 Django에 전달합니다:

  • SSL_CLIENT_VERIFY - 검증 상태 (SUCCESS, NONE, FAILED)
  • SSL_CLIENT_S_DN - 인증서의 주체 고유 이름(Distinguished Name)
  • SSL_CLIENT_SERIAL - 인증서 일련 번호

이것은 표준적이고 안전한 패턴입니다. 문제는 Django 미들웨어가 이 데이터를 읽는 방식에 있습니다.

취약점 발생 지점

FortiClient EMS 7.4.5 및 7.4.6에서 Django 인증 미들웨어는 HTTP 요청 헤더에서도 동일한 정보를 수락하도록 수정되었습니다:

  • X-SSL-CLIENT-VERIFY
  • X-SSL-CLIENT-S-DN
  • X-SSL-CLIENT-SERIAL

이는 Apache가 TLS 종료 지점이 아닌 리버스 프록시 배포를 지원하기 위해 추가된 것으로 보입니다. 그러나 미들웨어는 이 두 소스를 구분하지 않습니다. WSGI 변수를 먼저 확인하지만, 해당 변수가 없으면(mTLS가 구성되지 않았거나 직접 연결인 경우) HTTP 헤더로 대체됩니다 - 모든 클라이언트가 설정할 수 있는 헤더입니다.

개념적 분석은 다음과 같습니다:

안전한 경로 (의도된 방식):
  Apache mod_ssl이 인증서 검증 --> WSGI 환경 변수 설정 --> Django가 환경 변수 읽음  [OK]

안전하지 않은 경로 (취약점):
  공격자가 HTTP 헤더를 직접 설정 --> Django가 헤더 읽음 --> 신뢰함  [FAIL]

미들웨어는 사실상 클라이언트가 자신의 인증서 검증 상태를 스스로 증명하도록 신뢰합니다. 이는 경비원이 누군가에게 "저기, 다른 경비원이 이미 신분증을 확인했나요?"라고 묻고 "네"라고 대답하면 들여보내는 것과 같습니다.

공격 흐름

1단계: 공격자가 EMS API 엔드포인트에 POST 요청 전송
        다음 헤더 포함:
        
        X-SSL-CLIENT-VERIFY: SUCCESS
        X-SSL-CLIENT-S-DN: CN=admin
        X-SSL-CLIENT-SERIAL: 0000000000000001

2단계: Django 미들웨어가 WSGI 환경 변수 확인 → 없음
        HTTP 헤더로 대체 → X-SSL-CLIENT-VERIFY: SUCCESS 발견

3단계: 미들웨어가 요청을 관리자 신원으로 인증된 것으로 처리

4단계: 공격자가 전체 관리 API에 접근

5단계: 관리 API에서 공격자는 다음을 수행할 수 있음:
        - 모든 관리 대상 엔드포인트에 악성 정책 푸시
        - 저장된 자격 증명 및 인증서 추출
        - 소프트웨어 배포를 통한 페이로드 배포
        - ZTNA 구성 수정
        - 더 넓은 네트워크로 피벗

전체 공격은 단일 HTTP 요청만 필요합니다. 무차별 대입, 자격 증명 스터핑, 사회 공학이 필요 없습니다. 단 하나의 위조된 헤더만 있으면 됩니다.


영향 분석

이 취약점의 심각성은 서버 자체를 넘어섭니다. FortiClient EMS는 힘 증폭기(force multiplier)입니다 - 이를 침해하면 공격자는 모든 관리 대상 엔드포인트에 대한 영향력을 얻습니다:

즉각적 영향:

  • EMS 콘솔에 대한 전체 관리 제어
  • 저장된 모든 엔드포인트 구성, 자격 증명 및 인증서에 대한 접근
  • 엔드포인트 정책 읽기/수정/삭제 기능
  • VPN 구성 및 ZTNA 설정에 대한 접근

하위 영향 (관리 대상 엔드포인트 경유):

  • 소프트웨어 배포를 통한 모든 관리 장치에 악성코드 배포
  • 엔드포인트 원격 측정을 통한 자격 증명 수집
  • 모든 관리 대상 엔드포인트의 보안 제어 비활성화 또는 약화
  • VPN/ZTNA 구성 조작을 통한 측면 이동
  • 정책 기반 페이로드 전달을 통한 지속적 백도어 접근

기업 위험:

  • 일반적인 기업 배포에서 EMS는 수백에서 수천 개의 엔드포인트를 관리
  • 단일 악용된 EMS 인스턴스가 조직 전체 침해로 이어질 수 있음
  • FortiClient EMS는 종종 광범위한 접근 권한을 가진 신뢰 네트워크 영역에 위치

영향받는 버전

버전상태
FortiClient EMS 7.4.6취약
FortiClient EMS 7.4.5취약
FortiClient EMS 7.4.4 및 이전 버전영향 없음
FortiClient EMS 7.2.x영향 없음

악용 타임라인

날짜이벤트
2026년 3월 하순경Simo Kohonen과 Nguyen Duc Anh가 취약점 발견 및 보고
2026년 3월 31일허니팟(Defused Cyber)에서 첫 악용 시도 기록
2026년 4월 4일Fortinet이 7.4.5 및 7.4.6용 긴급 핫픽스 출시
2026년 4월 6일CISA가 CVE-2026-35616을 KEV 카탈로그에 등재 (마감: 2026년 4월 9일)
2026년 4월 13일본 탐지 툴킷 공개

탐지

Python 스캐너

Python 스크립트는 차등 응답(differential-response) 기법을 사용하여 여러 API 엔드포인트를 테스트합니다.

작동 방식:

  1. 핑거프린팅 - HTTP 응답 본문과 헤더를 통해 FortiClient EMS 식별
  2. 기준 요청 - 스푸프 헤더 없이 각 API 엔드포인트에 POST 전송 (HTTP 401 Unauthorized 예상)
  3. 스푸핑 요청 - X-SSL-CLIENT-VERIFY: SUCCESS를 주입한 동일한 요청 전송
  4. 비교 - 상태 코드가 401에서 다른 코드(일반적으로 500 또는 200)로 변경되면 인증 우회가 확인됨

악용 페이로드는 전송되지 않습니다. 이 테스트는 프로덕션 환경에서 안전합니다.

사용법:

# 의존성 설치 (이 스크립트에는 표준 라이브러리만 필요)
pip install -r requirements.txt

# 단일 대상
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100

# 사용자 지정 포트
python CVE-2026-35616_FortiClientEMS_detector.py -t ems.corp.local -p 8443

# 파일에서 대량 스캔
python CVE-2026-35616_FortiClientEMS_detector.py -f targets.txt

# JSON 출력을 파일로 저장
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100 --json -o results.json

# SSL 인증서 검증 활성화
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100 --verify-ssl

# 느린 네트워크를 위한 타임아웃 증가
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100 --timeout 20

옵션:

플래그설명기본값
-t, --target대상 IP 또는 호스트명-
-f, --file대상 목록 파일, 한 줄에 하나씩 (#로 시작하는 줄은 건너뜀)-
-p, --port대상 포트443
--timeout연결 타임아웃(초)10
--verify-sslSSL 인증서 검증 활성화비활성화
--json결과를 JSON 형식으로 출력꺼짐
-o, --output결과를 파일로 저장-

출력 예시:

╔══════════════════════════════════════════════════════════════╗
║  CVE-2026-35616 - FortiClient EMS 인증 우회 탐지기         ║
║  사전 인증 API 접근 우회 → 권한 상승                        ║
║  CVSS: 9.1 (치명적) | CISA KEV: 활발한 악용                ║
╚══════════════════════════════════════════════════════════════╝

[*] 192.168.1.100:443 스캔 중...

대상: 192.168.1.100:443
============================================================
  [*] FortiClient EMS 감지됨 (버전: 알 수 없음)

  취약점 테스트 결과:
    [취약] /api/v1/auth/signin  기준: 401 → 스푸핑: 500
    [취약] /api/v1/system/status  기준: 401 → 스푸핑: 500
    [취약 아님] /api/v1/endpoints  기준: 401 → 스푸핑: 401

  [!] 대상은 CVE-2026-35616에 취약할 가능성이 높음
      사전 인증 API 우회가 확인됨. 즉시 핫픽스 적용!
      조치: FortiClient EMS 7.4.7로 업그레이드 또는 핫픽스 적용

Nmap NSE 스크립트

# NSE 스크립트 설치
sudo cp CVE-2026-35616_FortiClientEMS.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb

# 기본 스캔
nmap -p 443 --script CVE-2026-35616_FortiClientEMS <target>

# 서브넷 스캔
nmap -p 443 --script CVE-2026-35616_FortiClientEMS 10.0.0.0/24

# 파일에서 여러 대상 스캔
nmap -p 443 --script CVE-2026-35616_FortiClientEMS -iL targets.txt

# 서비스 버전 탐지 포함
nmap -sV -p 443 --script CVE-2026-35616_FortiClientEMS <target>
도구 다운로드