FortiClient EMS API 인증 우회 취약점과 제로트러스트 대응
CVE-2026-35616의 FortiClient EMS 사전 인증 API 우회 원인과 공격 영향, 핫픽스 및 제로트러스트 방어 전략을 정리한다.
2026-08-14 · 최초 발행 2026-04-17
2026년 4월 공개된 CVE-2026-35616은 FortiClient EMS(Endpoint Management Server)의 관리 API에 인증 없이 접근할 수 있게 만드는 사전 인증 취약점이다. CVSS v3 점수는 9.1이며, 2026년 3월 31일부터 실제 공격에 활용되고 있다. 문제의 중심에는 Apache 역방향 프록시와 Django 애플리케이션 사이에서 인증 정보를 다루는 방식이 있다.
영향을 받는 제품과 대응 현황
CVE-2026-35616은 CWE-284(Improper Access Control)로 분류되며, Fortinet 보안 권고 식별자는 FG-IR-26-099다. 영향 범위는 온프레미스 FortiClient EMS 7.4.5와 7.4.6이다. FortiClient Cloud 및 FortiSASE는 서버 측 패치가 완료되어 영향을 받지 않는다.
긴급 핫픽스는 이미 배포됐고, 정식 패치는 7.4.7로 예정되어 있다. 취약점은 Simo Kohonen(Defused Cyber)과 Nguyen Duc Anh가 발견했다. CISA는 2026년 4월 6일 이를 KEV에 등록했으며, FCEB 기관의 적용 기한은 4월 9일이었다.
신뢰되지 않은 헤더가 인증 경로에 들어간 방식
FortiClient EMS는 Apache + mod_ssl을 역방향 프록시로 두고, 뒤에 Django 애플리케이션을 배치한다. 정상적인 mTLS 인증에서는 Apache mod_ssl이 클라이언트 인증서를 검증한 뒤, 그 결과를 WSGI 환경 변수 SSL_CLIENT_VERIFY에 설정한다. Django 미들웨어는 이 값을 읽어 인증 여부를 판단한다. WSGI 환경 변수는 Apache 프로세스 내부에서만 설정할 수 있으므로 외부 요청으로 조작할 수 없다.
7.4.5와 7.4.6에서는 역방향 프록시 배포를 지원하려고 HTTP 헤더 기반 경로가 추가됐다. 미들웨어는 SSL_CLIENT_VERIFY뿐 아니라 HTTP_X_SSL_CLIENT_VERIFY도 인증 정보로 수락했고, 두 입력의 신뢰 수준을 구분하지 않은 채 fallback 방식으로 처리했다. Apache에는 외부 요청의 X-SSL-CLIENT-VERIFY 헤더를 제거하는 설정도 없었다.
인증서 체인 검증에도 별도의 결함이 있었다. validate_cert_chain() 함수는 체인의 Subject와 Issuer DN(Distinguished Name) 문자열만 비교하고, X.509 서명을 암호학적으로 검증하지 않는다. 정상적인 검증은 각 단계에서 상위 인증서의 공개키로 하위 인증서 서명을 확인해야 한다. 이 결함에서는 Fortinet 내장 루트 CA와 Subject/Issuer DN 문자열이 일치하는지만 확인하므로, 공격자는 DN 문자열을 복제한 자체 서명 인증서로 체인 검증을 통과할 수 있다.
관리 API 장악으로 이어지는 공격 경로
공격 대상은 온프레미스에 배포된 FortiClient EMS 7.4.5 또는 7.4.6이다. EMS 관리 포트인 기본 443에 네트워크로 접근할 수 있어야 하지만, 사용자 인증이나 상호작용은 필요하지 않다.
공격자는 요청에 X-SSL-CLIENT-VERIFY: SUCCESS와 위조된 X-SSL-CLIENT-CERT 헤더를 넣는다. Django 미들웨어가 이를 신뢰하면 관리자 세션으로 인식하고, 엔드포인트 관리 API 전체에 접근할 수 있게 된다. 이후 관리자 API를 이용해 엔드포인트 정책을 변경하거나 악성 업데이트를 배포하고, 관리 대상 엔드포인트를 거점으로 내부 네트워크로 이동할 수 있다.
EMS가 관리하는 모든 FortiClient 에이전트에는 악성 정책과 업데이트를 배포할 수 있다. 합법적인 관리 채널을 악성코드 배포에 이용하면 탐지를 피하기 쉬우며, 엔드포인트를 통해 클라우드 인프라에 추가 공격을 수행할 수도 있다. 관리 대상 전체 엔드포인트에 랜섬웨어를 배포할 가능성도 있다.
실제 악용과 패치 대응 경과
3월 31일, watchTowr 연구진이 운영하는 허니팟에서 CVE-2026-35616에 대한 최초 공격 시도가 탐지됐다. 4월 2일에는 Defused Cyber 팀이 실제 환경의 제로데이 악용 사실을 확인해 보고했다.
Fortinet은 4월 4일 FG-IR-26-099 보안 권고와 함께 7.4.5/7.4.6용 긴급 핫픽스를 배포했다. CISA는 4월 6일 KEV(Known Exploited Vulnerabilities) 카탈로그에 등록하고 연방 기관에 긴급 패치를 지시했으며, FCEB(Federal Civilian Executive Branch) 기관의 의무 적용 기한은 4월 9일이었다.
핫픽스가 차단하는 지점
핫픽스는 Apache 설정에 아래 지시어를 추가한다.
RequestHeader unset X-SSL-CLIENT-VERIFYRequestHeader unset X-SSL-CLIENT-CERT
이 설정은 외부에서 들어오는 인증 관련 HTTP 헤더를 Apache 단계에서 제거한다. 따라서 스푸핑된 값이 Django 미들웨어까지 도달하지 않는다.
문제는 헤더 제거 누락에만 있지 않았다. 역방향 프록시와 백엔드 애플리케이션 사이의 신뢰 경계가 아키텍처 수준에서 정의되지 않았고, 신뢰할 수 있는 WSGI 환경 변수와 신뢰할 수 없는 HTTP 헤더가 하나의 인증 경로에서 함께 처리됐다. 인증서 체인도 문자열 비교에 의존해 암호학적 서명 검증을 생략했다. 역방향 프록시 지원 코드를 추가하면서 필요한 보안 설정이 함께 적용되지 않은 결과다.
관리 평면을 별도의 보안 경계로 다루기
우선 FortiClient EMS 7.4.5/7.4.6 환경에는 긴급 핫픽스를 적용해야 한다. EMS 관리 인터페이스는 관리 VLAN으로 네트워크 접근을 제한하고, WAF(Web Application Firewall)에는 X-SSL-CLIENT-VERIFY, X-SSL-CLIENT-CERT 헤더를 포함한 외부 요청을 차단하는 규칙을 둔다. EMS 접근 로그에서는 인증 없는 관리 API 접근 시도처럼 비정상적인 호출 패턴을 점검해야 한다.
제로트러스트 관점에서는 EMS 관리 서버를 별도 네트워크 세그먼트로 격리하고 최소 권한 원칙으로 접근을 제어한다. 단일 인증 시점에 의존하지 않고 요청별 인증 상태를 다시 검증하며, 역방향 프록시에서 백엔드로 전달할 헤더는 화이트리스트로 제한한다. 클라이언트 인증서의 공개키 해시를 사전 등록해 런타임에 핀 검증을 수행하고, EMS API 접근 패턴의 베이스라인과 이상 탐지를 적용하는 방식도 필요하다.
관리 평면은 데이터 평면과 물리적·논리적으로 분리해야 한다. mTLS와 토큰 기반 인증을 함께 써 단일 인증 경로 의존을 줄이고, 관리 서버 설정은 IaC(Infrastructure as Code)로 관리하면서 드리프트를 탐지한다. 엔드포인트에 배포하는 정책과 업데이트에는 코드 서명 검증을 적용해야 한다.
EMS에서 반복된 사전 인증 문제
CVE-2026-35616 이전에도 FortiClient EMS에서는 사전 인증 취약점이 발견됐다. CVE-2026-21643은 FortiClient EMS 7.4.4의 사전 인증 SQL Injection 취약점으로 Bishop Fox가 발견해 공개했다. CVE-2023-48788 역시 FortiClient EMS의 SQL Injection 취약점이며, 실제 공격에 악용된 전적이 있다.
이런 반복은 엔드포인트 관리 솔루션의 API 보안 설계를 다시 검토해야 한다는 신호다. 관리 서버가 수천 대의 엔드포인트를 제어하는 구조에서는 사전 인증 취약점 하나가 조직 전체 보안 체계를 무력화할 수 있는 단일 실패 지점(Single Point of Failure)이 된다. 관리 서버 자체를 신뢰의 출발점으로 두기보다, 관리 평면의 격리와 인증 입력의 분리, 인증서 검증의 강제를 지속적으로 확인해야 한다.
Sources
- Fortinet Patches Actively Exploited CVE-2026-35616 in FortiClient EMS - The Hacker News
- API Authentication Bypass in FortiClient EMS - Bishop Fox
- CVE-2026-35616 - PSIRT | FortiGuard Labs
- CVE-2026-35616: FortiClient EMS Flaw Under Active Exploitation - eSecurity Planet
- FortiClient EMS Zero-Day: CVE-2026-35616 - watchTowr
- CVE-2026-35616: FortiClient EMS API Auth Bypass - SOCRadar
- FortiClient EMS Zero-Day Exploited - Help Net Security
- Fortinet Issues Emergency Patch for FortiClient Zero-Day - Dark Reading
- One HTTP Header to Rule Them All: Breaking Down CVE-2026-35616 - Medium
- CVE-2026-35616 in FortiClient EMS - Penligent