
FortiNet 취약점 CVE-2025-64446용 스캐너
Fortinet/FortiWeb 대상에서 watchTowr Labs가 보고한 fwbcgi 인증 우회 패턴을 탐지하기 위한 간단한 Python 헬퍼입니다. 인텔리전스 및 요청 세부 정보 출처: https://labs.watchtowr.com/when-the-impersonation-function-gets-used-to-impersonate-users-fortinet-fortiweb-auth-bypass/
python3 scanner.py http://192.168.9.1:80
python3 scanner.py -f targets.txt --find-forti --follow-redirects
대상은 스킴을 명시적으로 포함해야 합니다(http:// 또는 https://). 포트가 생략되면 스캐너는 HTTP의 경우 80, HTTPS의 경우 443으로 간주합니다. 대상당 한 줄씩 [+] VULNERABLE, [+] MAY BE VULNERABLE, [+] PATCHED, [+] POSSIBLY PATCHED 또는 [-] INDETERMINATE를 출력하며, 선택적으로 "forti"를 포함한 단어를 강조 표시합니다.
targets: 명령줄에 지정하는 하나 이상의 <scheme>://<host>[:<port>] 항목 (포트는 HTTP의 경우 80, HTTPS의 경우 443 기본값).-f/--targets-file: 파일에서 추가 대상을 읽습니다. 동일한 <scheme>://<host>[:<port>] 형식.--timeout: 소켓 타임아웃(초 단위, 기본값 5).--find-forti: 응답 본문에 나타난 "forti"를 포함하는 고유 토큰을 출력합니다.--follow-redirects: 30x 응답을 반환하는 대상에 대한 리디렉션 처리를 선택적으로 활성화합니다.--max-redirects: --follow-redirects 활성 시 리디렉션 홉 수 제한 (기본값 3, 0이면 플래그가 있어도 리디렉션을 따르지 않음).제대로 된 테스트 인프라가 없어서, 제가 사용한 단순한 테스트 스위트는 다음과 같습니다.
PYTHONPYCACHEPREFIX=./.pycache python3 -m unittest discover -s tests
스캐너는 최신 Fortinet 또는 Cloudflare 프런트 사이트와 통신하기 위해 TLS 1.2+ 지원에 의존합니다. 실행하는 python3가 최신 OpenSSL 빌드에 링크되어 있는지 확인하세요:
/usr/bin/python3)은 LibreSSL 2.8에 묶여 있어 TLS 1.3을 협상할 수 없으며 TLSV1_ALERT_PROTOCOL_VERSION 오류가 발생합니다. Homebrew(brew install python) 또는 pyenv를 통해 최신 인터프리터를 설치하고 해당 바이너리(예: /opt/homebrew/bin/python3)로 스캐너를 실행하세요.python3 - <<'PY' import ssl; print(ssl.OPENSSL_VERSION) PY로 확인하세요. 더 오래된 버전이 보고되면 업데이트된 Python(pyenv, 배포판 백포트 등)을 설치하세요.ssl.OPENSSL_VERSION 스니펫으로 다시 확인하세요.이전 인터프리터에서 실행해야 한다면 TLS 1.3이 필요한 HTTPS 대상은 실패할 것으로 예상하세요. HTTP 대상은 계속 정상 작동합니다.
--validate-tls: HTTPS 대상 및 리디렉션에 대해 인증서 검증을 강제합니다 (기본 동작은 자체 서명 인증서로 인한 차단을 피하기 위해 검증을 건너뜁니다).--workers: asyncio로 실행할 동시 스캔 수 (기본값 10).--user-agent: 사용자 지정 HTTP User-Agent 헤더 (기본값 fwbcgi-scanner/1.0).--csv-output: 콘솔 출력 외에도 <target>,<classification> 행을 지정된 CSV 파일에 기록합니다.